mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-08-19 17:50:04 +03:00
Compare commits
4887 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6f8e223780 | |||
| df90ca7661 | |||
| ed005221ff | |||
| 15770695d8 | |||
| e190754ed3 | |||
| 29da015aac | |||
| 8919b4d425 | |||
| 26752f3be1 | |||
| 8134d396fe | |||
| adc796c8eb | |||
| ec75b0cf59 | |||
| 53a1db4dfc | |||
| 415b14903e | |||
| db1fbbd86a | |||
| 5b26f2d8e6 | |||
| 11a7060250 | |||
| 1c46f4cc03 | |||
| df8225ac54 | |||
| b3a96d9049 | |||
| 06f81c63eb | |||
| f35a9fc164 | |||
| fb457c5c0c | |||
| 590c9c9acf | |||
| 47ae6d3d7e | |||
| 3003c46d13 | |||
| 6d9743158c | |||
| 17dedf7cb5 | |||
| ebc46fea6f | |||
| a4a287242e | |||
| 89144534eb | |||
| f9a9214629 | |||
| 39f8af3880 | |||
| 28e96d720b | |||
| 755b53f946 | |||
| 2bad82f71e | |||
| bf1f3f7a36 | |||
| a711633909 | |||
| 7d02393b1b | |||
| edfedfb414 | |||
| e214bcf37c | |||
| d72d92565b | |||
| c391291244 | |||
| f8f29b1fc2 | |||
| a73b389d12 | |||
| 4a4eb13e7a | |||
| 842b51ff5d | |||
| 4cc2b6d676 | |||
| 4efaf77b19 | |||
| 0c141c893a | |||
| f310b25341 | |||
| c212160260 | |||
| 8d616decc5 | |||
| 9b0244ae38 | |||
| 6c267f01b1 | |||
| cab5a52aa2 | |||
| c7a33939bc | |||
| d147b18de2 | |||
| 72a7f8b2a9 | |||
| c5ec45a3a4 | |||
| 30ec755ecb | |||
| ff5f7d7204 | |||
| 7057f39c51 | |||
| 9edceb3233 | |||
| 58406dd54e | |||
| 08fee18cc2 | |||
| 2b39cd355a | |||
| 322b1fd44b | |||
| 51d3fb0276 | |||
| c2160b137d | |||
| 788269e970 | |||
| 2dce970162 | |||
| 045a5722ab | |||
| 07be2403b6 | |||
| 7d38d7b49b | |||
| 31495ef6a1 | |||
| 08d42b52f1 | |||
| 02d57c2bce | |||
| b0f414c67b | |||
| 02988742b7 | |||
| 043f05fda4 | |||
| cbe6ebdb53 | |||
| d024d2ba36 | |||
| de3aadaa71 | |||
| 6c83e7ca6f | |||
| 460ca88b98 | |||
| fb8552f83a | |||
| 352b6df34d | |||
| bc8d9f2077 | |||
| 582c75ec45 | |||
| d0dabc2bf8 | |||
| 1443cbe840 | |||
| fc1da688c0 | |||
| b28a068b43 | |||
| 3cf642a0f9 | |||
| 6e5a04f034 | |||
| c37c321cc2 | |||
| c09f663a47 | |||
| 74231267f8 | |||
| 46c14d2045 | |||
| 070f61002f | |||
| cd2b18968d | |||
| 62f8674d62 | |||
| 734bbf0ea9 | |||
| 68e4793ae0 | |||
| 2502ebb30a | |||
| e7f3bad46e | |||
| 77da2487ea | |||
| 98fafb0c3e | |||
| 9cb08020e1 | |||
| f4365c73a2 | |||
| 1c72695c44 | |||
| f43dc26af7 | |||
| c833efd35b | |||
| 345ff369e5 | |||
| e72cc3c11d | |||
| 3bb3743934 | |||
| 627409d1f4 | |||
| e9364d9f2a | |||
| f4f91e7b24 | |||
| 2e56cfa7d2 | |||
| b490f2c1e0 | |||
| 53fc1d8afd | |||
| 3093daf184 | |||
| 97b68a4943 | |||
| 2b57478ef0 | |||
| ef77388ba4 | |||
| 20206a4bc9 | |||
| 1d45e1b622 | |||
| b1eb7f2e98 | |||
| fc6d5b2649 | |||
| 211dd1e9c5 | |||
| 2874a683e9 | |||
| d3e43bad98 | |||
| a5b7965a29 | |||
| ca3b22bb5c | |||
| ce49cfb48a | |||
| fa6da6608a | |||
| 3db47cb5d2 | |||
| b221973a11 | |||
| e5f31f461f | |||
| e82f917015 | |||
| 12f7ed9357 | |||
| 8b5bc6c479 | |||
| f9a4df5a5b | |||
| 4a1abb3f50 | |||
| ca1b7cc8e4 | |||
| 8b46a7bbdb | |||
| 1a5c465ee5 | |||
| 208b2ad879 | |||
| 55945841bc | |||
| 6456eef8b5 | |||
| a83fe2c23e | |||
| 1be3f095c9 | |||
| 953809dbe4 | |||
| 7842e544ca | |||
| 07f6c3a95f | |||
| dafd354d12 | |||
| 041aac8648 | |||
| 8b0cd87696 | |||
| fa0bb9f6b1 | |||
| 5ac0272370 | |||
| 047b024f1c | |||
| b4cead5949 | |||
| bbe29be9a8 | |||
| c444af1ac2 | |||
| 7f44743c52 | |||
| 0117b7da68 | |||
| 33737db1be | |||
| ddb4ae0ca9 | |||
| 6e6acb776b | |||
| 8d9c7a93bc | |||
| 572c6cc10a | |||
| 3db8607f34 | |||
| a8f75d2c7d | |||
| a34871d9a5 | |||
| a7fb2258ca | |||
| 60881161ea | |||
| e596dbb32a | |||
| 93500040f9 | |||
| fb3ebd0397 | |||
| c82d106ed1 | |||
| 60d05f7321 | |||
| f36eb6935d | |||
| 7488107fa8 | |||
| 7d47e813b4 | |||
| ddfd4dba95 | |||
| ebb0c19c48 | |||
| dd1058fa8f | |||
| fff6be0cc0 | |||
| e40a285bb7 | |||
| 5086f85cc1 | |||
| bfa6b73e43 | |||
| d5fda6d6bc | |||
| 0c31633834 | |||
| 0e1f4633d0 | |||
| 482e08a98a | |||
| 9c563e76e8 | |||
| afa3f0af1f | |||
| ba196952f5 | |||
| c020f6203e | |||
| 2f32d7afd5 | |||
| 377bc412ce | |||
| 8583b947b1 | |||
| 66823690e4 | |||
| e0037c2ee8 | |||
| 5e3537f88a | |||
| 575cf9a9ce | |||
| de5a60e1cc | |||
| b8ed797c7c | |||
| 7a3267cfcf | |||
| d6f9cf4222 | |||
| 2f26addb25 | |||
| 5adbd9cb4c | |||
| cc21fd9a91 | |||
| 82a3c81d8c | |||
| 2d3208029b | |||
| 8d63d82e5c | |||
| 5910472fa5 | |||
| c80651a5ae | |||
| 9d0adf2498 | |||
| ac23d911df | |||
| 54971d9170 | |||
| 8749256d0b | |||
| 20beb0c0db | |||
| 1f6fc519cd | |||
| 348c6fc0ab | |||
| 4da188ea3d | |||
| b6992818c6 | |||
| 6752d11997 | |||
| 7e1249f259 | |||
| 97d5c95d8e | |||
| e1b419ea25 | |||
| 6aacf84a3b | |||
| 33c721d323 | |||
| 92036c2edf | |||
| 894baa0af8 | |||
| 90fce23f24 | |||
| 10c681622a | |||
| dcf30d9c25 | |||
| e638a2461d | |||
| acd981e37f | |||
| 3f76a993c2 | |||
| 052893cf66 | |||
| feb93e9830 | |||
| c5a2fe243b | |||
| d54bad5d0e | |||
| b02db3518e | |||
| 272d5a9653 | |||
| 49ed0a2e1b | |||
| d564fcb3e1 | |||
| 11eeabd71b | |||
| a23675d36d | |||
| 6ab131bae2 | |||
| cff218f353 | |||
| bc5443f4c6 | |||
| 43beb82eca | |||
| 4d2adaa1d5 | |||
| 0058184c4e | |||
| 31e29fe524 | |||
| c4b2a93907 | |||
| a986892e61 | |||
| 933522a341 | |||
| 20701b17e2 | |||
| 93fedcf20f | |||
| 61fb697977 | |||
| 32d9e0707c | |||
| f30ccb2458 | |||
| 07c621d09c | |||
| d533a98ed6 | |||
| df5944ff02 | |||
| 5679c844de | |||
| b0aaed65ea | |||
| 8e8bda2614 | |||
| 6e5b5bbc0a | |||
| 0641f0f72c | |||
| 258d59cff9 | |||
| 83be64034a | |||
| d536f6b177 | |||
| 560758c900 | |||
| 2d665c9e2d | |||
| b48fb801dd | |||
| 39b3845fd7 | |||
| 2d550542ee | |||
| ba99a1b637 | |||
| d6644013d2 | |||
| de4d70873a | |||
| 02ddaddfa8 | |||
| 117d04fb1d | |||
| abb7694211 | |||
| ff45b4c26f | |||
| 152ccceb61 | |||
| d84bb6d6a3 | |||
| 6ef9d9da5e | |||
| c2c4abb43b | |||
| ff1d6f859c | |||
| 74c7a3463d | |||
| e8a1a730fe | |||
| 03ae900f02 | |||
| e915962a04 | |||
| 36a03bd2ee | |||
| c5be8bcb8f | |||
| 9a641564fb | |||
| 5603515127 | |||
| 78a6af1ff9 | |||
| 3876e010eb | |||
| 1c5891204d | |||
| 7cdf26637e | |||
| 23958aedf4 | |||
| 180d4b2b3b | |||
| d0616e354d | |||
| cc04c4ca95 | |||
| 563d7ee3a9 | |||
| 48445ccff9 | |||
| e6125e4938 | |||
| b5b8a6db69 | |||
| ea8d236b73 | |||
| 0e9b3a269b | |||
| 34a7f3f6be | |||
| 6bc4ea5af0 | |||
| 697426e440 | |||
| dc1a2fcce6 | |||
| 2de2d525fc | |||
| 062a25f078 | |||
| 70e05fa6d0 | |||
| 8acaeb730b | |||
| 5349cf1ed2 | |||
| 9017b9bcaf | |||
| 2256d8b86e | |||
| beccb0deca | |||
| 62ee19c763 | |||
| b0a3f8b6c5 | |||
| 9537c3d0c2 | |||
| 362bc09a4d | |||
| 7efa3937f0 | |||
| 44258473b8 | |||
| eca81e08be | |||
| b94b72b457 | |||
| e1fa3fb0fc | |||
| ee234bfd5b | |||
| 7f31e28c6e | |||
| 018fd697b6 | |||
| 5c77fddf4e | |||
| 9f87b631ce | |||
| c4157e5272 | |||
| b9c4db0d70 | |||
| 38eb50ae76 | |||
| 254ade373d | |||
| 2b50cae54e | |||
| d2ac3c2fdd | |||
| 94f7144183 | |||
| 5d65d32f2c | |||
| e984019688 | |||
| 34dcbbb470 | |||
| c90a1ad7d0 | |||
| 5054e89272 | |||
| ebacb31fb5 | |||
| 59fe163f2f | |||
| b9efc7dc3b | |||
| 7c66c033a9 | |||
| c179a0f63c | |||
| 5b0aed68b0 | |||
| 0eecdd685a | |||
| 05776e09fc | |||
| 7703c2c90a | |||
| db57a7bed8 | |||
| 84a3269a15 | |||
| 46bad5121f | |||
| 24aad9f7be | |||
| 270895063d | |||
| 87d2e4ba56 | |||
| 18b3096c40 | |||
| 50250aba36 | |||
| 34b3c64a98 | |||
| bdb844e996 | |||
| f7366d84f4 | |||
| ba1072f0ac | |||
| 5eec84aaa3 | |||
| 98fb83ce25 | |||
| 5fe816eccd | |||
| 4e041189f8 | |||
| 42f8b25b66 | |||
| 51cd0196e5 | |||
| 712048bd9a | |||
| 93e0b3c8d6 | |||
| ae42979a74 | |||
| d7e0fe6e9f | |||
| ed7813d28d | |||
| 71f99af5a4 | |||
| 75d88455f5 | |||
| b69bbebbba | |||
| 0c4010a1d7 | |||
| aea68ce906 | |||
| 35b6137696 | |||
| 29bca037aa | |||
| 1b9347b5f1 | |||
| 6b3ce82d98 | |||
| d707c86633 | |||
| 56c33caaec | |||
| fe4ff24af8 | |||
| 5c7c755f50 | |||
| 8fa9c22142 | |||
| 51d203c676 | |||
| 4ad65ab86a | |||
| 4ce54ef5c7 | |||
| 52ae076a94 | |||
| 21c6cfc213 | |||
| 5993321dc5 | |||
| e129a63775 | |||
| 4aa36a68a6 | |||
| 40648b156b | |||
| d1be0aefa9 | |||
| 87506c2bcf | |||
| 258923f2eb | |||
| 8d319a2f2d | |||
| d6daeb124b | |||
| 004aee6346 | |||
| eb9b653243 | |||
| 9db01465e5 | |||
| 2aed290ee9 | |||
| 98bd5e6c5a | |||
| 3022375da3 | |||
| 2a82a33ee4 | |||
| c85c9b3a26 | |||
| 647c26c886 | |||
| 68529bc596 | |||
| 96ac18591a | |||
| e2c059485c | |||
| e5c668a021 | |||
| 9772bebab7 | |||
| a980d123b5 | |||
| de8ecb12cb | |||
| cb06a9bfe5 | |||
| 1f7560e25d | |||
| 2788f4d1d4 | |||
| b34e082079 | |||
| b9a2552d2a | |||
| 53c4f9fa1c | |||
| 60aef9e467 | |||
| e07314f4c1 | |||
| 9fbb810cf4 | |||
| 871aa6e3c1 | |||
| 8274993f29 | |||
| ce380b8e6f | |||
| 84bc7ac06b | |||
| b1fab0c21c | |||
| 3f52921d43 | |||
| 7a056d0648 | |||
| 1d8099f4b6 | |||
| abce152a49 | |||
| c8f4dcca6a | |||
| 8f342c6f9a | |||
| 8138ec8693 | |||
| c6375aa796 | |||
| cad913060c | |||
| 8b3a89c486 | |||
| 5d4009b0d1 | |||
| 90302e7f8d | |||
| f3e098f3d8 | |||
| 9417eb0337 | |||
| e699a82474 | |||
| c35b5269af | |||
| 051df19e0e | |||
| 39f3fee4a4 | |||
| 7a2c6222a9 | |||
| 070da02fb5 | |||
| d2327278fb | |||
| 3a7f2fc3b2 | |||
| 7ca6a0996d | |||
| 77408cc0e1 | |||
| ec724071e9 | |||
| f9f6c34c5c | |||
| cf4dee3615 | |||
| c4896d378b | |||
| db336caa58 | |||
| fde060b8f5 | |||
| efd4ee7871 | |||
| f6770e8665 | |||
| 4f81919ad2 | |||
| 3fb992c659 | |||
| 41b087198d | |||
| c41873f40e | |||
| 2d73466f03 | |||
| 4aeb0e45e9 | |||
| 62170b9952 | |||
| c593aef7bc | |||
| 18fa9b18bc | |||
| a0dc452172 | |||
| 6e2f811443 | |||
| b6719eab9e | |||
| 53896e5f44 | |||
| e078fa3cec | |||
| cffe619bdf | |||
| 5e06ef743a | |||
| ad896a1cdd | |||
| 50bf3101a3 | |||
| 5cff81b147 | |||
| 9ec1825982 | |||
| 353dd14762 | |||
| cd7ee20a68 | |||
| 274f09cbc5 | |||
| 71057b1c58 | |||
| dc8dd7f8db | |||
| 29045d88ed | |||
| df032bab12 | |||
| fa30eaf3d3 | |||
| 1be3c3c8ee | |||
| f5926b54c0 | |||
| 5174b02fb9 | |||
| e7ebe9f357 | |||
| 9819b41a20 | |||
| 505242f817 | |||
| babaae9256 | |||
| 281c3c649b | |||
| bfcca58787 | |||
| 22de841a76 | |||
| e2e000cf1b | |||
| 3b106cead5 | |||
| c5337e8e43 | |||
| 55d444cc10 | |||
| cddd3ac8b0 | |||
| 631c4ce855 | |||
| 1670df676a | |||
| 39367b5674 | |||
| f21c6c6890 | |||
| c7f70f4357 | |||
| 4a2dd00e76 | |||
| aed4c08d4c | |||
| b5cc01ef2e | |||
| 98caf6db76 | |||
| ddf877cd9e | |||
| 9455323530 | |||
| 564f4c2f9a | |||
| 1aaa909116 | |||
| 1787fdff57 | |||
| 7ea025aed0 | |||
| 6df7d55d39 | |||
| df62337289 | |||
| 3d3af08879 | |||
| 9fd54a78dc | |||
| 4acab37f56 | |||
| fba503c368 | |||
| 9cea2af3fc | |||
| edb9d54bd1 | |||
| 3bf24abc8c | |||
| 7be5c26d74 | |||
| 2cdf29eda9 | |||
| 5874c6de5c | |||
| e26997f62b | |||
| ce4c82f116 | |||
| 71d5686f78 | |||
| f599156641 | |||
| 6c5450646c | |||
| 60466abbd6 | |||
| dd1a186f77 | |||
| 3c8877e743 | |||
| f8352e221f | |||
| d33b87268d | |||
| 2a788c6439 | |||
| ef962afb74 | |||
| 2df320609a | |||
| 1a253b38e2 | |||
| 1efb623674 | |||
| 2aca94bfd3 | |||
| a331b909c5 | |||
| ba32e11d41 | |||
| e68792c112 | |||
| 94dcf953ff | |||
| 36bcd7026b | |||
| 479dfbb084 | |||
| 0d7d699795 | |||
| 1870e70707 | |||
| ed510fce9c | |||
| 028db0bf5d | |||
| dbfa2ff572 | |||
| 8cf0ed02be | |||
| 552bdb9b35 | |||
| 9f337ef752 | |||
| 28b9a6c769 | |||
| 6f17a5d166 | |||
| 6449cb9014 | |||
| 23b1e5c0b0 | |||
| 86fe2ba6dc | |||
| fbf9fcbff4 | |||
| f7d32ce260 | |||
| 84fa113217 | |||
| fcd103bb2a | |||
| a4f9af057a | |||
| a6c77af617 | |||
| e9125be594 | |||
| 5a19c24611 | |||
| b290e48cf7 | |||
| 6c175fa3d1 | |||
| 8bd8bcaca8 | |||
| 7ece483dce | |||
| 67f34cd67b | |||
| 68d5d96bce | |||
| f2192637b0 | |||
| 5cec7af469 | |||
| 2127b42b46 | |||
| a3884f8705 | |||
| 1c91a0b44e | |||
| 49411f029a | |||
| d2e0bd1779 | |||
| 45274d4121 | |||
| 88151c7cbc | |||
| c572222a14 | |||
| 462c74c38a | |||
| 32c3c1f0b7 | |||
| 9b55a52b4f | |||
| 2f992d4be4 | |||
| 1bbe12de44 | |||
| 5dac5970a5 | |||
| 905709500a | |||
| a44b23ba63 | |||
| 5288b2ad8e | |||
| 1b747f0ded | |||
| d068f9609c | |||
| 6e41f30efc | |||
| 7a3da17a58 | |||
| 15c647a91e | |||
| d002c250cd | |||
| 8d30e5f74d | |||
| d9292cfefb | |||
| 8459218cbc | |||
| b3e8f9f415 | |||
| e7168f7965 | |||
| 96e5a2d4d5 | |||
| fba3dfd156 | |||
| f76c3493d8 | |||
| 4ee2b31804 | |||
| 8a7b4be5ab | |||
| 78151ec96e | |||
| d62f4c36c2 | |||
| 320ea3a47e | |||
| f983c32675 | |||
| cd2404a3c3 | |||
| d13eb9fc95 | |||
| 57dab74804 | |||
| 82cb2e73aa | |||
| 1778da7185 | |||
| 00e00510c5 | |||
| 2f047d4816 | |||
| 73b45bfbff | |||
| 56bac4a221 | |||
| ea54570efb | |||
| 2072d63c5b | |||
| e813200714 | |||
| 6cbc33063a | |||
| a77821c864 | |||
| a792bf240f | |||
| eff24046d8 | |||
| 6fc93f1e75 | |||
| 9d6614df86 | |||
| 8d773c0f4f | |||
| 0327ed8718 | |||
| 890af4ca8f | |||
| 3cda0eb487 | |||
| 00195f9f8d | |||
| 2f646237da | |||
| ffbfd2c813 | |||
| 63c0c9a77f | |||
| 50723581b0 | |||
| b4b0949dd7 | |||
| 25d5e16e9e | |||
| 7b5114f62b | |||
| 4eb8022260 | |||
| 062b0aa33b | |||
| 0e0f6021ce | |||
| bc2102104f | |||
| 0af0ded038 | |||
| 285d38931f | |||
| 0ec5cd0704 | |||
| 8bf6799b09 | |||
| 0fdf649672 | |||
| 188af565dd | |||
| 92a9e5df63 | |||
| 99123ba012 | |||
| 05e15ff812 | |||
| f3661756c1 | |||
| b522264b40 | |||
| 7fb3e43d36 | |||
| ad8bf13f7d | |||
| 5bbde877e7 | |||
| 86415b2d26 | |||
| 668150fc3d | |||
| 53456e62ed | |||
| 2b4e353168 | |||
| bf7354072f | |||
| b3bff9546b | |||
| e455b221be | |||
| 284805e666 | |||
| 661ae104c2 | |||
| 5982168290 | |||
| 19a863c435 | |||
| 447c586a0d | |||
| 508da563b9 | |||
| f0dc84d83f | |||
| e3a7137ac2 | |||
| 1130085cf0 | |||
| f85208eec6 | |||
| d498175aad | |||
| 065b6571bf | |||
| e4e20423ff | |||
| 929560384d | |||
| 965466c1ee | |||
| 46e9b0fb4e | |||
| f0c1c3f86a | |||
| c71a2100b1 | |||
| f895e611df | |||
| 67253251c5 | |||
| 9bcad69093 | |||
| 67203f6780 | |||
| 5607db6788 | |||
| ab952024f4 | |||
| c85f641390 | |||
| ced154cb54 | |||
| 6bb4986b0b | |||
| ee9083aba5 | |||
| 46a2ea3689 | |||
| 987e31edc9 | |||
| 71d793faaf | |||
| c5728cd618 | |||
| 32e6ac9c26 | |||
| 8613273458 | |||
| d51638d0ad | |||
| 6bae6677c8 | |||
| 097e07a63a | |||
| cef0967e02 | |||
| b7d4c300c3 | |||
| 747c536370 | |||
| ea7dc33786 | |||
| 4445723811 | |||
| 271945a148 | |||
| 156133597d | |||
| e36be6e7c7 | |||
| e07cf19fe5 | |||
| 5edaf95599 | |||
| f66636e3ca | |||
| 1cfbfaa697 | |||
| 84eb6effdd | |||
| 95c8ddd2ec | |||
| 7998714d60 | |||
| ca7db6cb80 | |||
| 8a7783c163 | |||
| 81e99f014b | |||
| 8d8815ea2a | |||
| 26be7a0a24 | |||
| c390bcfec5 | |||
| 67904847f0 | |||
| 67ef701779 | |||
| b9a3287e80 | |||
| 7233dc170f | |||
| 2f80b2a013 | |||
| e77ee32357 | |||
| 17f7220891 | |||
| 0f7ba8c21c | |||
| 3528d66641 | |||
| 190aaa2627 | |||
| 460e7b6a94 | |||
| 6d45d5855d | |||
| 91da9a7689 | |||
| 041a18be17 | |||
| bba36f7fc7 | |||
| 055d21d254 | |||
| d304352b19 | |||
| 09fafa1e21 | |||
| 65e97240e6 | |||
| b7a7b33651 | |||
| 5ee592208c | |||
| 7f4f1dd416 | |||
| 0ab6423579 | |||
| 20ffaf59dc | |||
| 68f63673da | |||
| 7f7849c996 | |||
| 3535092f3a | |||
| 73adc0e5b7 | |||
| 3fdb9ba760 | |||
| d36b4e92ac | |||
| b50ab42d41 | |||
| e10dc8666e | |||
| 598a0c00dc | |||
| caad0a8783 | |||
| 336fd879c0 | |||
| fc148ca133 | |||
| 0a33633579 | |||
| 257d90f3fb | |||
| bc3f582bb0 | |||
| e7d29e234c | |||
| 1216398da9 | |||
| b62cab6e09 | |||
| 2ef091efcc | |||
| 0ef58c3155 | |||
| 89d8cdfc7e | |||
| 0c842417ef | |||
| be7780b035 | |||
| fe2f1ba1db | |||
| b97befb6a2 | |||
| 2969eff86a | |||
| 2ed0b3f935 | |||
| 45b6e68e09 | |||
| 3cdc4cb613 | |||
| a31bc67503 | |||
| db481dca94 | |||
| e3c36a2575 | |||
| c78c9f5a9b | |||
| 3f1aa08af6 | |||
| 6d5c8a8f51 | |||
| 3a44152201 | |||
| f92c041a1c | |||
| 95a515fc44 | |||
| e6458393ab | |||
| eb9945d9ae | |||
| 102d25a822 | |||
| 5541cade86 | |||
| 74383bfc42 | |||
| 83988bd43b | |||
| 3ebbc241a1 | |||
| be2a53e6e0 | |||
| 7fbc2e37b8 | |||
| ca842a6bcb | |||
| f60e0150b8 | |||
| d376b7d63e | |||
| 2c555d87b0 | |||
| 8a7f4b8dc1 | |||
| ed3d86c9a9 | |||
| e29439bd14 | |||
| 3b04f3bb0f | |||
| 89a08ba63a | |||
| 12023373cd | |||
| b978f31a93 | |||
| 056623f3d7 | |||
| 7be9270c24 | |||
| 89bf843a6d | |||
| 36d8e7d8d7 | |||
| 0c39adef95 | |||
| f6876e10cf | |||
| d1c754168a | |||
| 06b835607f | |||
| 22e39d0ee4 | |||
| 2a13ecc9be | |||
| e839e33a96 | |||
| 095375925e | |||
| 0be3783316 | |||
| 618dc80c2f | |||
| d3b6fe5f9c | |||
| 1c36d0682a | |||
| 785d8580b3 | |||
| aa2f6f96dd | |||
| 5140a2f626 | |||
| ecb5cf7cb2 | |||
| 2e56fb2bcc | |||
| 4dbed7d9c4 | |||
| c101092adf | |||
| fbe65e5e1c | |||
| f5a6ce44ce | |||
| 1a4d5c9543 | |||
| 32884a7ef6 | |||
| ba918ac1b4 | |||
| 4697def66b | |||
| 703c165188 | |||
| 09ed07293f | |||
| 84a25570cb | |||
| 8c82479d83 | |||
| b70a1f455c | |||
| 57db02e8c0 | |||
| ede3bc1128 | |||
| 5c0e525c1c | |||
| 219305df44 | |||
| c7434706a2 | |||
| fd04fbaaaf | |||
| e8d6c28955 | |||
| ce5ced1d00 | |||
| e609aae673 | |||
| 1227d08640 | |||
| b50d48b158 | |||
| badfe6c75e | |||
| 6ef5a5beeb | |||
| 3c12a67b76 | |||
| a03121bcfe | |||
| 9882123d69 | |||
| 44f687297a | |||
| a8464c516b | |||
| 4acbb29821 | |||
| 2103d87c89 | |||
| a64e3b3e68 | |||
| cf1045338e | |||
| 04c7abd9c3 | |||
| b1a7ebfdec | |||
| 0d8aa35f60 | |||
| 4fee63fe1c | |||
| 0d3eee7fe8 | |||
| b85a53405c | |||
| 92bd859a29 | |||
| 7d575e09e2 | |||
| 84ef5aecca | |||
| bc0f737dd7 | |||
| 06973f7065 | |||
| 8540dadbe9 | |||
| 55946f23a6 | |||
| 24cc058e5e | |||
| 553447ac3b | |||
| 66d70a8f66 | |||
| e749d77619 | |||
| 23e93d95b5 | |||
| 77d118b4ce | |||
| 27efcfb7eb | |||
| aa7847d3ad | |||
| 20578bda74 | |||
| 74042b8fba | |||
| e4d7433ef0 | |||
| 200c83b29d | |||
| b9e2967a5e | |||
| eed2f8c3a9 | |||
| a3301b71f6 | |||
| 546d1f40a0 | |||
| 3647515788 | |||
| bef10f9a05 | |||
| b769339295 | |||
| 74e3b5578e | |||
| b2111ba3cd | |||
| bd3ff6b348 | |||
| 303cf4dbff | |||
| 7ca954cf26 | |||
| 1204e41f01 | |||
| f3439c7eae | |||
| 8ac0334ebd | |||
| b39c2068e4 | |||
| a09af3b004 | |||
| 67b2eb1042 | |||
| 482869633a | |||
| c56cf8d55f | |||
| 8ddff3e6cd | |||
| a79fb1c491 | |||
| ace4dca5df | |||
| f064dca7ea | |||
| 0f88dade23 | |||
| 083b901eb3 | |||
| 327d5fe072 | |||
| 0a42b9e2c5 | |||
| 53ed2c4c58 | |||
| 5365ff40d3 | |||
| 89bdf84bcd | |||
| c560fc4933 | |||
| f4a43df52b | |||
| c7b85e3710 | |||
| b738016b78 | |||
| 9ad255f975 | |||
| 38c9440a15 | |||
| 1a51d05f8b | |||
| f1ef0e31d2 | |||
| d2a9773457 | |||
| 0e69905d9f | |||
| 1edc59e71b | |||
| e530940e47 | |||
| f51e01f47d | |||
| 9b9e52a1cb | |||
| 582f04f064 | |||
| c5bad3ad21 | |||
| e563b3b326 | |||
| f66dcd044f | |||
| 3a6555b345 | |||
| 67b44811af | |||
| dca81d0472 | |||
| 9568c1d985 | |||
| 617075f49f | |||
| d5739ab56a | |||
| b4bf51253b | |||
| 27fc6782bc | |||
| 72919f3d35 | |||
| 14ee6a66f8 | |||
| 6ef20bb7ae | |||
| fbadc2b608 | |||
| 269556e557 | |||
| 7c7b194cf0 | |||
| ead3410f30 | |||
| b97c24b2e1 | |||
| 8ba9e794e6 | |||
| ee38d7e089 | |||
| b3e7890ada | |||
| 62f4ae153b | |||
| 3f8de891c5 | |||
| 12ed08bc3a | |||
| 37ce5600c0 | |||
| e52687e88f | |||
| 61497d958e | |||
| b4584612b4 | |||
| 3ec09478de | |||
| 7813a0f81c | |||
| 07e318b3db | |||
| 27e63c0037 | |||
| 081fd746f0 | |||
| 3f745ebe9f | |||
| 6d4bd59cf8 | |||
| bf6789d913 | |||
| 372a7f45c5 | |||
| f162252e25 | |||
| ad4dde3d50 | |||
| 6fe15e357d | |||
| 294adef356 | |||
| 148114e325 | |||
| 2bd559ff5d | |||
| 73b0b59667 | |||
| 7c5735dc2a | |||
| 7ac2787019 | |||
| b78fddea39 | |||
| 309647c81f | |||
| bc6a48c6cf | |||
| f89c67cf19 | |||
| dc03ae2c6d | |||
| e977f471f1 | |||
| 59467601c2 | |||
| 4a3d1ca3f1 | |||
| 55e642e586 | |||
| d15a67fa56 | |||
| 8c38b5dc2e | |||
| 09a33fd8a9 | |||
| 535db41be8 | |||
| 9ab3fac841 | |||
| b6b8009548 | |||
| 5d72a89442 | |||
| c841a1fa7f | |||
| a1b1ab1478 | |||
| 315baab944 | |||
| 78d1ee295d | |||
| fd5091db5f | |||
| 4b75e4df27 | |||
| cad2a4caed | |||
| 141dea6bc7 | |||
| 658341189b | |||
| 823a684f8d | |||
| c31a116b72 | |||
| dfab48ac54 | |||
| a3d22efd77 | |||
| 387941fb62 | |||
| 53c05341d4 | |||
| 605542c330 | |||
| 5130713ba1 | |||
| 7b5ae2f077 | |||
| 388f3cb565 | |||
| af7c18f7a2 | |||
| 618e1ab349 | |||
| 18e0cc7f72 | |||
| b39ea45292 | |||
| b2149d03b9 | |||
| 796840d2f0 | |||
| 8efec111fc | |||
| 2073ed6f20 | |||
| 6daa19da9a | |||
| 7357975000 | |||
| d3024a2cce | |||
| b65490a312 | |||
| 80de0a8c40 | |||
| 38536d6f7f | |||
| c4dcf043ca | |||
| a70e599d80 | |||
| f430ddb624 | |||
| 031366383a | |||
| 99edc443e9 | |||
| 0677e11125 | |||
| ce71b8654d | |||
| 9f013d5779 | |||
| f8b1b4bab9 | |||
| 910b019f93 | |||
| d6126f764f | |||
| 65842bf669 | |||
| c39554bf49 | |||
| caa805ea64 | |||
| d47ef780f2 | |||
| 658952a38a | |||
| e3042683bd | |||
| 69cf62adac | |||
| a82a87f26b | |||
| 5dee786d7b | |||
| 314ced3951 | |||
| 46ef463135 | |||
| 9140756d30 | |||
| 0a5befc4c0 | |||
| fe46a7e686 | |||
| f972dc2d5c | |||
| d5c6183def | |||
| a5ab900d26 | |||
| 8ce5e2c1ab | |||
| 3b9027c401 | |||
| ed9c14a7ef | |||
| ce039c3ea5 | |||
| 906b1650b5 | |||
| daeb6f6b40 | |||
| 343205d705 | |||
| 79ad308781 | |||
| 314190a0ad | |||
| f0ea7ab328 | |||
| 26bd7bef58 | |||
| c3e73528f1 | |||
| 53b7dae139 | |||
| a7e80e6bfd | |||
| 04ebf058d5 | |||
| 6eed3feafb | |||
| fd10c4e1ee | |||
| a16a96942d | |||
| b56fbbad0b | |||
| bfc34dca3b | |||
| 3ed42b0098 | |||
| af25361762 | |||
| 376b311deb | |||
| b1cd474c77 | |||
| a6b00cbb16 | |||
| ce71bfa817 | |||
| 0b907122b7 | |||
| 31a5ee922a | |||
| 83acdeaf17 | |||
| 730801d955 | |||
| cd0ef0e09b | |||
| 8d42b9b4e8 | |||
| fe1183a7cd | |||
| 71c865f4d2 | |||
| 361e46d6d0 | |||
| 9120f00446 | |||
| 7efec25964 | |||
| b62bf7a700 | |||
| 23d6abd23b | |||
| 719c50caf8 | |||
| db0b9e7d52 | |||
| 16478459da | |||
| 0943048ad0 | |||
| 49a0f6cd99 | |||
| d8acc44672 | |||
| 9258ec0a2e | |||
| 3fdef8cfca | |||
| 264e98d6a8 | |||
| 5ec6cf7fb8 | |||
| 96c8608dc5 | |||
| c129d4fe45 | |||
| c37ff6a1ec | |||
| 3db3acb94e | |||
| 9344e6ad1a | |||
| 33e25a3984 | |||
| c16888a849 | |||
| 1cb334efba | |||
| 4cd188d4d5 | |||
| 6b8d8395b6 | |||
| 1e44c678fa | |||
| 0ea0128904 | |||
| 29727bacd7 | |||
| 09080c38d1 | |||
| 62a30a496a | |||
| b16cd226a2 | |||
| 3fc974209a | |||
| 5ec55b4ff0 | |||
| 3bd3d6b0bf | |||
| 6f4ca18d83 | |||
| 3970a2dc86 | |||
| b74aadb3e5 | |||
| 950176ec65 | |||
| 227f26afdb | |||
| 0cdb9a5cfc | |||
| d115ed59e0 | |||
| 7f7676e77b | |||
| ef088ed962 | |||
| 594ac31b2d | |||
| fb54230b60 | |||
| ba1d379ce8 | |||
| 854111f97e | |||
| 9757e10d6d | |||
| 7cc5410bfd | |||
| a7d17c6187 | |||
| 1af75828a0 | |||
| 731c738652 | |||
| 72a8405a47 | |||
| 2c7f5ca662 | |||
| a5a46c6fc2 | |||
| 7d8f5eb3bc | |||
| 3dc4268669 | |||
| 9827e0a42c | |||
| 1f9da29de1 | |||
| eaa2fd6939 | |||
| cdc42d0a48 | |||
| be34c3c7ef | |||
| 654dd2902d | |||
| 54c973d52b | |||
| b195f20f18 | |||
| 1f703731d3 | |||
| 912f5e5884 | |||
| e09086b074 | |||
| db2ae2044a | |||
| 952eb15deb | |||
| e2c03da940 | |||
| 80b4d20dfe | |||
| 2dccf5ef07 | |||
| e5df24a11c | |||
| ca18b7108d | |||
| 2c8eb68969 | |||
| d47b6e54fd | |||
| dfff67c082 | |||
| 6512d09cf8 | |||
| e3a0c80f1d | |||
| 5b6782f941 | |||
| 2df1657686 | |||
| b2a2ba71b4 | |||
| 3812c7b42d | |||
| 15f5eaa098 | |||
| 80fd73ca09 | |||
| 08fd20b04a | |||
| 9c48360b1a | |||
| 0c0e0d0263 | |||
| 81fbb4cb23 | |||
| 6aabcb5bd8 | |||
| 39d883bb3d | |||
| 623bc48ad8 | |||
| 62927dd8f0 | |||
| e1f2778434 | |||
| 98f6f381c8 | |||
| d2259ada49 | |||
| 1671b64702 | |||
| aef969499f | |||
| 21c84e00d3 | |||
| 2355fce3ae | |||
| 1825c6555a | |||
| 50b6c95d62 | |||
| ed00e45dba | |||
| 704bd732b5 | |||
| f0088c1bfa | |||
| d392f4db9d | |||
| eb895e7407 | |||
| 8cfc4c9a03 | |||
| 77dd67087b | |||
| 0022995555 | |||
| 86304e35a3 | |||
| d22591efb9 | |||
| 3aa13a471a | |||
| 4bc3bd7b18 | |||
| a3e1f04b76 | |||
| 379eb3956c | |||
| 2c2672bc9a | |||
| ce4896fb65 | |||
| 16a4d22b4b | |||
| 5e13b7ab5e | |||
| 5d462bd0b3 | |||
| 014c9f3196 | |||
| b66924148a | |||
| a44d0dc26c | |||
| febc591683 | |||
| 4f6c999006 | |||
| d86c876a66 | |||
| 16658da4e7 | |||
| e8d43d0687 | |||
| 42ce352c13 | |||
| 73370e9868 | |||
| 1dd6f855c3 | |||
| 6237e9c89b | |||
| 4886cba76a | |||
| 38a22fbfaa | |||
| 7b2f8cdd7c | |||
| 053307175c | |||
| a6e7ba9464 | |||
| 1ed1bf3a38 | |||
| 4ac290cc33 | |||
| 5da9c98067 | |||
| 774c757e67 | |||
| b030084f07 | |||
| 2224989c39 | |||
| 4359900ed1 | |||
| 989051a85e | |||
| 3a6bf1bb78 | |||
| da9d937b94 | |||
| 1867004ed1 | |||
| 0a6a6f5e61 | |||
| 8803937b59 | |||
| eabb98b0a8 | |||
| d6c99337a9 | |||
| 61defb6bcc | |||
| 73f702ff4a | |||
| 3d294a1c03 | |||
| 30a9329ab1 | |||
| 322707ba8a | |||
| 3c58896eb7 | |||
| 4d434da34c | |||
| a0356bcc41 | |||
| c2c4d51b2f | |||
| 58fe995e50 | |||
| d6c40aaec8 | |||
| 9bca7a7e2e | |||
| cebc4b8921 | |||
| ad4f092443 | |||
| 8a73fe5936 | |||
| d78554d884 | |||
| 2982d73a11 | |||
| ab0da52b43 | |||
| 8d6af63a8a | |||
| 74ec5e65ce | |||
| 776e37e1eb | |||
| a9e4ea94f1 | |||
| d812e7aeb8 | |||
| 1b0cce7d3a | |||
| e8ac4a79f1 | |||
| cfe49446d3 | |||
| 0276587287 | |||
| 9933c4f2f6 | |||
| 522776ed4c | |||
| 5073aa994a | |||
| 438fa79358 | |||
| 2d4d657695 | |||
| a3dddc0020 | |||
| d0b97e820c | |||
| c198f51a10 | |||
| 3238081efd | |||
| 2861390866 | |||
| 6c6fbac7a9 | |||
| 515378b34e | |||
| 978dd6d48b | |||
| e85065b854 | |||
| a9d12c2444 | |||
| fd5eb45b95 | |||
| 3a80f2f7ce | |||
| 66b3250563 | |||
| 7aee22939f | |||
| ddcee85f7c | |||
| f01ee2acc8 | |||
| 4c81b0fdc5 | |||
| 28024f2311 | |||
| 0418fa2e72 | |||
| a4e9edbd77 | |||
| 8287bd2996 | |||
| 3b3cdec395 | |||
| e6abf3d8f2 | |||
| 048781fe71 | |||
| 7003390791 | |||
| 75b7f400f9 | |||
| 728e9229b1 | |||
| edcae5a7c4 | |||
| 98ea78b6ee | |||
| 65160f50be | |||
| b6c87e3b7a | |||
| a4a38ffda1 | |||
| 96ceb12443 | |||
| 79f9419652 | |||
| d9734072ff | |||
| b0367e86ee | |||
| 44112bce89 | |||
| 338e7c3c8d | |||
| 7679f064bf | |||
| 7a90f21655 | |||
| 1c06eb18c3 | |||
| 8838ee39ab | |||
| c0a9b6a533 | |||
| aee70b7482 | |||
| 2718a3d836 | |||
| f2d8c9d087 | |||
| eebf932e94 | |||
| c1237818d2 | |||
| 20fa7cdb32 | |||
| 3f24ae2eb9 | |||
| 8459f6e284 | |||
| a26d2628c0 | |||
| f7e5ca90e6 | |||
| ca9e601fcb | |||
| 913ab198fb | |||
| 79fa4a98d1 | |||
| b9daebfee4 | |||
| 54f868c164 | |||
| 457d4ad99d | |||
| 9501a45fc0 | |||
| a3bd8bbb38 | |||
| d4c1e5aeed | |||
| 434daaff9a | |||
| 156e36a238 | |||
| cf30da7a25 | |||
| 188852c984 | |||
| 27c357bcfa | |||
| 8153c72b97 | |||
| 5dbb208a4f | |||
| ab007c3da0 | |||
| bfeeb9a6d2 | |||
| e9f468d3f9 | |||
| c90e545f83 | |||
| cc3618d77b | |||
| a858474f49 | |||
| 469b6b3a75 | |||
| 9b2c299a35 | |||
| 2c345831a3 | |||
| b6798b68cb | |||
| 841d50358f | |||
| c7523b410a | |||
| 4fe975fe4e | |||
| 3a70131312 | |||
| 7c59337d5d | |||
| 470764f0b4 | |||
| 46306c9c85 | |||
| a5d8d265a2 | |||
| 1e93e37bbf | |||
| cf54204e27 | |||
| 49e261d14e | |||
| c23a4fd13f | |||
| de42b8b223 | |||
| 7cdedde225 | |||
| 4106f68ccf | |||
| 06ef64d169 | |||
| f66d574541 | |||
| 1c5c63338c | |||
| 1a43d0b2c2 | |||
| 3a524a2b11 | |||
| 3b734b78ff | |||
| ffb13b1115 | |||
| d5ef0a69e9 | |||
| 7286882c34 | |||
| e104269398 | |||
| 3a2881fa60 | |||
| 0b7d2ae653 | |||
| 16e4084a10 | |||
| a44dc266d9 | |||
| c7c42a85b9 | |||
| 6695818c03 | |||
| 6df8b363f7 | |||
| 33a198c1f6 | |||
| 84961bd3f4 | |||
| de3e38a65e | |||
| fa479727ff | |||
| 576b2c7514 | |||
| 2b844f1614 | |||
| 2e5efc3d6e | |||
| e7c8ab8f0e | |||
| 5baa463541 | |||
| f3cbd24ddc | |||
| 11f6cc3279 | |||
| d37bca86d0 | |||
| 643ee3fa44 | |||
| 1428704d2a | |||
| 49226d2ce4 | |||
| dd16045041 | |||
| 63a499d3f3 | |||
| 52a18abd94 | |||
| d0857c0132 | |||
| 803d320430 | |||
| 21a2eba44f | |||
| b148318981 | |||
| 042956d558 | |||
| 2aec15bc5a | |||
| 22f3ec27a3 | |||
| a645c8f0fd | |||
| 057ad3a2f5 | |||
| 94d599eccf | |||
| deae2bb57f | |||
| a010165d27 | |||
| 921d2225ba | |||
| ad905a195e | |||
| 1fb7af40cd | |||
| b927aed8a3 | |||
| f509e16241 | |||
| a7d1eb3c44 | |||
| 60e8977fdd | |||
| 033eef4358 | |||
| a8eb010ea2 | |||
| 2597f8ecc9 | |||
| e2692e25de | |||
| 27ba0ad905 | |||
| 0c3fb8d41c | |||
| 5de41c06a4 | |||
| edc9e78b48 | |||
| ba7d82c699 | |||
| 25f7fa0583 | |||
| c11a82b62a | |||
| 51ea18a844 | |||
| 4ecf9c653e | |||
| 3b3305d859 | |||
| 534664c372 | |||
| 98895e9386 | |||
| 1b9d074493 | |||
| 723bfda1ce | |||
| 16387171c0 | |||
| cce1998a64 | |||
| 8e7d14953c | |||
| 604c70fd5d | |||
| 66137344fe | |||
| 10616d7a1e | |||
| 5362edd442 | |||
| 2b2dae816d | |||
| 421d995005 | |||
| 89832303d7 | |||
| e9f4c94301 | |||
| 3a4f172fdd | |||
| c5358c0e1f | |||
| e4b07fd6a5 | |||
| f248c965ce | |||
| 5697aa848b | |||
| 8c12b20c61 | |||
| 3fa3cff73c | |||
| fa1e4759db | |||
| 79533da1b3 | |||
| 1f60411686 | |||
| a4e09c1ed8 | |||
| 1449392dce | |||
| 74c1c534a9 | |||
| 0a4283cb94 | |||
| 6e547d54e5 | |||
| 9428f2ced6 | |||
| 563dc5654c | |||
| e7ef4ed1d2 | |||
| 03fa46886a | |||
| 81ea6e4d9f | |||
| dddad4bcb4 | |||
| 834d65471d | |||
| 63166a4e0c | |||
| 7a18fbeeb8 | |||
| 816d79143b | |||
| 32f021f266 | |||
| e15bf04465 | |||
| fe9c8d9147 | |||
| 43d0ba5f95 | |||
| 4060131927 | |||
| bb8d57c68a | |||
| 7ed63c5312 | |||
| 874990dc2c | |||
| db810b1148 | |||
| 7cfbb17978 | |||
| 8f147d16f1 | |||
| fb7cebb767 | |||
| e7c78b0a94 | |||
| a73cd93b24 | |||
| 37f415da42 | |||
| af10d9baa8 | |||
| 79d2c5831a | |||
| 040e80f7e6 | |||
| b8d4b6bec9 | |||
| 4811fab790 | |||
| eb81396863 | |||
| c7e1cfc9f4 | |||
| 7d43c80bc4 | |||
| 776b675861 | |||
| 2060a0a43e | |||
| b827338a72 | |||
| 264f3ddac9 | |||
| 2cdb665b10 | |||
| f2f656d426 | |||
| 0fe553744a | |||
| 278e947890 | |||
| bbf20165cc | |||
| 046039124d | |||
| afec7cf1ff | |||
| 448b92c05e | |||
| ecb0221a5f | |||
| 91f9157e5b | |||
| d42cfb4ef0 | |||
| 03a155a25b | |||
| 645f4acafe | |||
| 4b3e19526c | |||
| 57dbe08e74 | |||
| dad6ecc6bf | |||
| 8d567fbcd3 | |||
| 8c4d80d72e | |||
| c15a64b9b4 | |||
| 5313dc372b | |||
| 7bed630dfb | |||
| 4be6e024c7 | |||
| da82b03fb0 | |||
| ddfd21f815 | |||
| 3cbc05012d | |||
| d0d4b8ad76 | |||
| dae7054b76 | |||
| a8a560dd3a | |||
| c7a8e1bf74 | |||
| 007f016b2d | |||
| d11d93f406 | |||
| fd2090cdb9 | |||
| f24e67d24f | |||
| e6cbadd588 | |||
| ce62916b6e | |||
| 308b85330a | |||
| 7023663873 | |||
| e99fb5ed9d | |||
| db19834a0a | |||
| 3ad6dcf3dc | |||
| fe2af45bb2 | |||
| ce4c0bf5a2 | |||
| 632be33689 | |||
| 2e23607448 | |||
| e51cf5c192 | |||
| 7c34bb2681 | |||
| 2659b3f5aa | |||
| 730fd3b022 | |||
| 3c3dffc285 | |||
| 45e0483dac | |||
| bc0010b3d1 | |||
| fedad93d9e | |||
| 6008cfc7c0 | |||
| 4916936751 | |||
| 75825e453a | |||
| a32c43d6fe | |||
| cabc2cc98f | |||
| c04498b305 | |||
| 117aa0d874 | |||
| 52147a0452 | |||
| 9b6efcfef1 | |||
| f9c56cce79 | |||
| 1dc10a7b28 | |||
| 6c70802374 | |||
| a340f9131a | |||
| 77cfcccfa8 | |||
| 41d8968d43 | |||
| 4604c18f0b | |||
| 1cfd5a00eb | |||
| ff26194143 | |||
| e40438fa7f | |||
| 15a9144609 | |||
| dd9e9c3b54 | |||
| 790f0b3057 | |||
| 457a10d91d | |||
| 624f0c68bc | |||
| df4c57ae27 | |||
| 0f04b58730 | |||
| 5469686bfd | |||
| ec3fa12e94 | |||
| 6f5e63324f | |||
| 64a4c60e9e | |||
| cdf7a40d9c | |||
| 7ecb50c2a6 | |||
| 4c9afe08e4 | |||
| 8d6a1b2c88 | |||
| 3cc8a66052 | |||
| 11dc7786f4 | |||
| f0006d9792 | |||
| 8a659e3186 | |||
| 784b5030c1 | |||
| cd04abcc8e | |||
| c26cb9234f | |||
| e02f691a90 | |||
| c6d5ac174e | |||
| bb4ec5550b | |||
| 8f67f6448b | |||
| 649bcd72fe | |||
| 4fbad2e049 | |||
| b712bfb46c | |||
| 7d10811312 | |||
| 91b009cde4 | |||
| 3811eaaa63 | |||
| 3023ec5ee7 | |||
| bea92f968e | |||
| af249ea468 | |||
| 7400396801 | |||
| 89d549c3eb | |||
| 8db32571ba | |||
| a9cb354833 | |||
| 24e3b35c6c | |||
| 15941b2bc7 | |||
| 45bd290b64 | |||
| 0aa72ac6fd | |||
| 1fc3816d0f | |||
| 104fdbf038 | |||
| 07a107f0da | |||
| 08dce95a74 | |||
| 667ce28946 | |||
| 4e40aee273 | |||
| 7624b47d1e | |||
| 2f5115627b | |||
| 030db0c2ec | |||
| 4c44cdcce3 | |||
| 517761fd96 | |||
| af1e2ede26 | |||
| 468439854b | |||
| 23eaae9aff | |||
| 3d4c1d94d7 | |||
| 753c6c9c75 | |||
| ef591ef7b9 | |||
| 075bb5f1aa | |||
| 9ae8fa5839 | |||
| 4728bad403 | |||
| 112ed8f50d | |||
| 991be60403 | |||
| 9231aa7d95 | |||
| 979218cdd9 | |||
| 680c92ae7e | |||
| b79aaf91b8 | |||
| 447ef8863c | |||
| 7c7681dd90 | |||
| b7abcf9d71 | |||
| fc8d199188 | |||
| 958c366b21 | |||
| 4296cea2b2 | |||
| a71f79c37e | |||
| 8001eef5d0 | |||
| 4ab7995871 | |||
| 5f67253813 | |||
| 0264e1678c | |||
| 46992453b9 | |||
| 3505790b85 | |||
| 530d4463ba | |||
| c3cc4f8bad | |||
| 9899e08b8d | |||
| 37bc888b28 | |||
| 24c8fc5dff | |||
| d5fcd4f7a3 | |||
| 47fec8eac2 | |||
| a3adcce795 | |||
| 1acef95a81 | |||
| 66c6cc7c5e | |||
| 33b35313a3 | |||
| 64f920d056 | |||
| 48a7637d9f | |||
| e5edc3f03a | |||
| d61fff3f4b | |||
| 9bcb174473 | |||
| fcbbb289b6 | |||
| 0d77396605 | |||
| 936565c701 | |||
| 16c1c0833b | |||
| 0b74bc622c | |||
| 74c81b5d93 | |||
| dfdfc601ac | |||
| d27098c054 | |||
| 4c893ef9be | |||
| 03b5dc14de | |||
| b2af10cd49 | |||
| 982682b8fd | |||
| 5bd53990c5 | |||
| 6940109b9a | |||
| 43a9249c95 | |||
| 2ff5cffe6e | |||
| 4ed2c3773e | |||
| 2f4682a9f8 | |||
| 08bed02515 | |||
| b03fe2d0ae | |||
| 09c64d0072 | |||
| 949dd07b19 | |||
| 309acaa023 | |||
| e8fc4cbb64 | |||
| 89f0c6d089 | |||
| 9e2fe24518 | |||
| d686056f62 | |||
| 9710856b33 | |||
| f5ee422c58 | |||
| cf577653dc | |||
| de2b252df5 | |||
| 41fa653f32 | |||
| 4f4a1deccb | |||
| caf8e91588 | |||
| 6d8331fd58 | |||
| 4027461865 | |||
| e1ea1b2af7 | |||
| 39a7be470c | |||
| 16a3a4a30a | |||
| 2210f8a3a8 | |||
| 04e0686262 | |||
| e391595890 | |||
| c396fb36fa | |||
| 2d8d9b100b | |||
| a56ec4515b | |||
| 4348a4a85a | |||
| d66fab6eea | |||
| 3b13aa3db3 | |||
| 11a36d956c | |||
| 826cbac459 | |||
| be2cd079af | |||
| 36297e1db2 | |||
| e3f5dbcdf0 | |||
| 8fe128a46c | |||
| 74b379cbd5 | |||
| c861237a64 | |||
| b8b260dde9 | |||
| 7c39e4f885 | |||
| 73c901a807 | |||
| 33948c6844 | |||
| 93f77250b3 | |||
| 35b5f84c50 | |||
| fae0da5c13 | |||
| 35e7f27141 | |||
| 8d75cb7fde | |||
| 0d5600fd2f | |||
| 345a5092e5 | |||
| de85acdf3b | |||
| 543e013a15 | |||
| f6c66d01fb | |||
| dd26096ad1 | |||
| ac33531a05 | |||
| e1a2fe6af2 | |||
| 2dd44664cf | |||
| c73a0c4ac9 | |||
| 221b457e69 | |||
| ab8dd999f5 | |||
| 01e0e98f07 | |||
| 2e812c89e9 | |||
| 624a7927f0 | |||
| bbaecd6a8f | |||
| f5c65fa192 | |||
| 7b1fe89a5c | |||
| e1f5f8516f | |||
| 3a05dc09ec | |||
| 709c37e932 | |||
| db68d6b164 | |||
| d285084b12 | |||
| e46f6309d5 | |||
| e2b8f981c4 | |||
| e22f2f5c9c | |||
| 7165bef132 | |||
| 2eb9301ba5 | |||
| 6e24ccb266 | |||
| 112746cdc5 | |||
| 3c4b8a7706 | |||
| ee8240b295 | |||
| 1e87ecd12e | |||
| 9e09f313d1 | |||
| 97648a9751 | |||
| 3f935df0af | |||
| fca27ca2bb | |||
| 547d8e3a86 | |||
| 79cfda0013 | |||
| 529325bbdd | |||
| ea6bc1e8c6 | |||
| 398d01b8a9 | |||
| 96ad9ed33b | |||
| 1a09553e52 | |||
| 6e16575a37 | |||
| 3bd4c7ba16 | |||
| 36e0372986 | |||
| 7cc1491d10 | |||
| 1daea0c59d | |||
| 79d233b5ca | |||
| b37979023d | |||
| 553f31c579 | |||
| 8fc469b3d5 | |||
| 9d162096ca | |||
| b013ebc3b2 | |||
| c1a45b5107 | |||
| 15bfedcbbd | |||
| 47c8709564 | |||
| f4e74cf63c | |||
| 14bf7270aa | |||
| d710d60c31 | |||
| fe627697a3 | |||
| 295fd6e833 | |||
| a010fb58d6 | |||
| 5fede0a90b | |||
| f5fc670638 | |||
| 00fd3ff49b | |||
| c6f1459eb9 | |||
| 727cda9d1f | |||
| 970135f6bc | |||
| d9b285d7e8 | |||
| b08e6d38ae | |||
| 401c404811 | |||
| 4f17809a36 | |||
| d790a66d6b | |||
| 11573f3ec1 | |||
| 182eba1bc6 | |||
| d9e66a62b4 | |||
| 1caa19cb06 | |||
| 879cd8cc2b | |||
| 46da355022 | |||
| 79f45855a6 | |||
| b06c97e51d | |||
| 4c10127b2c | |||
| f8d54e7c94 | |||
| aadab51541 | |||
| 85df93399c | |||
| 3e11f9ff90 | |||
| e7f38d96f0 | |||
| 61ea9c89c5 | |||
| f566c5924a | |||
| ed2a10a1c5 | |||
| 81f3edea8f | |||
| d7a3c8352e | |||
| bdc8861aac | |||
| f225e560de | |||
| 316e9f9032 | |||
| 6d9c4758ae | |||
| eff29c8b28 | |||
| 6f19c16c78 | |||
| 19d70c7d96 | |||
| 1e64d8c731 | |||
| 4734a4227f | |||
| 3aee261527 | |||
| f38b654e9b | |||
| a541c76238 | |||
| c93370c4ad | |||
| 237f3bf8da | |||
| 25e2857c21 | |||
| 323ad539bb | |||
| 5486abfe4e | |||
| d104362d90 | |||
| fe4bb32cba | |||
| ce37c3a109 | |||
| 580ad29288 | |||
| 6bfffce916 | |||
| 3620e3cdcf | |||
| b167672c74 | |||
| 23b2497292 | |||
| 8ce9f2b161 | |||
| 49faa15e4f | |||
| c3aa1f8bdb | |||
| 0d4d04e550 | |||
| 15b0c4ffdb | |||
| af4c893eb7 | |||
| a1c4d7d765 | |||
| 6f9d8bdbcb | |||
| ecd93b7541 | |||
| b92587bc56 | |||
| 738ee810b4 | |||
| 03d777f345 | |||
| b81a7ece97 | |||
| 12c542a421 | |||
| 6ed7374c5a | |||
| 27a1f781bc | |||
| c8c9ef2757 | |||
| 0c85095e46 | |||
| 24e0171b86 | |||
| faa8bf1079 | |||
| 58df0daa7f | |||
| 9ca731f66c | |||
| 3514c8c375 | |||
| 5d2df4100d | |||
| aabafbea1d | |||
| 38b3514832 | |||
| b1e32305bd | |||
| cf5fa06c8d | |||
| 13f59ad733 | |||
| bde4589189 | |||
| b553b50acb | |||
| 7ad5c00ed9 | |||
| 634736a781 | |||
| b1be11c727 | |||
| 1355e0552e | |||
| e0a48c99e4 | |||
| 3decd4f9f1 | |||
| f991a00653 | |||
| 81c28325aa | |||
| cebeba7bd7 | |||
| d6d528ca25 | |||
| c00c6d038c | |||
| ec171c529a | |||
| 7ff256ec98 | |||
| e56c6a83b4 | |||
| 5c519beb2e | |||
| 7d6b260174 | |||
| acfe3f2664 | |||
| 8c69a83881 | |||
| 0b648155e7 | |||
| 91b56239e0 | |||
| c3fd4a75e9 | |||
| 229c5c9b2a | |||
| c8b2f62297 | |||
| 58355a5bfb | |||
| c93125b120 | |||
| f7a107f73e | |||
| 5c2a1ae876 | |||
| fd5c9bb9ab | |||
| a70da51ff7 | |||
| 8881ae1bf8 | |||
| 3c80fac258 | |||
| 8110d304f4 | |||
| 315c0aa08c | |||
| 61fcc8b939 | |||
| c4f6e80671 | |||
| a640328f8c | |||
| 2c60f4f0f2 | |||
| 6c02fa7bd9 | |||
| fac3f4cd54 | |||
| e1d715ef7d | |||
| 67b2d5e0bf | |||
| 756be09d23 | |||
| a2a30038cf | |||
| 47e7a258db | |||
| b22d935dbe | |||
| f2ad7824aa | |||
| 61a70716cd | |||
| fb01a107c5 | |||
| d513acdd54 | |||
| 847a7c7c2e | |||
| f98be4d35c | |||
| 07ce4d2a90 | |||
| cd6a9334b6 | |||
| 2db2c5a186 | |||
| 03d338608d | |||
| b9a8bef477 | |||
| ecc5c82985 | |||
| fcd4e26943 | |||
| 7ec20935bd | |||
| 78811ae572 | |||
| 7887e00355 | |||
| 0e9ae444bd | |||
| c42c1b8a5e | |||
| ec31cd76c9 | |||
| 1e060bf2d7 | |||
| cbe63e529d | |||
| 755915ea4b | |||
| 5c8d3d3bca | |||
| e52d608ddf | |||
| 6ab16aaf63 | |||
| 3e14a8dc80 | |||
| f5dd3bcde9 | |||
| 44646747a7 | |||
| aa67241bde | |||
| d4c032d0b7 | |||
| 6e7ab46106 | |||
| d7ed2c18e1 | |||
| 3fa4a82e6f | |||
| 110abb0343 | |||
| cebd575cd5 | |||
| 22d990f138 | |||
| e45b13d248 | |||
| db4137ba02 | |||
| 100cae7359 | |||
| f238709304 | |||
| 32456779a1 | |||
| 8d4ed2ad3d | |||
| c5a305584f | |||
| 56ad465675 | |||
| aec22258ef | |||
| 1aec7d8606 | |||
| 5965de2f4d | |||
| 30506b9216 | |||
| 4ae51ca54e | |||
| 6fcac926fb | |||
| 657326cfe3 | |||
| f54de34ba4 | |||
| ee8a06f833 | |||
| 1128cc939d | |||
| f125d3265a | |||
| ca8a932c87 | |||
| f7d5b4d613 | |||
| aecae56071 | |||
| 130634dd7c | |||
| 1fcaae34e1 | |||
| 94f0c4abd9 | |||
| 1ad59dd152 | |||
| bc8bcdcb24 | |||
| 577ab7bae0 | |||
| 089ef25a85 | |||
| 9323717b47 | |||
| a7848c4502 | |||
| e2cd26ee70 | |||
| 6f91c5b5ea | |||
| 46b80ce25e | |||
| 166c03f31b | |||
| 3ef2e05c4d | |||
| 1469bcf6c5 | |||
| 767c5bbe01 | |||
| f2a46c848c | |||
| 25b20b7103 | |||
| 198bd0516a | |||
| f4d881649a | |||
| d5df676938 | |||
| ad866fd196 | |||
| 3e8cb46076 | |||
| 46e76e8b2b | |||
| 03d28d7355 | |||
| 1f8988b580 | |||
| 902aaabb11 | |||
| 6b50bbea00 | |||
| 0cf672fa91 | |||
| c8376c91f6 | |||
| 28c3243e77 | |||
| 3ced80b54a | |||
| 96f0ee85d2 | |||
| 91c7bf659b | |||
| 191053b53d | |||
| 02d9cef356 | |||
| e1424a97a9 | |||
| 2a6825c393 | |||
| 182a80b922 | |||
| 34d22c1ed5 | |||
| 77a1f418c8 | |||
| 8ed3088441 | |||
| 0fa4d62986 | |||
| f4592a8df5 | |||
| 3468628a22 | |||
| 1e813ceb3e | |||
| 20f1f714ba | |||
| f435a3002b | |||
| 5cb74dadaf | |||
| d9b4538469 | |||
| 1f5e292520 | |||
| 45aec0eae4 | |||
| 625f1745dd | |||
| e4ac19a87a | |||
| cff257f584 | |||
| 2e6bad311d | |||
| da482fe1dd | |||
| 32ad6aefca | |||
| 85d15b5143 | |||
| d823a05aef | |||
| 8eacfd4cc2 | |||
| 4ff6091294 | |||
| 6aa576cda7 | |||
| 6dfc042c21 | |||
| b8ee9810b0 | |||
| b6e747ec5a | |||
| 2d6adabd53 | |||
| fea5a0bdc9 | |||
| 575b18c0f0 | |||
| 6a035507fd | |||
| 721d3f06c9 | |||
| 24121aa9da | |||
| 28b8cc31f6 | |||
| 077cd91773 | |||
| f340964dc9 | |||
| 46acb0f2b7 | |||
| d288703d57 | |||
| eda3af2488 | |||
| 05b9b8fda3 | |||
| 9dc3b99345 | |||
| f68c91faa6 | |||
| 0de63c6745 | |||
| b35f0131e6 | |||
| eb42e0ab5c | |||
| 6acc17af8c | |||
| 3697a0cef6 | |||
| cc76cf31d7 | |||
| 1dac1b3726 | |||
| 776f527926 | |||
| bf878aa97e | |||
| 8fd7eee90e | |||
| 83af050800 | |||
| 544cd63062 | |||
| 3badeffb05 | |||
| 8e06c8b3da | |||
| 777fc2e9d6 | |||
| ce1783ccc1 | |||
| 40d46934d0 | |||
| 1aa1683377 | |||
| 2e7c8b0b6f | |||
| da8b7c9f89 | |||
| 14194f1d56 | |||
| 690b4ad329 | |||
| 3ec80d0112 | |||
| 2b1f67d418 | |||
| e8ad339312 | |||
| 78675b228b | |||
| 60ff07585c | |||
| 457e050628 | |||
| 12edef9a6a | |||
| 4dbecff9fb | |||
| 4954e079c8 | |||
| 0b973381dc | |||
| 331e1fcbee | |||
| 097c818bf0 | |||
| cb51aa48a7 | |||
| e403f8d43e | |||
| 2d6a581960 | |||
| 444647d1e3 | |||
| c106c8a18c | |||
| 6318808270 | |||
| ebea341856 | |||
| 4035152a87 | |||
| 64a6682b93 | |||
| d4528d9ac2 | |||
| 0c5b7b93a3 | |||
| 7636ef4630 | |||
| 19bac57b26 | |||
| 43b3851975 | |||
| 48de890392 | |||
| 09cbae6297 | |||
| 82bdf6d5ae | |||
| 701477e8c3 | |||
| 9be5773fbb | |||
| b216dd41d7 | |||
| 7b0075a242 | |||
| d1ec4d7a5a | |||
| 3c7a12b416 | |||
| cbcf5ba7d4 | |||
| f5a8f969dd | |||
| f9bfa10797 | |||
| c42b397845 | |||
| f2144a3063 | |||
| 47919e46ab | |||
| 7534be6fbc | |||
| 63fbcc6927 | |||
| e542d52a7c | |||
| 9147bf2a73 | |||
| 22a1ec68d5 | |||
| a9e96b1ee0 | |||
| 5f48643e0a | |||
| a7c76142a0 | |||
| 22a5ebe44b | |||
| 8b54ef4147 | |||
| a480572244 | |||
| 388f3368cb | |||
| 53d9a92497 | |||
| 87f3d69dac | |||
| acec6c3d02 | |||
| 3879b33447 | |||
| a11010c07d | |||
| 8ddfb40e2d | |||
| 3e64748c72 | |||
| 3f11d7820a | |||
| 64bf389bca | |||
| a3a623dd57 | |||
| 16928a161b | |||
| 939cc47431 | |||
| 10a4e969a6 | |||
| 8feb499ba2 | |||
| bf69fd9b22 | |||
| 7a4769bbdb | |||
| 1fdb582a09 | |||
| 067c00f533 | |||
| 1a94521770 | |||
| 08cb0b3cfc | |||
| 180ca598c4 | |||
| f24d4671d4 | |||
| e1ec2a1ea6 | |||
| 5705a7e066 | |||
| e170af3ac0 | |||
| 88e3e8be7c | |||
| 5d3e02aaa2 | |||
| 84e96866ac | |||
| 651153216b | |||
| a49cf8a57d | |||
| f4e7157716 | |||
| 9a152d481b | |||
| df3de82c06 | |||
| 8db5f642e9 | |||
| 16208bca89 | |||
| 3f3ec73d39 | |||
| c9bece0c8f | |||
| eb78ccf391 | |||
| d3209478d5 | |||
| 13e5668a84 | |||
| 8fa592e3dc | |||
| e195b43932 | |||
| 664085ab74 | |||
| abe3ee9cc5 | |||
| a8e34e298e | |||
| 181c80d6eb | |||
| 56d672afeb | |||
| b9ebee4939 | |||
| c3c4bd4e75 | |||
| adefc3955b | |||
| 09a40ab471 | |||
| 70a339970c | |||
| f69b841d2b | |||
| 4f377369a8 | |||
| 86823575fd | |||
| 69a0f3ee23 | |||
| 6a9948c018 | |||
| e3f0cae719 | |||
| 7311161340 | |||
| b55501c00c | |||
| 5c153e200f | |||
| 232514041d | |||
| dd6cd7dd63 | |||
| f055724b27 | |||
| c4a04dc024 | |||
| 85453c4247 | |||
| 1daaebfa0c | |||
| 7d9576edcb | |||
| 9de2972c30 | |||
| be44cabd7f | |||
| 32db8dd75b | |||
| a3f33b6531 | |||
| 707302b2cf | |||
| 0f15d0344d | |||
| c14c6b083e | |||
| be291b330a | |||
| 38fd207e53 | |||
| d412487eb7 | |||
| 7803e6f3ed | |||
| 84255632cb | |||
| b557a36890 | |||
| e4e50f52e8 | |||
| e74d6c5009 | |||
| 5388607f3d | |||
| 115c02e871 | |||
| b4ad955d9e | |||
| 3b4a542c06 | |||
| 13f3d40cbf | |||
| 3c2051f86a | |||
| 2348cf20e7 | |||
| 484640eaf6 | |||
| 41e097e91a | |||
| 1112330e46 | |||
| a2e2717411 | |||
| a7a82f9889 | |||
| 521ac51748 | |||
| 1466051d12 | |||
| e2aeee6811 | |||
| f4c3acdf35 | |||
| e88d638ac6 | |||
| 55bc5090b9 | |||
| 38f6f47be9 | |||
| 946c489c68 | |||
| de1ecd5302 | |||
| 165ed4a00e | |||
| ed5a25841f | |||
| be18d3a732 | |||
| 6c5d4e7cf4 | |||
| 5320ce02d8 | |||
| 9b5655a89e | |||
| 899ae0d2b5 | |||
| 7922e247f1 | |||
| 647247740f | |||
| 335f6bc251 | |||
| e4c48e02b4 | |||
| 6ec87af68e | |||
| 20448818c4 | |||
| 528d37bdfe | |||
| fb1b7d8ed0 | |||
| d26d18a1a6 | |||
| 2cc33bfe20 | |||
| c2709cdaaa | |||
| 4e21a95afe | |||
| ffec099e75 | |||
| d06f261cb1 | |||
| 35153940e3 | |||
| 423af1977f | |||
| 30605477f2 | |||
| 36c820e6c8 | |||
| c23dae4e5c | |||
| 948897687e | |||
| 63e67ee013 | |||
| ce2e300a4f | |||
| 0165410712 | |||
| aa98871c77 | |||
| 1499e1d5f4 | |||
| 683241de5a | |||
| 6c3f7d7fd6 | |||
| 44948f5b69 | |||
| e1506cb4eb | |||
| 909d647aab | |||
| da4f146f83 | |||
| 3edbc2c4a9 | |||
| d6fa6f3e92 | |||
| 846f694908 | |||
| 9734c81f3a | |||
| 6eeca586d4 | |||
| b2fd033cd5 | |||
| 7641c3c782 | |||
| 4567905790 | |||
| 86941f55d5 | |||
| 6b56ac24df | |||
| 632ed550c7 | |||
| 3b5417687d | |||
| fd06fd1442 | |||
| f23814e0cd | |||
| 7471357081 | |||
| a256fccfe1 | |||
| 16e4833492 | |||
| 6d7d465a04 | |||
| 1b16bf4ec7 | |||
| 045176bf35 | |||
| a500d73ac0 | |||
| bd70595c9d | |||
| 12a6278135 | |||
| a3711708f7 | |||
| 8f84fef2eb | |||
| 0714b2ba4c | |||
| d4ad29be2a | |||
| 043c954e9f | |||
| d3c236f91c | |||
| 5dd21f2a75 | |||
| d65707a5b4 | |||
| 9c9ed0f3f6 | |||
| 7a61c13834 | |||
| 27944fac9c | |||
| caaa1b8f13 | |||
| 47cab73499 | |||
| af4dad0fa2 | |||
| c40e14b4be | |||
| aa23d432cd | |||
| 852fa7d04a | |||
| 081c6330b1 | |||
| a147ef3837 | |||
| e1abc44814 | |||
| c4951f11b7 | |||
| 08a2e796e8 | |||
| 07613d2020 | |||
| 4a7acedd3c | |||
| 1795bfe4a1 | |||
| 326ecb7814 | |||
| 2d1f2e706c | |||
| bf5343d233 | |||
| 89c5ce4dcd | |||
| 788c315165 | |||
| 19e57fd902 | |||
| 2f5fb5e09d | |||
| 8c9b8431ee | |||
| 845659340e | |||
| a90629aa13 | |||
| f19fdbba22 | |||
| ad664f54ff | |||
| fe7cb869a8 | |||
| f272378d52 | |||
| e335b2ca90 | |||
| 13709bdbf8 | |||
| 62455ed872 | |||
| 05d377bdd2 | |||
| 1f4ec305f0 | |||
| 8a52daa2d4 | |||
| 72978b9789 | |||
| bcf2aed1a9 | |||
| 75618aaf88 | |||
| 59254c9beb | |||
| 2d9bf021a1 | |||
| 27b175b9a2 | |||
| bf773e0467 | |||
| fb98f4b10d | |||
| 7bb22f58b8 | |||
| 360194bfb5 | |||
| c120fcc06a | |||
| 96c807feb8 | |||
| b731d7830e | |||
| aef9746874 | |||
| 568583adf7 | |||
| 561e60732f | |||
| ad6d5acb42 | |||
| 6b4d18c7b3 | |||
| c6cd55d38e | |||
| 2562303a45 | |||
| b0e48bfdfe | |||
| f093e7ad6b | |||
| 813a2f683d | |||
| 9fc567db7b | |||
| c759ae5509 | |||
| d81275974a | |||
| 67d0c6eb94 | |||
| add254feea | |||
| 547147084d | |||
| 1e4434d652 | |||
| bc429a0e54 | |||
| bf32184d48 | |||
| 9dfcca0353 | |||
| 88b4cc5fe9 | |||
| 2a004db6c7 | |||
| f7bd305904 | |||
| 69ba4d0971 | |||
| 1476b6d487 | |||
| eb6d21cc0e | |||
| 96619805cb | |||
| 1a982aef18 | |||
| 2c359dd609 | |||
| 39c7e7a6b7 | |||
| 609e31dd3e | |||
| ecd937164f | |||
| 14435163a0 | |||
| fd90b67afe | |||
| 173c230e66 | |||
| b052424c0d | |||
| 4c4ea03d7a | |||
| 9e0809911c | |||
| cc7499dd03 | |||
| d45242c616 | |||
| 73f34b31f5 | |||
| 8ceac55c29 | |||
| b547201561 | |||
| 31bd8cb6d0 | |||
| 2fa4a8b991 | |||
| 3f305eb1e9 | |||
| 5de555cae2 | |||
| f7f52b1592 | |||
| 387935345c | |||
| 5ea25b7801 | |||
| c1b2aea80c | |||
| a06b407fce | |||
| c57932c663 | |||
| 144276aa1a | |||
| 2be4d86740 | |||
| c0b64e9daa | |||
| 502278d5b2 | |||
| ac75bd1b1e | |||
| 53603043c7 | |||
| 3f63c44d12 | |||
| 659bd66529 | |||
| c9d9eddaa4 | |||
| bfb59c172b | |||
| 39f775cc05 | |||
| c4a6bc4977 | |||
| 7c4ce7eb03 | |||
| ae974a2bbf | |||
| 0420a03240 | |||
| a8b12e4f27 | |||
| d2c9fe850b | |||
| 56a46886ad | |||
| 3bdda17adc | |||
| bf5d6f431e | |||
| 1fbe229b3c | |||
| 04cbe68797 | |||
| 56ecebf22d | |||
| abed6fca87 | |||
| d12a6ef9c2 | |||
| ce958c191c | |||
| f969e393a9 | |||
| 3166570f7c | |||
| e11013d19c | |||
| 69d4634635 | |||
| 0ca460eada | |||
| b0b968efd5 | |||
| 3621d42e0f | |||
| 1b28a99d14 | |||
| c0d74ed43b | |||
| 7cce4768ae | |||
| 7d633ec400 | |||
| 81d0ffbc3b | |||
| 66220e3e61 | |||
| 6c3ef35064 | |||
| 8a1a2ac558 | |||
| 43692df590 | |||
| b121c7871f | |||
| 545c815c4c | |||
| 34497fdb37 | |||
| 4ff19ced3a | |||
| 58c73c1789 | |||
| 525c3d40a9 | |||
| 8c13e4fef0 | |||
| 110c64209c | |||
| a35f6aee6a | |||
| c31300e69f | |||
| 2afc3bfd8b | |||
| ee8553e156 | |||
| dcd9865385 | |||
| 7c99cb93c5 | |||
| fb828ed21d | |||
| ad8a5e5daa | |||
| b811851b8d | |||
| a76e46044d | |||
| 107a7bd06b | |||
| 595ade9f41 | |||
| 3d4a0ccbc6 | |||
| 7828b5ccb0 | |||
| d8dbd61107 | |||
| 60d4777190 | |||
| 4d5383fd36 | |||
| c9e6c8c02f | |||
| 8d96348704 | |||
| 73bc011483 | |||
| e8da987570 | |||
| d879d360eb | |||
| 6a140adb78 | |||
| 2d1de285b3 | |||
| 4aa0959d60 | |||
| 5f99a7fd23 | |||
| 6244c173ba | |||
| b8893d0277 | |||
| f7ea2b5d7f | |||
| b509716b33 | |||
| adf4384501 | |||
| bb175dfc53 | |||
| 5b13f4375d | |||
| de658ab4e4 | |||
| 6962a2dd7e | |||
| 3ce55d22e4 | |||
| 67cc35ade9 | |||
| 37623bf49a | |||
| cd223d93da | |||
| fa1ceca232 | |||
| ee0d7552e2 | |||
| 7afe94e7e2 | |||
| 0d11a25e6d | |||
| af8600678d | |||
| be9e5185b4 | |||
| 6852c88fc7 | |||
| 3804161eb6 | |||
| 885de7f8cf | |||
| 5b31c7d08a | |||
| 52c5f7adc8 | |||
| 37ede4d5f5 | |||
| 470317f5c7 | |||
| 0a31be6ba2 | |||
| 72dc6d60ab | |||
| b8761bb215 | |||
| 1a60d6bcd6 | |||
| e978774ec6 | |||
| 6582d5872d | |||
| 65ecb4b434 | |||
| 426f9772b8 | |||
| 9927ca6274 | |||
| 9959a1dd9d | |||
| 0c8a9d2d51 | |||
| a331653dad | |||
| 27d72bd517 | |||
| 79d9d2432f | |||
| 2e878906e4 | |||
| 070c1c82b0 | |||
| b81c7c0892 | |||
| 328eac61cd | |||
| 6059354da6 | |||
| 67e2804ecb | |||
| 54ebbde1e1 | |||
| 88e22e4e8c | |||
| 0fb9066aaf | |||
| 7022759b7e | |||
| 2a1c7b57ff | |||
| 1dfc35677e | |||
| 7ee54d8356 | |||
| 9f9ce6130d | |||
| 1d6c713b18 | |||
| 4f10759024 | |||
| 5432ec8ded | |||
| 81748c62c7 | |||
| 9ccdbb5d61 | |||
| 840955ff7c | |||
| 03f3736511 | |||
| 2a9ca74164 | |||
| 48e9d6862a | |||
| 3f24e6c21c | |||
| 5314dffc85 | |||
| a4d0a3fd50 | |||
| aaabde58cb | |||
| cb4a6614fa | |||
| 9cae1d5ed6 | |||
| 62aa1b56d6 | |||
| 1aac8114ae | |||
| 1fbee8dadf | |||
| 741fecedaa | |||
| d83ded2dba | |||
| 220bcb0535 | |||
| 9c19a898f9 | |||
| 7a367cca30 | |||
| 4c3f3b4d46 | |||
| ec4e379125 | |||
| 5237c2b847 | |||
| b4ee10dfde | |||
| bfc48afa14 | |||
| a4b1c0977a | |||
| 55671efe80 | |||
| 943a2f2b60 | |||
| fd9a55254f | |||
| 969209ce07 | |||
| 89626e8d69 | |||
| ac6797b28c | |||
| cfa30de3b8 | |||
| c881b32215 | |||
| cb43623acd | |||
| 8372a8c127 | |||
| 26eb2feedd | |||
| 001390a684 | |||
| fa4126087b | |||
| 9a15c48d2d | |||
| 2cd9b2d8ee | |||
| 10d1650843 | |||
| 81e6a22192 | |||
| d24f6aabbb | |||
| 5caa1e0eb0 | |||
| a6c612a4ad | |||
| 9fa79000ec | |||
| 169afbe9aa | |||
| 316befbb0c | |||
| f61208bde9 | |||
| 1951b95cb2 | |||
| a28a644680 | |||
| 14687aad81 | |||
| cab9eed62e | |||
| 06e43a8f2c | |||
| 4fb341d741 | |||
| b2df3510b7 | |||
| 8536e697b6 | |||
| 6d910c9fd4 | |||
| 766b2250e1 | |||
| a843f44c51 | |||
| e807e4d9e9 | |||
| 9ec1a56923 | |||
| f0817018b1 | |||
| 92ff72b52c | |||
| e4073623a6 | |||
| 11b0ed46c5 | |||
| d9ec9c6937 | |||
| 0722925986 | |||
| 89dd05cc6f | |||
| 8b8f4c5cbc | |||
| 55ae53d971 | |||
| ecedb9cef3 | |||
| 10467f1c5b | |||
| 61243e0f57 | |||
| b02c0455d1 | |||
| e4c65831e3 | |||
| dab6391f2d | |||
| 9a47149559 | |||
| 83a618f807 | |||
| 3ad8a273b5 | |||
| b2f5ba21b8 | |||
| 461afc2200 | |||
| 45707d5631 | |||
| 4d3d0039e5 | |||
| c61180dcd7 | |||
| b7071653fa | |||
| 3b97f7db53 | |||
| cb7593bd19 | |||
| 97230f6a35 | |||
| 667f669fdc | |||
| 60623a7ce0 | |||
| aac6018a35 | |||
| de4950b200 | |||
| c29d092905 | |||
| 92d313ebe6 | |||
| b75a469852 | |||
| 0ad4ece725 | |||
| c86afc85ee | |||
| df59fdce06 | |||
| b68a19be0f | |||
| 2068f2f5a3 | |||
| d2c77e06c7 | |||
| b44af714d3 | |||
| 8fa62166c4 | |||
| 35625e5aa8 | |||
| 2dedb34a91 | |||
| aa08419ca8 | |||
| 29ed758ae0 | |||
| 24a149cfa2 | |||
| 2567fac4a7 | |||
| aad6873175 | |||
| a3262d812b | |||
| bdd6894713 | |||
| 27a63a76af | |||
| 4dfb7e8b2e | |||
| 7f39e2e5e5 | |||
| e43d1ae0c6 | |||
| 4ebe4c108d | |||
| b9739b4709 | |||
| 3aed672836 | |||
| 61796bdb4b | |||
| e4818895c1 | |||
| efa5832b0a | |||
| d15b1a93fc | |||
| d0aa10fdd6 | |||
| b756b005ec | |||
| 10e3148f0a | |||
| 8343dcb893 | |||
| 260082321c | |||
| 41ed6eb327 | |||
| aa2c97263d | |||
| 8bd1604cb7 | |||
| a8cd24b346 | |||
| 8d13558ae6 | |||
| 0b7860ecdd | |||
| 8f1912c58d | |||
| 1ca2bd7912 | |||
| 1d1748b63e | |||
| 72652e9dbb | |||
| 644b41a94d | |||
| 0c85c384fa | |||
| d15549aee0 | |||
| 0bfa7cbb29 | |||
| 7fad73685e | |||
| 9883bec50d | |||
| aedf57db70 | |||
| f9cbf065ad | |||
| 4837725f37 | |||
| 1f11e3bb61 | |||
| adecc8fc9e | |||
| 895247b76b | |||
| 09fb8845a7 | |||
| 34d23b0b01 | |||
| 0231102863 | |||
| 6427091ffe | |||
| 737af2ea04 | |||
| d217641314 | |||
| a3ce3b1c71 | |||
| 14dfe93965 | |||
| 0fe3340ed9 | |||
| 07696eb347 | |||
| 014bb5cf7e | |||
| 9bceeca83c | |||
| 2e187bcbca | |||
| 66780313c2 | |||
| 372d5b3088 | |||
| 299aefebf2 | |||
| a7868e0131 | |||
| 44811e8a2a | |||
| 8e2b396a7f | |||
| da61daa2e6 | |||
| c4c5e9dbbb | |||
| ee197521c5 | |||
| c56b4bcbf3 | |||
| 14480f699d | |||
| 761f5a52dc | |||
| 6a4da4657b | |||
| 4cbe86fcb8 | |||
| 7e8ad2036a | |||
| f1b4ca52ff | |||
| 125980cb76 | |||
| cf47347312 | |||
| 73619269ae | |||
| 81ba67b2b6 | |||
| 64b72210ad | |||
| cedc15019e | |||
| 6b4b4eb29c | |||
| bdd5094d8f | |||
| a16ee2c83b | |||
| 4dce547640 | |||
| 3a53ab7913 | |||
| c482439232 | |||
| a3d1fb9cf3 | |||
| 0bb6f816e3 | |||
| f6a5e8f785 | |||
| c4602255c7 | |||
| 62e45f57b4 | |||
| 6d69d5eac3 | |||
| 9fec27be49 | |||
| 7d2b7ad520 | |||
| f98b9e05d8 | |||
| 6efe591e66 | |||
| e9c920ba67 | |||
| 98352a103b | |||
| 3557096d44 | |||
| b92d7e761c | |||
| f84c166013 | |||
| fa7f51b813 | |||
| 1290b28f59 | |||
| 0437e75291 | |||
| 9a86716446 | |||
| 31135bff29 | |||
| 003f354917 | |||
| b8b4fd4c7d | |||
| bc68ae8060 | |||
| 3909c7d3ed | |||
| bafd7389e4 | |||
| d22a844b46 | |||
| d2758fa13e | |||
| 1e31bfb055 | |||
| dcfa920aff | |||
| e60430be53 | |||
| b0d49913d5 | |||
| 22c9bf6d8b | |||
| caea9c00e3 | |||
| 7bc569dda9 | |||
| a9aa76bad5 | |||
| 7faa50d1db | |||
| 41549b3888 | |||
| 6778ad0f07 | |||
| dff2114795 | |||
| 08f87e3d03 | |||
| c18ccff446 | |||
| d26c3387df | |||
| 66929686c4 | |||
| e69b20d616 | |||
| 4a5dfb847b | |||
| 42fea976df | |||
| cf1b0f868b | |||
| f92e9f599b | |||
| f34ba729ff | |||
| a119a98081 | |||
| a6ef2e0055 | |||
| 67e7416119 | |||
| 3cb55cb51f | |||
| 896761e5c7 | |||
| 05436ab7ff | |||
| d8637214a4 | |||
| e2da806861 | |||
| 745c249a61 | |||
| 1c64dc76c1 | |||
| 3a8d93ab36 | |||
| 73da543e77 | |||
| 3801794908 | |||
| 4f4bfbc79e | |||
| e96d88ff3d | |||
| 87e4ded54a | |||
| a10aa7a96b | |||
| 3463c34e33 | |||
| a9f8c8f5f1 | |||
| 3aaad2178c | |||
| ecb2eb4554 | |||
| bc18a91f91 | |||
| a99e5ccba4 | |||
| 94d6177982 | |||
| 46d1324e47 | |||
| ca9af16aa7 | |||
| 9322b2e861 | |||
| e730de6fd8 | |||
| 8cc2bbe33c | |||
| 499189694a | |||
| be33b189a5 | |||
| eb0849f370 | |||
| c2102c60ea | |||
| 555de859cc | |||
| 489fde7680 | |||
| 765bca14d1 | |||
| 2c22a68ce2 | |||
| 04b120e481 | |||
| f03d3439cd | |||
| b4f62abbf1 | |||
| e15147c141 | |||
| 4e8f63fdaa | |||
| aa7c4102aa | |||
| 339cc9d992 | |||
| 69d947eb80 | |||
| 39e49ad7c9 | |||
| ad70b32414 | |||
| 5f0c720163 | |||
| 727d4fdc6e | |||
| 7523642c01 | |||
| 3b22f80f07 | |||
| 48dc345f2d | |||
| 6278bb191a | |||
| e80f10064e | |||
| c4985e9419 | |||
| 1b745219c7 | |||
| d0eab955c2 | |||
| a7acdde406 | |||
| 7420fec81b | |||
| fb4ec82358 | |||
| 39e6ded8ae | |||
| 2b29698352 | |||
| e52d74e536 | |||
| 20921cc284 | |||
| e3672d9695 | |||
| 23a090ab92 | |||
| a964a6dad6 | |||
| 554d82a200 | |||
| 839c6de58b | |||
| 1709e1dc88 | |||
| 5fb1e29c7e | |||
| 89408fd3a0 | |||
| a888b22cf9 | |||
| 071be08079 | |||
| 3548e9aae8 | |||
| d82071710e | |||
| f61341173b | |||
| 84ef468ba8 | |||
| 2c7be88d15 | |||
| 788bedd904 | |||
| 0fc5b2fbc9 | |||
| e428a69e6f | |||
| 437ac354fc | |||
| 25415eb104 | |||
| 61674cc17d | |||
| 458a673cb7 | |||
| 6d004d3f8a | |||
| 103ee5d4c2 | |||
| 45062390a6 | |||
| 763e33c373 | |||
| a776fad370 | |||
| 0466ff28f2 | |||
| ead04dcbe8 | |||
| c790f6d25e | |||
| ed493909f7 | |||
| 8dfbfe3145 | |||
| 5d99a309e6 | |||
| e59dd65380 | |||
| 9a969b86a9 | |||
| b751b46bc5 | |||
| e676a699e8 | |||
| 4fbbbbd336 | |||
| 99ed5b4bee | |||
| 1fe181e36f | |||
| 735329b824 | |||
| 46d4a5e047 | |||
| dd9b3fb594 | |||
| 2be79b1d5e | |||
| 19d1bf2562 | |||
| 0cd119e7b8 | |||
| 4dac0a1105 | |||
| 52e51d278e | |||
| 4d713eabf5 | |||
| c7095a4b4c | |||
| 443698d2b2 | |||
| 406c05f2e7 | |||
| c8070bf632 | |||
| 65316d7940 | |||
| d6511cf6de | |||
| 9e58678a98 | |||
| 231dde6dc4 | |||
| 5b6c39f51f | |||
| d052118dae | |||
| 37abbb387e | |||
| 17bfd657b7 | |||
| 890915054f | |||
| e0a2770f67 | |||
| fe54138020 | |||
| 6954d44e53 | |||
| 1c947488f6 | |||
| c8ef64bdd7 | |||
| 8af87ea251 | |||
| 4275be68fb | |||
| 261c3a8fd0 | |||
| 12b6851d54 | |||
| d6bd288da2 | |||
| 46971d5ed7 | |||
| 88053456f8 | |||
| 7386d78e6d | |||
| 55d0a68596 | |||
| bd4edfeedd | |||
| c7cbbfa43b | |||
| d6eceb568f | |||
| fbba4423e9 | |||
| 6c996bfc8f | |||
| 37e72aa542 | |||
| 83467de3ed | |||
| ffafc252dd | |||
| 4015331b73 | |||
| bc79ee38bb | |||
| 2ad1ca3f6c | |||
| 950c8b3916 | |||
| 06522492f9 | |||
| 2a37fb80eb | |||
| c193699d34 | |||
| 0dbcac6598 | |||
| 34ac4c1fe7 | |||
| b0119de82f | |||
| 83dfc25c02 | |||
| ea5775bf8e | |||
| ad17ffa034 | |||
| 7924fec593 | |||
| 8f06d6b103 | |||
| 0388d10a1f | |||
| ca34b4d777 | |||
| 630cf4e22d | |||
| cb48d5d71c | |||
| 33a7dc93d8 | |||
| 13a223253c | |||
| e03a902735 | |||
| 8b5ab9fc90 | |||
| 043d702f02 | |||
| 922f5e6845 | |||
| bd24695a23 | |||
| b496213406 | |||
| 5af1e59d2d | |||
| 970c143497 | |||
| 7f3646c81d | |||
| 53f5386a2e | |||
| 0d575be45a | |||
| 0b05f6c26f | |||
| f99b202f5b | |||
| 698d80a824 | |||
| 9fcbbd92bf | |||
| 0ff5cea597 | |||
| d010b68962 | |||
| 337dce1e24 | |||
| 9604a4618a | |||
| 6a28a6f297 | |||
| 5614e868e1 | |||
| b679ebe877 | |||
| f1bd11bf87 | |||
| ecd25f5262 | |||
| 830ba76c3e | |||
| a485cae819 | |||
| 264ed02079 | |||
| 829b6420d8 | |||
| 6313259ada | |||
| ca05a72db6 | |||
| 7c4bc3f92f | |||
| 9e8517c745 | |||
| 13d98d68fc | |||
| b7e008d3dd | |||
| 6d4eb1985c | |||
| ded70984f3 | |||
| b5259e7e11 | |||
| bd31fa766a | |||
| c2fb8bfee3 | |||
| 0604e9efe0 | |||
| e5fc0aad31 | |||
| 6add3883a6 | |||
| 34cd4f9076 | |||
| 7e58aaa7ae | |||
| 6ded3ebad5 | |||
| f4cbc9370e | |||
| 4cea12bb69 | |||
| e4c7e12300 | |||
| 53611889ff | |||
| ed671f0e88 | |||
| 9e8c4fe304 | |||
| 7e6a06aeae | |||
| 0e459cbdfb | |||
| 36c612b21c | |||
| e4471a7ac7 | |||
| 43b897c17a | |||
| 289d52c49e | |||
| 7125975d3c | |||
| 30bc0a10f3 | |||
| 1b3370b43f | |||
| aff9fb9045 | |||
| 9c5470d292 | |||
| 8c0c10475d | |||
| 506629e619 | |||
| 2e59a005fd | |||
| ccae0a4074 | |||
| 2ddb440cbb | |||
| f998f82598 | |||
| 5257bac05a | |||
| e2d2b7d577 | |||
| 762863d728 | |||
| be2d2e06e2 | |||
| 63efdb85c1 | |||
| bae8899a46 | |||
| 3130848a10 | |||
| 52037657dc | |||
| a3d570c7b9 | |||
| bd0af10802 | |||
| 7989276259 | |||
| 3693a02fff | |||
| 54f4ed6ba1 | |||
| 1c9968a2b1 | |||
| c9319f315c | |||
| 34e5d2941c | |||
| 6f61232852 | |||
| 62db1b13f7 | |||
| ca1a1b06d0 | |||
| abb02bd18b | |||
| 73bc9c163c | |||
| 5abce0805b | |||
| a2b2ada85c | |||
| 466f86052f | |||
| af61834687 | |||
| 491b4eab14 | |||
| 4fb8dd5493 | |||
| 4a00119a0a | |||
| f8a5192347 | |||
| dd6b3318f3 | |||
| c3e308c2fe | |||
| 792322f00d | |||
| 746f4373e7 | |||
| d48717054c | |||
| e8a4ea75a3 | |||
| 04a31e99fc | |||
| e8c92c3b17 | |||
| b6ee63d8bb | |||
| c38d4d54c6 | |||
| bff6ac7b63 | |||
| b6dbbdc9fe | |||
| 055c2b25d2 | |||
| 773c8bac35 | |||
| 965c1bfee4 | |||
| 5305c55849 | |||
| bc898df2c7 | |||
| 3527f16a94 | |||
| ea960fb719 | |||
| 8492cd2084 | |||
| 2a23198886 | |||
| 3540f6af23 | |||
| 069252f0e6 | |||
| b43401b915 | |||
| a2232a5cc2 | |||
| 1d9a22b785 | |||
| 76944e8137 | |||
| b9b9c8b020 | |||
| 4fc29fa9f4 | |||
| f9d77feca9 | |||
| 1d7d2fae10 | |||
| 38b402ce13 | |||
| fa4fc0321a | |||
| a904a56c36 | |||
| 821b41f9f7 | |||
| a429e221df | |||
| fb23f4f4f4 | |||
| 0e9349a28d | |||
| 937c1e9e92 | |||
| 5acdb5761d | |||
| d88d459d7b | |||
| 319b83fc28 | |||
| c23ff311fc | |||
| a9567e09ef | |||
| d20d6b1bb0 | |||
| 431d40fa9c | |||
| 60c8b285a6 | |||
| 517ff04bec | |||
| c6796fc5d4 | |||
| d5ae2c8882 | |||
| 567989d0de | |||
| 5a01629128 | |||
| 8f7e086f19 | |||
| 1eeceaa649 | |||
| b2dbfefcf3 | |||
| 9a7c05d995 | |||
| 335de2ba1f | |||
| 1ad44362e3 | |||
| c673689430 | |||
| cfb0dca6ec | |||
| 6f5600c803 | |||
| 4b4a6d9d56 | |||
| 62bcd5d32b | |||
| 8275cc5eb0 | |||
| 5b5393f27a | |||
| 4733f0a781 | |||
| 45b3259bf6 | |||
| 61c7ab56fd | |||
| 145bb1e821 | |||
| 83928c2074 | |||
| 1ee5367c19 | |||
| 8325fcf13d | |||
| 620d4be7ae | |||
| 149322c530 | |||
| 0793e73c02 | |||
| 2c855c1c66 | |||
| 410fb96cbc | |||
| c67700be8a | |||
| 660418cff4 | |||
| 41f14d6ea5 | |||
| f6dacb21d2 | |||
| d7605585cd | |||
| 4815221333 | |||
| d378791480 | |||
| 714bef5b6a | |||
| 6d04effac7 | |||
| 6d41cb87d3 | |||
| 3d41e86534 | |||
| 8a1553e43a | |||
| a5e72f9177 | |||
| d3d54d2fc9 | |||
| 89156f1985 | |||
| 618276de19 | |||
| c08a47b853 | |||
| 25047e7cf8 | |||
| 41ebac421e | |||
| 48e9d7b726 | |||
| 4f956c040c | |||
| 00e8a7a491 | |||
| 94359e16d3 | |||
| df285bdd8d | |||
| bfdac58c36 | |||
| 48f32d8033 | |||
| 8a8826600c | |||
| 9b7fd9c4ae | |||
| 1dea5535b0 | |||
| 0e7a565229 | |||
| 0d4cdc0569 | |||
| df93e1ee24 | |||
| 3796e5802f | |||
| a9a11b5393 | |||
| f1ca068666 | |||
| 7271a92bec | |||
| 1ac47e34f2 | |||
| c9ff52fb8a | |||
| 2ea1eceb75 | |||
| 6ace5a39c3 | |||
| 2f19b24a03 | |||
| d714b2afae | |||
| 78439117bc | |||
| cbb1dd0a9b | |||
| b5bb5d950f | |||
| c8dc7e8ce2 | |||
| acaa863576 | |||
| d9c75acde1 | |||
| c1a9be4c1b | |||
| b76154744c | |||
| 17a9e03cd1 | |||
| 7d3041aff3 | |||
| ba2dff372c | |||
| 7b716fce8e | |||
| c5ee075dd9 | |||
| f22d0fcd8d | |||
| 4780a00b14 | |||
| f79ebbd121 | |||
| d6efc2ffd3 | |||
| 487d57b341 | |||
| a6c7f474eb | |||
| 57d54689da | |||
| 2bbf76ebeb | |||
| 78d4d969e2 | |||
| c5f45efd06 | |||
| b80b3ce4b3 | |||
| 75e69df956 | |||
| c54eb963dd | |||
| cabb75c503 | |||
| 9801d7c595 | |||
| 05589b72c4 | |||
| b172c22997 | |||
| 711c5d62d1 | |||
| b38d045dea | |||
| bfc86e8a74 | |||
| 3091bdd31a | |||
| 6d35116e33 | |||
| bdd50bc7f3 | |||
| 327b2eea26 | |||
| c402724354 | |||
| 1509b8027f | |||
| e10b79947a | |||
| e3b792d6e3 | |||
| c0c0fb8eef | |||
| 6d035f67e0 | |||
| c6f0a7b2db | |||
| 46db2b2968 | |||
| c83c3e9e5c | |||
| e98d8d7997 | |||
| 85432b0bd0 | |||
| 6d6fd6b305 | |||
| 6e2c770581 | |||
| bb371128dc | |||
| 7b9344686a | |||
| 444efaa4a7 | |||
| 164fbbd6e6 | |||
| 83c2762b35 | |||
| 8348610c5e | |||
| f009e2aae2 | |||
| aadb84a547 | |||
| c16d74a12a | |||
| eeff3cdcbc | |||
| 164f786626 | |||
| e4e4a45927 | |||
| 0fd0cb6037 | |||
| d0a8e88b95 | |||
| d510d4bf92 | |||
| fd52c6ff67 | |||
| 72523d7bc2 | |||
| c13f07fc88 | |||
| 6ac274673c | |||
| 0c4a048485 | |||
| 7e0d3e62e9 | |||
| 427f7a8b09 | |||
| 2e53a9912e | |||
| dd48e929c7 | |||
| 4789154063 | |||
| 1564711a27 | |||
| 0107578c5e | |||
| 0ae26314b3 | |||
| f6803c960f | |||
| 3d038d101f | |||
| 02fc93d624 | |||
| 218334d1b2 | |||
| 6c504d6a7c | |||
| 6d670a1fc1 | |||
| 3ca608b5d6 | |||
| f9dbe46b44 | |||
| 9f4c047935 | |||
| e2a43cdb87 | |||
| 8206b421d6 | |||
| a588bf5514 | |||
| 72c40b0622 | |||
| 243e80260a | |||
| 396473f1bf | |||
| dd062d4209 | |||
| 4461568ab4 | |||
| 773441bba7 | |||
| a166cdbb6e | |||
| 3bc324139e | |||
| 758733cb55 | |||
| 9de0bf3640 | |||
| 321c9a7f51 | |||
| 38a22555de | |||
| ad5723e792 | |||
| 4f84e631ed | |||
| 0958489ca5 | |||
| 7e0ff3aab0 | |||
| da622a20cd | |||
| 49c50366fd | |||
| 0aac8c9447 | |||
| a0208e6635 | |||
| bf347f5af0 | |||
| 4f1e6e7ef2 | |||
| dd57b821e4 | |||
| 3b7c7d888a | |||
| a744ddad59 | |||
| 7076981f50 | |||
| 422311ff32 | |||
| 04e9e1b2a6 | |||
| bf26cd8ecb | |||
| a82bd0784b | |||
| bf3e2132a7 | |||
| 9d3d43436e | |||
| 58686c3dd8 | |||
| 3aa7c4639d | |||
| 914e1c61de | |||
| a8936295ce | |||
| 1cc9f9b3d8 | |||
| 542039fab0 | |||
| 126d3ebeea | |||
| f193e19536 | |||
| e88295804a | |||
| a8d0600762 | |||
| b9ed7914c2 | |||
| c37031ebf3 | |||
| 9567aad381 | |||
| 18626bd225 | |||
| 584ff19452 | |||
| 821dcf0ff7 | |||
| df01e14bd7 | |||
| e0b4fcc280 | |||
| fe7bb57a8b | |||
| f4af06d812 | |||
| 34b1a03402 | |||
| 53738f83a5 | |||
| 54a4f8d44d | |||
| d9d3478a89 | |||
| b419ebc7e9 | |||
| 10ccfc92f3 | |||
| b8f2610280 | |||
| 41ce15a586 | |||
| 81cb09f9fe | |||
| d2ac46f2b0 | |||
| 3348a97bd3 | |||
| afac1439aa | |||
| 8f762e34f3 | |||
| ff7ecc1d5b | |||
| 39c9354c5c | |||
| 406f3ee9e8 | |||
| da1963381b | |||
| 2875ed81bd | |||
| d81b038cc2 | |||
| 5fb17bcc1e | |||
| 8f789f1b2f | |||
| 6c02ba0540 | |||
| 7e0da18527 | |||
| e2d7a26ec0 | |||
| 9472d3e2f3 | |||
| 11a2e2972a | |||
| c2bbf99e48 | |||
| 585c7a4185 | |||
| 5f134f0197 | |||
| 177c74b1fa | |||
| bb16f4a25d | |||
| 6334cd16df | |||
| b1e5880740 | |||
| ce9439358c | |||
| ace1b6bf98 | |||
| 4240b3fd63 | |||
| b73d495754 | |||
| 1b4bb7d4ab | |||
| 6bc99a7775 | |||
| 60ed1d2a7a | |||
| f2172946e5 | |||
| 5cd1d3c53c | |||
| 7c3ccd6f14 | |||
| 6fd4c30285 | |||
| 2723efaae1 | |||
| 2e7a373646 | |||
| 763dacda97 | |||
| 518c2144e5 | |||
| e82c913680 | |||
| 415b92101f | |||
| 4ee755d641 | |||
| 8fdb2cffa5 | |||
| ef7fec1168 | |||
| 413c5dbf07 | |||
| 43c7f972aa | |||
| 3c487a4229 | |||
| 52efa8863e | |||
| 9b4b4af716 | |||
| efb8492b9d | |||
| b3728d7d72 | |||
| 5ba372306a | |||
| d1710d35ea | |||
| c11e64efbd | |||
| f61ac900b7 | |||
| e94c12451b | |||
| 7846f71fb3 | |||
| 2194f1c983 | |||
| 57f15f779f | |||
| 34afcb5b26 | |||
| 3fb53d1181 | |||
| 783158511a | |||
| ed3c9c3824 | |||
| b8fb68be37 | |||
| 6335c2a0cc | |||
| 8c30002862 | |||
| 063679580d | |||
| 6d72e14178 | |||
| adc1d93f97 | |||
| deefaf1891 | |||
| 07f8a8b34a | |||
| c74c20f701 | |||
| 969fa847c1 | |||
| 0dee7feb74 | |||
| 66f9bb5b95 | |||
| a7600746fb | |||
| ffc839fb20 | |||
| 3f3345aa85 | |||
| ccb516144e | |||
| c810c6cc23 | |||
| 1b554381d1 | |||
| cf11bb2249 | |||
| eba65e1c6d | |||
| 9ec9991c5d | |||
| 7711e6858c | |||
| 42e559a324 | |||
| 6f17fb2851 | |||
| 55e1221686 | |||
| c05cf3f3e1 | |||
| a8f10951d0 | |||
| 654c5714bf | |||
| 4779e0bcb2 | |||
| 996933bbcd | |||
| 387e06421f | |||
| c5ecc66658 | |||
| e8a84817d4 | |||
| 9351cb0ab0 | |||
| cb29913fb1 | |||
| 547bd71a4a | |||
| 225fb3e93c | |||
| 73d021c5c1 | |||
| 8c6f5a546b | |||
| 5ee15074af | |||
| 31ac8125b8 | |||
| d9383fe158 | |||
| 0b4f277845 | |||
| 3de646a51d | |||
| c1e6cc1969 | |||
| 01fd287bcd | |||
| 6fae611381 | |||
| 388502750e | |||
| 27efc8bd0d | |||
| d3bb1e4367 | |||
| 9d39ca744e | |||
| 2eb8ab2057 | |||
| fa6177aafe | |||
| 7e73b8b61a | |||
| f92e0898d3 | |||
| 403a5163c9 | |||
| 7b4f67acea | |||
| 92b56c0412 | |||
| cb3e65e922 | |||
| 3ff5480d7b | |||
| cff27e9f40 | |||
| dfccabe1e7 | |||
| 16b8942966 | |||
| edbbb3aa12 | |||
| 07601749e8 | |||
| 5553b0cd16 | |||
| 276bffd907 | |||
| de40fae555 | |||
| 6385fe3ede | |||
| 774354e3ef | |||
| a1b49bcdea | |||
| 381fa1fc46 | |||
| d78c0a6800 | |||
| c422fd1240 | |||
| d1304583d6 | |||
| d678a6e88c | |||
| 747fad6654 | |||
| 69582431a0 | |||
| d4f6e9b5bb | |||
| 5e239b00d6 | |||
| 1d86fca433 | |||
| 915b86d29b | |||
| fc2076033b | |||
| 1296085130 | |||
| 5215d88be2 | |||
| a665a52cb3 | |||
| 47010f352c | |||
| a626719f0c | |||
| f7896554e9 | |||
| db9bcc9bd4 | |||
| c207f75890 | |||
| 08397146eb | |||
| 0fac29a8c6 | |||
| b897973f2e | |||
| 1e3e8d147a | |||
| fb2eca4cfd | |||
| a211db1b8f | |||
| 24cef5fdfd | |||
| 93118c7efe | |||
| 95675d4d76 | |||
| d1b5773ec1 | |||
| 0caf27a2b0 | |||
| 8d18d826a4 | |||
| bf79e90f3a | |||
| b6cd099df4 | |||
| fa97486070 | |||
| 0d2c36fda9 | |||
| 0240fe9d58 | |||
| 97e1fc3734 | |||
| e59eb52fad | |||
| 99ded85f45 | |||
| f3c3550771 | |||
| fbb5d771a0 | |||
| 9c593643ff | |||
| 2de7d9d224 | |||
| 93db3c61c0 | |||
| 3f6d44e9c9 | |||
| 47605e1dfa | |||
| 313f1a7c0d | |||
| 1ec7cccbd3 | |||
| e09fab39a8 | |||
| 2dc11b36a1 | |||
| 0aa6eedddd | |||
| a24b1d9eda | |||
| 21ea9cb7af | |||
| 0de4f35ebc | |||
| 94e3ba0e87 | |||
| 88dd6f6cc2 | |||
| a9e30eec59 | |||
| a75a612ad5 | |||
| a48f26c718 | |||
| 5ba9e91e52 | |||
| 7db4c905d7 | |||
| 841dd882a4 | |||
| db162cb2b8 | |||
| 74fb2b9704 | |||
| 4e51a21ccb | |||
| 5d14e4fcce | |||
| d7f62fefed | |||
| 357bf10553 | |||
| c0626a02a9 | |||
| b0a3d6809a | |||
| cb96ae2583 | |||
| 406d896363 | |||
| 6bcf25017b | |||
| 0d0c96722c | |||
| 787e44a1d0 | |||
| d789ef5a88 | |||
| d7d21c85e0 | |||
| a73a88a19f | |||
| 8354895e68 | |||
| 0bd57cdbe1 | |||
| eeb224b812 | |||
| 4a9ebf7da7 | |||
| f855e91f11 | |||
| d007428ddb | |||
| 84494d2e0a | |||
| aa2bb9c88c | |||
| 5e124764c1 | |||
| 895d0fdf5b | |||
| e8a0db81ef | |||
| 46f52f32b2 | |||
| 489da1c4b1 | |||
| 4b23495509 | |||
| b0bcffda3b | |||
| 364f53a67a | |||
| 18da6991e1 | |||
| a9d4944f8e | |||
| 2168e27738 | |||
| 2b483bfaf5 | |||
| ec8b5b605e | |||
| 5c9454aa6e | |||
| e083fc786c | |||
| f60dc0bc09 | |||
| 1d8d4f86b6 | |||
| c132e0f712 | |||
| 9dc31e159a | |||
| 7646d59568 | |||
| e193b5ddea | |||
| 6d372bd468 | |||
| 7852a63443 | |||
| 42aec3d000 | |||
| 3e1aeff4c5 | |||
| 6a48a6a9e7 | |||
| b0d340be77 | |||
| 508c4226e1 | |||
| ab5be538f3 | |||
| dd674689df | |||
| 8e5c89ba64 | |||
| ecb117a4a8 | |||
| e866e302f8 | |||
| 922fbeb8b7 | |||
| 3af422a82e | |||
| 8049357ded | |||
| 1290f50284 | |||
| f011f263a1 | |||
| 40a82f3066 | |||
| a770c2ab1c | |||
| c1ee35af3b | |||
| 0dc23afb0c | |||
| 65c2738ea1 | |||
| 25f860dc2f | |||
| 763a59d84d | |||
| 0f1b6dd06a | |||
| 3a7b528d4b | |||
| 2c37f47985 | |||
| 6049594045 | |||
| ac8dd26bdf | |||
| 1ac88c28c3 | |||
| abb9a583a0 | |||
| b87f3000aa | |||
| 0857814dce | |||
| 7b8f7ac497 | |||
| 1a741570e4 | |||
| 13555de861 | |||
| f7fe78dc82 | |||
| 1d73398e8f | |||
| e830d52573 | |||
| 773d59e86d | |||
| 94311de539 | |||
| 098ba1a433 | |||
| 7967662a52 | |||
| 25534052bc | |||
| 82892f131b | |||
| 5e1bd04692 | |||
| eb046f9d59 | |||
| b8111adf35 | |||
| 6d132b546d | |||
| 712251009b | |||
| 6ca76333f3 | |||
| d9691ab277 | |||
| 021bd31706 | |||
| 979edb4a64 | |||
| 7b21582e2d | |||
| 31b17e6d44 | |||
| da6316f20e | |||
| 0feb4c9552 | |||
| 70f446631f | |||
| ff2ea6de4e | |||
| 2afd1db4a2 | |||
| 924e953f47 | |||
| db3f10c807 | |||
| b04e40d6a3 | |||
| 3bc5510a63 | |||
| 07efaf941f | |||
| a9420c223e | |||
| d50cce8815 | |||
| 159cb2b97c | |||
| 303277a8dc | |||
| e70d98a578 | |||
| eb6c33cd97 | |||
| ffdc37c2aa | |||
| 130426c659 | |||
| 0c37f59802 | |||
| e9c7af6864 | |||
| 624ab0be4c | |||
| 12af012644 | |||
| c3626941c7 | |||
| b1f791adb0 | |||
| 1968468ca4 | |||
| 7573ce3591 | |||
| 724d0df7e5 | |||
| fe394e0baa | |||
| 1e43bebf69 | |||
| 4ffb0358de | |||
| 642b26fab2 | |||
| 7301131e42 | |||
| 13a0a5fa23 | |||
| 45008e03ec | |||
| 212472b813 | |||
| 8383c6640a | |||
| e6f1123819 | |||
| 49956f0469 | |||
| d62a9f2390 | |||
| 0ae7c51f50 | |||
| 384c5cff37 | |||
| 225ba3f0af | |||
| 3ad50bec71 | |||
| 35dccb93d1 | |||
| 9c38a1d0eb | |||
| 3725f7af65 | |||
| ca5600d29d | |||
| 2ef22ecee3 | |||
| bc4dacb286 | |||
| c6b067d0c3 | |||
| ea23f5ae45 | |||
| 9092c3d491 | |||
| 95a7adf3e6 | |||
| b11f2be30e | |||
| f41ba90c18 | |||
| 94353ef660 | |||
| 484559148d | |||
| 2d206f1d7a | |||
| 8df91acf70 | |||
| 3ff503b923 | |||
| 45b4d4a8ef | |||
| 49e6b7221c | |||
| 3e4ffa4ec0 | |||
| ba5411995b | |||
| fa8ddb744d | |||
| 3b83d22e79 | |||
| 5bf824ea10 | |||
| dc42a9d2de | |||
| 3ceae485b2 | |||
| c863713742 | |||
| 9ae41a71ac | |||
| a2c0fa5f5b | |||
| ed8a6d6a10 | |||
| c1bc644bad | |||
| b5af30a9f3 | |||
| c75dcc25d2 | |||
| 5b470f32c3 | |||
| d2090e649b | |||
| 3ce465f819 | |||
| 407df0f164 | |||
| 09f1c2041d | |||
| 801a8f2e7b | |||
| 2579443e21 | |||
| 7c61b48202 | |||
| 67b17df9d2 | |||
| d4a6fe9f99 | |||
| 62ee5d5711 | |||
| 3a50451e84 | |||
| a528e97383 | |||
| 17fc060be7 | |||
| 7b72ef296f | |||
| dfc4b8a7d0 | |||
| c2b690f1bd | |||
| c7d7aa1cd1 | |||
| be03daaab2 | |||
| 497f252015 | |||
| 038b434f14 | |||
| 924de9c3d1 | |||
| b7909d3276 | |||
| c5adab5270 | |||
| 76a7098407 | |||
| 7f8639261a | |||
| 5bb81e1d87 | |||
| f1eed04b2d | |||
| b53c4e51f8 | |||
| 3163224bb5 | |||
| 56a3cb8086 | |||
| 513bd04ce1 | |||
| 425cf2e792 | |||
| ae15bc7245 | |||
| 94c2255d81 | |||
| cedd94662d | |||
| dc1824b780 | |||
| 928a84e10d | |||
| 71c061d559 | |||
| b8fb14a905 | |||
| f4d2430d6c | |||
| 16fd2b6b61 | |||
| f15efcdf27 | |||
| 870dba07b1 | |||
| 979bb2bb67 | |||
| f163895204 | |||
| ccb19376f7 | |||
| 623ec4d2f2 | |||
| 2fe1c38796 | |||
| ea1c08e78d | |||
| a34bcb7829 | |||
| 96c795328d | |||
| cefa185c1f | |||
| d8b363c35f | |||
| ca7047f122 | |||
| 08ecf61b35 | |||
| 7ae13660cf | |||
| 8885191702 | |||
| 62b4c870aa | |||
| a7892ee000 | |||
| 384f26525f | |||
| 3e59e29859 | |||
| adbf991a1d | |||
| dc232cdf1b | |||
| af1c7f96a8 | |||
| 77ed8ded7b | |||
| 8d2d44ad05 | |||
| c3501d4792 | |||
| 028e4a6116 | |||
| f5ade63437 | |||
| d4cbf4c624 | |||
| 2a4c20437d | |||
| 4d6a8a1c0a | |||
| 0075d7e74a | |||
| 869f8d0e7d | |||
| 65c4379c53 | |||
| 4090a0870c | |||
| f9e94c2e13 | |||
| 6a17c6c652 | |||
| 6272a7d0c2 | |||
| cd6eefd3e8 | |||
| ba8459e859 | |||
| 1de5bace80 | |||
| 47a4c0fa0b | |||
| 3e1aaf27fe | |||
| 39947cec85 | |||
| bb8340c18d | |||
| ba52fcbcdf | |||
| 9262d88e28 | |||
| 004ff90483 | |||
| 26e12450bb | |||
| 9699e372c2 | |||
| 46b427a310 | |||
| 92a1e14b0b | |||
| fa4ab3325b | |||
| d7cdc28431 | |||
| b4882504ea | |||
| 63bc5dd3e1 | |||
| 727c5601ec | |||
| 242fe3d401 | |||
| ea47a7d4e4 | |||
| 36c6bfa63d | |||
| 9b1cd481b8 | |||
| e497deb89e | |||
| b1b23f76be | |||
| b59d9c85f1 | |||
| a178a4e7bf | |||
| 6187c6de9b | |||
| bdbce64bab | |||
| 9bcade46df | |||
| 5fc07cd840 | |||
| be8653b183 | |||
| 83d0aa0706 | |||
| c8c473c053 | |||
| 104cc98636 | |||
| caad8777e0 | |||
| 4bea16df64 | |||
| 8b6b21d41c | |||
| a278dbb776 | |||
| 291158945d | |||
| b49b628ab5 | |||
| b7db975135 | |||
| 8ec1fcd925 | |||
| 049ff4e572 | |||
| e266ded2f6 | |||
| ac736602fd | |||
| e39438e869 | |||
| 4a4e272f9d | |||
| 20878720c0 | |||
| f43e709842 | |||
| 816fd02876 | |||
| 859679f72a | |||
| 661c5c4476 | |||
| f48160cfb4 | |||
| 056da31bfe | |||
| cb228a0e24 | |||
| e1d2e325dd | |||
| 26709f561f | |||
| e91aeae437 | |||
| fd71d295d7 | |||
| 3da5504e68 | |||
| db4037e592 | |||
| 3cb808d2a2 | |||
| 55f7de7821 | |||
| e9b3bc773d | |||
| 247df6e448 | |||
| e8ff93b4e6 | |||
| 5a93214143 | |||
| a0f83fd905 | |||
| 3d3c8ac4c4 | |||
| f90cd4c3f4 | |||
| ecaf98fcc5 | |||
| 232d4f157a | |||
| b33f740e1f | |||
| 594af3eb22 | |||
| eecd68364a | |||
| 5419d0b44d | |||
| e04912a9f0 | |||
| 889eab9348 | |||
| e87e3f86bf | |||
| fb66d5ab92 | |||
| ecaa696250 | |||
| e99570fc77 | |||
| 70400346d2 | |||
| aa290a3ece | |||
| b5433aaa6f | |||
| f5f530f33f | |||
| a1d2d2b21c | |||
| 34dff95bfd | |||
| 1217e5d516 | |||
| 6997b1920f | |||
| 218f866f86 | |||
| 5561e9125f | |||
| 17ef6faa7f | |||
| 03003499e7 | |||
| 51dd1d9e38 | |||
| 21416a4746 | |||
| 2367caa327 | |||
| 1be2c8c814 | |||
| 2c72562374 | |||
| 05ae9d8bc4 | |||
| bc48db5758 | |||
| a378188194 | |||
| 9e4c8fcb3a | |||
| cc337da21f | |||
| acff2d11ac | |||
| b17caa80d1 | |||
| aab826d4cc | |||
| 3f9a94bec3 | |||
| 7db9140126 | |||
| 38b2478b41 | |||
| 9cf2573c8a | |||
| 569200b6d4 | |||
| 9d7661e415 | |||
| 63dffbf1d2 | |||
| 97bed42f7a | |||
| c9b7eae903 | |||
| 62094f72f6 | |||
| 45738083a6 | |||
| 53365f4c54 | |||
| 64b3019d69 | |||
| a430f22be4 | |||
| 5912e7c233 | |||
| d3043afe5c | |||
| d56aff5255 | |||
| e05a879022 | |||
| e8d690aeb5 | |||
| 02b98afe29 | |||
| ec6e9b7865 | |||
| 42e5d20ae9 | |||
| df7bf130ae | |||
| f6ba6e9eb7 | |||
| 045d32a8e8 | |||
| 32d4aeb162 | |||
| 2edab512a0 | |||
| f510a6128b | |||
| 6aae9a9efb | |||
| b2083ea907 | |||
| 4c50142381 | |||
| 73ab4e0845 | |||
| 2d2e410818 | |||
| 9b29b2a2a5 | |||
| f8e0674ad5 | |||
| b9daf6d9dd | |||
| a43ddc075a | |||
| 9d04c25ab2 | |||
| cc83cda045 | |||
| fc11528f98 | |||
| cf0ee0f6e4 | |||
| 77a2fc0061 | |||
| 9d11255a47 | |||
| 78f2cd3d2d | |||
| 8796a9ff74 | |||
| 8cd4774468 | |||
| 94e49e3f0e | |||
| 029aef1d24 | |||
| 76122538b6 | |||
| 935490d9e9 | |||
| 7b40fcd11f | |||
| 52601c33ab | |||
| 2fb478f921 | |||
| 6cb0289917 | |||
| 7d0cef38b5 | |||
| d575a83f81 | |||
| 1be1fe69f5 | |||
| 3b0149354b | |||
| ed9788c796 | |||
| a11494fd52 | |||
| cc8e4ff318 | |||
| 81acc14e3a | |||
| b47ffc035c | |||
| 0d0b0113d0 | |||
| 9e188e11c5 | |||
| 49230350fa | |||
| 5a190594f4 | |||
| ac6bb7e131 | |||
| fd6ce1e637 | |||
| 8392c710ae | |||
| 6dfa7af42a | |||
| acbd696b05 | |||
| 0d14fc0cbb | |||
| f3ebd20d35 | |||
| f1f94721ae | |||
| 36f0ce0472 | |||
| 66e4326c84 | |||
| abe8a90952 | |||
| 532759a593 | |||
| 4a2f8fc633 | |||
| a56281c0a8 | |||
| 7ff9eebeba | |||
| efd495d667 | |||
| 21e0a86f25 | |||
| 48ea0a57f8 | |||
| bb020a9f75 | |||
| d5fc8b3036 | |||
| 5390cfcc72 | |||
| ec38eb9388 | |||
| 2ec759fc58 | |||
| 7633453cfa | |||
| d51e7c9ff0 | |||
| 87396257fc | |||
| 4c6bef2a6c | |||
| 261e7581b1 | |||
| 1d1cf57b9b | |||
| 2add6b3026 | |||
| 0e5f5da3db | |||
| 48c48b260d | |||
| 5ab109f862 | |||
| 60a6bbe6c5 | |||
| e332ccdf71 | |||
| 7fa9ceb740 | |||
| 282342c1c5 | |||
| f8f1977826 | |||
| ffdbb903e4 | |||
| ca71b87cb0 | |||
| cfb62c9d5e | |||
| bb5371f668 | |||
| 1b1d647439 | |||
| a8977b62ba | |||
| 4bfdb77aae | |||
| 5682ba5921 | |||
| 4338271f1a | |||
| 025c5df87b | |||
| 78f756e081 | |||
| 4cd62fe306 | |||
| ed5e20baab | |||
| 2b3c49b6ab | |||
| b4f841d92f | |||
| 6d3f1d516e | |||
| c3c80a183e | |||
| 2ac691d60e | |||
| d63034c018 | |||
| 65aa3dbf6c | |||
| 4a898dd491 | |||
| ba75647b55 | |||
| dbfdd329f2 | |||
| df0525a911 | |||
| 55311d6c38 | |||
| de4a8ce61c | |||
| a79cb80048 | |||
| 208a450a53 | |||
| 59a375812d | |||
| ba8c4d7400 | |||
| b4438e5933 | |||
| 1338ed4f25 | |||
| db444b2264 | |||
| 881b85a8e5 | |||
| 90da74aee9 | |||
| 3e59effd03 | |||
| 851c651820 | |||
| b7641686a6 | |||
| fe9d013c3e | |||
| 31527e43d9 | |||
| b740fe92d3 | |||
| 95585d7c94 | |||
| d6d1c629fa | |||
| 1ef8005d65 | |||
| d43607b2f9 | |||
| 46fdd02c75 | |||
| a79891f126 | |||
| 3e4ea06702 | |||
| 1ad3d2cdd8 | |||
| 207962bb1a | |||
| 618db3deb7 | |||
| a1c2e40cac | |||
| 61b113c623 | |||
| 4ef3a4ea7c | |||
| aab34d876e | |||
| ef4006b3a5 | |||
| a2492efb60 | |||
| 99c0470dd8 | |||
| 4d82d16dc1 | |||
| 2efc8ff757 | |||
| 6bb2d376b5 | |||
| e714bb67ca | |||
| 7a66394fcb | |||
| 9ae4f3d27e | |||
| d5117af382 | |||
| a4499a22c5 | |||
| ec58960745 | |||
| a3d909888d | |||
| 3ba58f158d | |||
| 88f28d6980 | |||
| 5d25419188 | |||
| 5a6571eba9 | |||
| 4f2900d097 | |||
| 5f78eccd1c | |||
| a8b9c6640a | |||
| 92c8d7dd97 | |||
| a500a479b0 | |||
| 906c1f5055 | |||
| 710547590b | |||
| b31ed75bff | |||
| 50804b725b | |||
| 5a628880b0 | |||
| f2886d75e6 | |||
| 9899932303 | |||
| 31eade077e | |||
| 028275d6da | |||
| c33b54df47 | |||
| 390cca8125 | |||
| 8a0711c758 | |||
| d6f351690e | |||
| 97185033e5 | |||
| eed1b17791 | |||
| 79995893de | |||
| 2718513226 | |||
| 211a20aefb | |||
| de327d23e7 | |||
| 3d32b50f05 | |||
| 14c5c70a78 | |||
| 08be2facab | |||
| cfb192ad1e | |||
| a87420ae59 | |||
| d620b00ffa | |||
| 24abf6c925 | |||
| 69b9fcf297 | |||
| 171afdf694 | |||
| 4e04ee2d2f | |||
| b4fab30b89 | |||
| 56ba14daa4 | |||
| 503cca7cee | |||
| 85ef19558c | |||
| 912c18afa3 | |||
| af10d71cc2 | |||
| 175e1711a6 | |||
| bf70fe4883 | |||
| aa826860bc | |||
| 77cf0390e4 | |||
| d08b12c1a6 | |||
| fdc44cf1b7 | |||
| 795d920028 | |||
| c4461ff57b | |||
| b5a3d4da61 | |||
| ab0f561de6 | |||
| 9f211bbf3a | |||
| 0e7aa57385 | |||
| 84b5415cbf | |||
| fb741174ad | |||
| b876bf6ea5 | |||
| 4bf3bc9eda | |||
| dbd8f037e7 | |||
| 91076f111b | |||
| 136ebc6e3c | |||
| b32f429849 | |||
| 6f44e36e15 | |||
| 01422bd794 | |||
| 0caf0d767c | |||
| 9a79baba76 | |||
| 415015506f | |||
| 18ec04c071 | |||
| 736f0e2531 | |||
| 27b4293285 | |||
| e04914328d | |||
| e1f4399150 | |||
| 8f4e48edff | |||
| c79514fda0 | |||
| 0bde7e57a2 | |||
| 444f9c368e | |||
| 4966664928 | |||
| 2384225b8b | |||
| 63dc047468 | |||
| cc82a93645 | |||
| 5fac0c95e1 | |||
| 1361ddec0a | |||
| 3292123d13 | |||
| fcf1b59128 | |||
| 298d289542 | |||
| 372c6f96f7 | |||
| 5196e6cab7 | |||
| b36902c37a | |||
| 3c999f7ff4 | |||
| b001650c7d | |||
| b4d74032b0 | |||
| 3d5e2a1532 | |||
| c178f52888 | |||
| cb2e35b604 | |||
| 3a4c8d219c | |||
| 442a15770c | |||
| c413098dc8 | |||
| 81005437f4 | |||
| 4d8c013104 | |||
| 19e21d8672 | |||
| 9201909064 | |||
| 157ddaa295 | |||
| b8906a43fa | |||
| 0ee4415cc6 | |||
| d7b5e2c2d8 | |||
| 9cffaad22b | |||
| f39e1b8860 | |||
| b8d0a7bc34 | |||
| 1bd2567773 | |||
| 024252d3e3 | |||
| 383ae8c4ec | |||
| 79a3754210 | |||
| af7378db35 | |||
| 4f34d57223 | |||
| f9372e9408 | |||
| 9112a139df | |||
| 46b433f069 | |||
| 3860cbb2b7 | |||
| 9d5e267e9a | |||
| 754419ec10 | |||
| c47b4c8295 | |||
| c946c197fe | |||
| 6253863e8f | |||
| 94711ff791 | |||
| f7dd6b4d6f | |||
| 86d352d4fe | |||
| c7722ca345 | |||
| 4e01a607e4 | |||
| 1d7164058c | |||
| cf5000d9b0 | |||
| 773aa3b86b | |||
| d2cf974b6e | |||
| 3edb4bc9fb | |||
| e3af6437f1 | |||
| 1d4d4f3bf9 | |||
| f3df229592 | |||
| d5b5623ddd | |||
| 5e14b0f33a | |||
| ce19db8990 | |||
| daa2369dde | |||
| 46da4f268f | |||
| 90ae19cccf | |||
| 6664fdec44 | |||
| 5ca7253d4f | |||
| 68ef3443d4 | |||
| e2ea955881 | |||
| 30c10b82c1 | |||
| ba8648896f | |||
| b3033b99f9 | |||
| 0bd91c25c0 | |||
| f029721d2b | |||
| 6365ff098c | |||
| 36e975dd4f | |||
| b55718444f | |||
| d9adc2eaf1 | |||
| 67c346b102 | |||
| 657b5eb50c | |||
| 5ced7bd1fc | |||
| 62442d578d | |||
| f36c70775a | |||
| e958eff752 | |||
| c0a3f03f4d | |||
| a219c3aba8 | |||
| bb6476e771 | |||
| 38149a2b75 | |||
| 65a466b551 | |||
| fdc36dcbe6 | |||
| dbe0a4f507 | |||
| f3d774d6c1 | |||
| b36f453a58 | |||
| 62efeb0752 | |||
| f1f70e5099 | |||
| 4ea0ef797f | |||
| ea6279cb91 | |||
| 16eae80edf | |||
| b26376750e | |||
| 44b20d1056 | |||
| b454313c5d | |||
| 34908a6a1e | |||
| 8e760f1d09 | |||
| 6113d4e17d | |||
| 9cd405497f | |||
| 483f6d6951 | |||
| 6bdad268f4 | |||
| b4c282a79b | |||
| 4c0f24c10f | |||
| e0bbd77b4b | |||
| a07f0a00da | |||
| a78a6602df | |||
| 8c90a88818 | |||
| b6b8583663 | |||
| de5bd324dc | |||
| ec834baa9c | |||
| dd8b3c6e76 | |||
| 70da0494c1 | |||
| 25905a78f2 | |||
| 133fdfe9e8 | |||
| a041de159f | |||
| 2f02d292da | |||
| 675ba3170d | |||
| 3d6a119de8 | |||
| b63f8cc9f9 | |||
| 498cc57835 | |||
| 2dd21783ec | |||
| 9f25d22a6f | |||
| 8ebda57b2e | |||
| 0cb54b45f1 | |||
| f2058815e7 | |||
| 4a0cef94a5 | |||
| 2be812bbc9 | |||
| aa053ba2c5 | |||
| 83471f1ec5 | |||
| b19a6c7d28 | |||
| b48d5f7a47 | |||
| 2670b9c80a | |||
| 56cd4140d4 | |||
| 137847e55d | |||
| 29ee614511 | |||
| 65d0b1910b | |||
| e8b0f8a251 | |||
| 10960f2a1a | |||
| 67ec3c93bc | |||
| a6a6c9860c | |||
| 8fe24e137f | |||
| 4fdec95d6b | |||
| e2df281e6c | |||
| 17e1ee3cc7 | |||
| 2958900d22 | |||
| 9562ed3462 | |||
| 99089f80cd | |||
| a34c85732d | |||
| 995235b13c | |||
| 44e522c821 | |||
| 3b7046a743 | |||
| a03844f8ca | |||
| 81bb16b302 | |||
| af933f6ff0 | |||
| 852f4340f7 | |||
| 6668e64766 | |||
| a770b4c357 | |||
| b69fcc15b4 | |||
| 1bb74341b4 | |||
| 512bf1a6b2 | |||
| fce0ce6f85 | |||
| 7c85b83736 | |||
| bc2f1b3cf4 | |||
| 0bbe8da810 | |||
| ec5a9a0ac7 | |||
| 7172e734e1 | |||
| f7f0a31a82 | |||
| 80b7e43da8 | |||
| 9172d0ec27 | |||
| b4f7816bf4 | |||
| b9f8610a1e | |||
| b7c42619e6 | |||
| fc23185e84 | |||
| 29e65f9a98 | |||
| c7aae27426 | |||
| f404609120 | |||
| 80b7a7ab4f | |||
| 2bdf20ba8b | |||
| de288e8dbc | |||
| a80faa4bf0 | |||
| 2a10972010 | |||
| 41402668f9 | |||
| 7eed474dd3 | |||
| ec3835d330 | |||
| 75e63ce86e | |||
| a62e008365 | |||
| 3e255474d3 | |||
| 652f3bb13b | |||
| c6e2ef60df | |||
| ae35e97ec8 | |||
| 3bcd26e6d2 | |||
| 0832c58c0a | |||
| c3e814684a | |||
| 7b88f59ce4 | |||
| bb5fcd02bc | |||
| 3b0acf5616 | |||
| f58ac222be | |||
| 85e9f9fb47 | |||
| ef38afcfd4 | |||
| ac2d00c498 | |||
| 99370101de | |||
| 538d6e980b | |||
| cbad699ffe | |||
| 1815534ef0 | |||
| 0d555708bd | |||
| e0e95c53fc | |||
| 6723c50b5c | |||
| 3ac6e102da | |||
| 04231acb2b | |||
| 5b74f3c2cd | |||
| b15d511db4 | |||
| f8fa07c107 | |||
| d3e661f745 | |||
| 6a12fee135 | |||
| 94033dd73f | |||
| 27151b3d10 | |||
| ebd8071688 | |||
| 68c6d74fa1 | |||
| 1dca564a64 | |||
| b782d66763 | |||
| c847530f97 | |||
| b371d037b2 | |||
| e826f73647 | |||
| 12a60bc433 | |||
| 07f347101c | |||
| e76632c912 | |||
| dbcc662ea3 | |||
| 435ce72149 | |||
| 9ab00c05bf | |||
| 733c5a2350 | |||
| 0de8efe4a0 | |||
| b4259bbc37 | |||
| cc05eaf803 | |||
| 9e4d606303 | |||
| c73708ea46 | |||
| 42ee7111c3 | |||
| dfe570a9ef | |||
| 1ec25df269 | |||
| 19c6ddcce5 | |||
| 7fd0878c40 | |||
| 634d655c1e | |||
| 1f88a2d031 | |||
| 0c52de4d8e | |||
| 73dd7f0ff5 | |||
| 4bdac20ad6 | |||
| 18cd1a1e57 | |||
| ad8bef84d1 | |||
| b5d6258530 | |||
| 8ba930c380 | |||
| 812b34fdd8 | |||
| 42d4b85d86 | |||
| 27c1d7b9fa | |||
| 0ab7cda38c | |||
| 6ec6b79669 | |||
| 1109ba44e2 | |||
| 348209ca26 | |||
| 17d0bf6454 | |||
| 2b233a049e | |||
| 80fb564b0d | |||
| ba83eae40f | |||
| fb624fbecf | |||
| f39faaa708 | |||
| 3d6dbfeab0 | |||
| 794d6d7a0c | |||
| 07e38ad6e8 | |||
| f2ffea858c | |||
| bcf1632ee6 | |||
| 1c236e9c25 | |||
| 07fb9d64b0 | |||
| 4ffe066dd8 | |||
| 633a3bef0d | |||
| 7c21366518 | |||
| 4d5292c4da | |||
| 5af3ccc8f8 | |||
| 7bdee4adef | |||
| 3edfdbf02d | |||
| b50353f80f | |||
| f162d50399 | |||
| d1b1545168 | |||
| 9e170a88cd | |||
| d7e1c4fc51 | |||
| ccee35cbb0 | |||
| d59c9d2fa8 | |||
| 33134578b3 | |||
| 6d11322bc7 | |||
| 3f2184a401 | |||
| d3d6ea5a80 | |||
| 635ae38979 | |||
| d59bfbd00e | |||
| 6f7f84a772 | |||
| 181ce1fdc6 | |||
| 98d3a3f1f8 | |||
| a534de5281 | |||
| 06b3f3ced3 | |||
| afa1d92a9f | |||
| a274fe6574 | |||
| deb5db5e1b | |||
| 6a66941843 | |||
| b35adb3836 | |||
| 03d48a87ed | |||
| aeccfe85be | |||
| dc8c7754bb | |||
| c992b3f77d | |||
| 102c75057a | |||
| f30b84f901 | |||
| 89de0c87ae | |||
| 6a1e3d5f36 | |||
| 8ebe070edc | |||
| 6e5c6bb3d6 | |||
| b776222049 | |||
| 1e95c63059 | |||
| b412cfadb5 | |||
| 60796a554b | |||
| 5fb88728f0 | |||
| ab1649d367 | |||
| d6db609d74 | |||
| 955f12037e | |||
| 8cb208cd57 | |||
| e8c6aa703a | |||
| b5dfaef4dc | |||
| 868bcd72c7 | |||
| 7911e22ef7 | |||
| c69c850871 | |||
| c486a69a04 | |||
| 1b36cccb50 | |||
| 6e760fb6d7 | |||
| 3f9380fdbb | |||
| 51d5609843 | |||
| b48326ecd0 | |||
| 10732a5071 | |||
| 00602abe00 | |||
| a0d210598f | |||
| 02a271f220 | |||
| 35f911c815 | |||
| bce1d26ef3 | |||
| d76f6b54a5 | |||
| e0952bad01 | |||
| 1920ed8a77 | |||
| 73048102c0 | |||
| 66a55a4d48 | |||
| fb9f90c942 | |||
| fbcd25d3a7 | |||
| d758313d67 | |||
| cf0e5df048 | |||
| 992176b177 | |||
| 91e461ffdd | |||
| 08cfcae91b | |||
| 56d2857f95 | |||
| efe538b709 | |||
| 55868d76a7 | |||
| 57a1819881 | |||
| d954480892 | |||
| 593d20d400 | |||
| 6ecd4045aa | |||
| 6d6261f4e8 | |||
| 0f5e637a26 | |||
| b3244072e4 | |||
| 68f1003652 | |||
| 5687da2c7a | |||
| 4579467783 | |||
| 458344c94e | |||
| 1e20b80a91 | |||
| c5b3181ad9 | |||
| 5ed716484e | |||
| 28a07e4c80 | |||
| 96b89415a3 | |||
| 272639aaac | |||
| 10041b979d | |||
| cfa655f9b8 | |||
| 49fe28206a | |||
| 49dcc264e5 | |||
| 80820ec7a9 | |||
| 1b350c101b | |||
| 7c025f04e8 | |||
| 44fbfe1d14 | |||
| 2d0f0ca5bb | |||
| 926950f3eb | |||
| 7c24fbb00c | |||
| 9d0fa40919 | |||
| fb387cbe27 | |||
| e8f064000d | |||
| 4e2fa18166 | |||
| 9839cf3798 | |||
| 7902317a4f | |||
| ca4553d0e7 | |||
| f9f7aeb4b7 | |||
| f83f9ad351 | |||
| bf5fae6a8c | |||
| 6ad5b9d5fb | |||
| 31ea5e9733 | |||
| 8dca13efc1 | |||
| de48dae9f0 | |||
| 2edf53128e | |||
| fd35f8ca58 | |||
| f9b263118f | |||
| a1432a5215 | |||
| 845272d541 | |||
| 2e5e51151c | |||
| 4ccb9579ff | |||
| ee310ec815 | |||
| 081c8d435c | |||
| 3ea88b568d | |||
| e89a1c33f5 | |||
| 8356c43e42 | |||
| d4a9a0d607 | |||
| 0c15bd8b87 | |||
| 3fbd82faa0 | |||
| ee777358b8 | |||
| c3373b92a0 | |||
| 4e6c38e10f | |||
| e018cbc74f | |||
| 36d597380e | |||
| 2439573270 | |||
| db3ad7cba7 | |||
| f391be00e9 | |||
| fbc08f063c | |||
| bf46e15b2c | |||
| d16a83dd7c | |||
| c9724cf339 | |||
| 6a639b917f | |||
| f2041b7c75 | |||
| 8ce3203ad3 | |||
| 5be54b40cb | |||
| 24a92945d3 | |||
| d09a9a4294 | |||
| 64325d007f | |||
| 26ceeb4e9b | |||
| 23ad665cb0 | |||
| ed02290129 | |||
| 4f2fcbd905 | |||
| 85535863c5 | |||
| 4a89182077 | |||
| 5e395c2ac9 | |||
| 9c9e9b79c8 | |||
| b00f4ceb2b | |||
| 786024b7dd | |||
| 079dc77af6 | |||
| f873796e20 | |||
| 6d153563be | |||
| dab5d10763 | |||
| d042d339d1 | |||
| e9371d1a46 | |||
| 26d6bbf3a4 | |||
| 8f8397df7f | |||
| bc073b5a4d | |||
| 1b0f541704 | |||
| aea00ddb8c | |||
| a15c593c2e | |||
| 5fbd4b15e0 | |||
| ec329ce910 | |||
| 72e8284c1b | |||
| 4dce3d8fd4 | |||
| c642103f6d | |||
| 4a475773f7 | |||
| 27ef42c6fa | |||
| 5c0546cdae | |||
| 884acf563f | |||
| 166d499f02 | |||
| 7a9f673e3e | |||
| 804e20e6c3 | |||
| 17817e6a3d | |||
| 98026c6b54 | |||
| fa76c4fb2c | |||
| e2269580b0 | |||
| 91641070d2 | |||
| b4c2c01fd0 | |||
| e1f2b6497e | |||
| 1bd41d0bab | |||
| aaeecae745 | |||
| 66ab526b3f | |||
| d5b9a4f3b1 | |||
| 2e5d35966e | |||
| 35adcfa621 | |||
| b85e53cc7a | |||
| f991089ce4 | |||
| dc28f35f11 | |||
| df1e7c9967 | |||
| a26b33cb15 | |||
| 18035eddd3 | |||
| 77bcf6b598 | |||
| 678073a297 | |||
| 523389a72b | |||
| a3cf19e62a | |||
| 6d8b20ce85 | |||
| caaf9441f3 | |||
| c41481197d | |||
| bb1ff5e7f8 | |||
| 28a60cbcdb | |||
| 3869766df9 | |||
| 4fc5f43399 | |||
| a10b68be0a | |||
| 0c62b5f6d5 | |||
| 892a8c3881 | |||
| 515618b907 | |||
| e444b199db | |||
| 287e5fe8a7 | |||
| d762148aaf | |||
| 4a9ce62fe9 | |||
| 9e5645393e | |||
| 297a77f6da | |||
| 5533a01af3 | |||
| 321c24bb00 | |||
| d9388dbfbd | |||
| 1da9cd13af | |||
| 16a65d1c93 | |||
| a98ac28b16 | |||
| 8c5ce29411 | |||
| 18351e0ffc | |||
| cce70e0132 | |||
| ea541f83b9 | |||
| 2c32196a2f | |||
| cc3697f722 | |||
| 47c23ba3e5 | |||
| 177cf2edee | |||
| be13e2f45d | |||
| 26d1767317 | |||
| 01ae3678f1 | |||
| 2cb26d70d6 | |||
| e8e5844089 | |||
| 870bf1cdbd | |||
| 546026a5be | |||
| 29182e995e | |||
| 4e7b9aa2e1 | |||
| 1ed4d29208 | |||
| 25786cc0db | |||
| 3708258fad | |||
| 786e029cd7 | |||
| f247adc56c | |||
| 903c78f540 | |||
| c63f08e06f | |||
| 184c0bba15 | |||
| 9302933f09 | |||
| 4028abe6b3 | |||
| 86247f2c23 | |||
| 6a0c75a7b3 | |||
| 941bce224b | |||
| 25726a0ff4 | |||
| c0b1a946a6 | |||
| 5334a0fbcb | |||
| 3bbac7cdb6 | |||
| 55bf738483 | |||
| 61e8450f25 | |||
| ea30f6aa24 | |||
| fab8e90e6d | |||
| 18bb75eb84 | |||
| b1ca7467f4 | |||
| 3c75dc33e4 | |||
| 441246297e | |||
| 0658b086cd | |||
| 129a24ea8c | |||
| adec25590c | |||
| 6d1ef709cc | |||
| 9425a3e617 | |||
| 5c2831b30b | |||
| 64d25e8de5 | |||
| bfd5060347 | |||
| b084f43f71 | |||
| 075337182c | |||
| 86a22bd660 | |||
| e1ec9651a2 | |||
| f87c6d4734 | |||
| d42014f108 | |||
| 098e0a4bdc | |||
| 0342994a8d | |||
| 3c43212307 | |||
| 56e0d5b33d | |||
| 4dfbf940a4 | |||
| a9fd476848 | |||
| 345c959db9 | |||
| f7e0594f87 | |||
| d7815361f8 | |||
| 7a8a63380f | |||
| 417e06a40e | |||
| 6e7ec1f704 | |||
| 56c02f2016 | |||
| c3415fbd3a | |||
| 53161d7cb2 | |||
| 16e2cc5174 | |||
| 0798941a85 | |||
| 0cf5ee2325 | |||
| 3d90a9c86d | |||
| 3ffac4a188 | |||
| 4d56d3c638 | |||
| e2bd543163 | |||
| 5004bee519 | |||
| 1addb9b1c0 | |||
| 48030121a1 | |||
| 4fcc208fa4 | |||
| 567b42ce6a | |||
| c74976f139 | |||
| 5995e2428c | |||
| f14093e509 | |||
| ec48593fdc | |||
| 337211e731 | |||
| c386d9747b | |||
| 27b7a8be52 | |||
| b62cdc1405 | |||
| 17af6e0a9b | |||
| ac4818d05a | |||
| a2e2e4652f | |||
| 801bfd2ec9 | |||
| d455b40712 | |||
| 15b40d295d | |||
| 442b733e6c | |||
| 4ab2646127 | |||
| 5cc5f540f0 | |||
| 037f413e4e | |||
| ef61dba0dc | |||
| e85fa600e7 | |||
| 2bfd45c942 | |||
| 7efa1c11b5 | |||
| d9bfbfa949 | |||
| 1213bedf6d | |||
| e5bb0cb052 | |||
| 88e6f39ae6 | |||
| d0f2c663be | |||
| d47ddf5b67 | |||
| 624505349d | |||
| fd6d06b49d | |||
| 0d8e15fa75 | |||
| 0f579f785c | |||
| bfee5cd2cd | |||
| 7b38f418cb | |||
| 1e01848396 | |||
| aa13b2aa79 | |||
| 0ea21e5cbd | |||
| f7a48c19f1 | |||
| be54328be3 | |||
| 91b0ae89dd | |||
| b68bd23d9b | |||
| e081236077 | |||
| cb8f47047b | |||
| 7293407295 | |||
| 572806a99b | |||
| 1ea832d65b | |||
| 6bd95bf2a3 | |||
| 48e85b5c41 | |||
| f7e40ae879 | |||
| 831f910e50 | |||
| 5fff4b0bed | |||
| 2b4566b5b5 | |||
| c9a8f27380 | |||
| 85c23ead9e | |||
| 880f4e9ae2 | |||
| 212eaea323 | |||
| 78de9baafc | |||
| 538686f9c0 | |||
| 7743c7a7b1 | |||
| 4faeeb1041 | |||
| a5990ba624 | |||
| 37a91cb049 | |||
| 49359cfe63 | |||
| 978115dc04 | |||
| a453b65e09 | |||
| 561377ab8a | |||
| a21472c0fd | |||
| faf61d94c1 | |||
| 44c2c10ea5 | |||
| c54ae3f023 | |||
| de5a1d1dd5 | |||
| 247cf7a3b2 | |||
| cda69700a0 | |||
| 72b838fffc | |||
| 0742c9313e | |||
| a720116103 | |||
| 714532355f | |||
| 6c5a225725 | |||
| 97e7e798b2 | |||
| 65bace1765 | |||
| 9aba17bd6c | |||
| 8bc437e412 | |||
| 5548938d62 | |||
| 87d338374a | |||
| 739dfb531d | |||
| 596b601021 | |||
| 4d9187a696 | |||
| 7d28bba98d | |||
| ac6eb960cf | |||
| 8557bc67a4 | |||
| 868f93ba8e | |||
| 4750942abe | |||
| 5800109158 | |||
| fd21f1b3ec | |||
| 20cfd0c818 | |||
| 97f9566687 | |||
| 6eaf35d077 | |||
| 6ce04643d0 | |||
| 6536c00f25 | |||
| 21df1e503b | |||
| a3512b01f9 | |||
| d02fa086ff | |||
| c509b5cd0b | |||
| d3a15eb303 | |||
| 9a2ec00a05 | |||
| 9c5111b9c9 | |||
| 144141872b | |||
| 82402982c8 | |||
| 77e8b6c62c | |||
| 2985f0acdb | |||
| f32eee58b0 | |||
| a5f9391541 | |||
| 04142f1c5e | |||
| 2a9660e425 | |||
| 7191077439 | |||
| 60c5aabc5a | |||
| f2fec34604 | |||
| 0b2869fb84 |
22
.cvsignore
22
.cvsignore
@ -1,22 +0,0 @@
|
||||
Makefile
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
stamp-h.in
|
||||
Makefile.in
|
||||
configure
|
||||
config.cache
|
||||
config.h
|
||||
config.h.in
|
||||
config.log
|
||||
config.guess
|
||||
config.status
|
||||
config.sub
|
||||
stamp-h
|
||||
stamp-h1
|
||||
libtool
|
||||
ltconfig
|
||||
ltmain.sh
|
||||
update.log
|
||||
libxen.pc
|
||||
libxen.spec
|
||||
|
||||
51
.gitignore
vendored
Normal file
51
.gitignore
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
*#*#
|
||||
*.#*#
|
||||
*.a
|
||||
*.exe
|
||||
*.o
|
||||
*.orig
|
||||
*.rej
|
||||
*~
|
||||
.git
|
||||
.git-module-status
|
||||
.sc-start-sc_*
|
||||
/GNUmakefile
|
||||
/libvirt-[0-9]*
|
||||
/maint.mk
|
||||
ABOUT-NLS
|
||||
COPYING
|
||||
ChangeLog
|
||||
INSTALL
|
||||
Makefile
|
||||
Makefile.in
|
||||
NEWS
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
config.cache
|
||||
config.guess
|
||||
config.h
|
||||
config.h.in
|
||||
config.log
|
||||
config.rpath
|
||||
config.status
|
||||
config.sub
|
||||
configure
|
||||
coverage
|
||||
cscope.files
|
||||
cscope.out
|
||||
gnulib/
|
||||
libtool
|
||||
libvirt-*.tar.gz
|
||||
libvirt.pc
|
||||
libvirt.spec
|
||||
ltconfig
|
||||
ltmain.sh
|
||||
mingw32-libvirt.spec
|
||||
mkinstalldirs
|
||||
results.log
|
||||
stamp-h
|
||||
stamp-h.in
|
||||
stamp-h1
|
||||
tests/*.log
|
||||
tests/nwfilterxml2xmltest
|
||||
update.log
|
||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "gnulib"]
|
||||
path = .gnulib
|
||||
url = git://git.sv.gnu.org/gnulib.git
|
||||
1
.gnulib
Submodule
1
.gnulib
Submodule
Submodule .gnulib added at 1629006348
13
.mailmap
Normal file
13
.mailmap
Normal file
@ -0,0 +1,13 @@
|
||||
<amy.griffis@hp.com> <aron.griffis@hp.com>
|
||||
<bozzolan@gmail.com> <redshift@gmx.com>
|
||||
<charles_duffy@messageone.com> <charles@dyfis.net>
|
||||
<dfj@redhat.com> <dfj@dfj.bne.redhat.com>
|
||||
<eblake@redhat.com> <ebb9@byu.net>
|
||||
<gdolley@arpnetworks.com> <gdolley@ucla.edu>
|
||||
<gerhard.stenzel@de.ibm.com> <gstenzel@linux.vnet.ibm.com>
|
||||
<jamie@canonical.com> <jamie@ubuntu.com>
|
||||
<laine@redhat.com> <laine@laine.org>
|
||||
<meyering@redhat.com> <jim@meyering.net>
|
||||
<socketpair@gmail.com> <socketpair gmail com>
|
||||
<soren@canonical.com> <soren@ubuntu.com>
|
||||
<jfehlig@novell.com> <jfehlig@linux-ypgk.site>
|
||||
1
.x-sc_avoid_ctype_macros
Normal file
1
.x-sc_avoid_ctype_macros
Normal file
@ -0,0 +1 @@
|
||||
^gnulib/.*
|
||||
1
.x-sc_avoid_if_before_free
Normal file
1
.x-sc_avoid_if_before_free
Normal file
@ -0,0 +1 @@
|
||||
^ChangeLog
|
||||
7
.x-sc_avoid_write
Normal file
7
.x-sc_avoid_write
Normal file
@ -0,0 +1,7 @@
|
||||
^src/libvirt\.c$
|
||||
^src/qemu/qemu_driver\.c$
|
||||
^src/qemu/qemu_monitor\.c$
|
||||
^src/util/util\.c$
|
||||
^src/xen/xend_internal\.c$
|
||||
^daemon/libvirtd.c$
|
||||
^gnulib/
|
||||
1
.x-sc_m4_quote_check
Normal file
1
.x-sc_m4_quote_check
Normal file
@ -0,0 +1 @@
|
||||
^gnulib/m4/intl\.m4$
|
||||
1
.x-sc_prohibit_HAVE_MBRTOWC
Normal file
1
.x-sc_prohibit_HAVE_MBRTOWC
Normal file
@ -0,0 +1 @@
|
||||
gnulib/.*
|
||||
5
.x-sc_prohibit_VIR_ERR_NO_MEMORY
Normal file
5
.x-sc_prohibit_VIR_ERR_NO_MEMORY
Normal file
@ -0,0 +1,5 @@
|
||||
^ChangeLog$
|
||||
^ChangeLog-old$
|
||||
^include/libvirt/virterror\.h$
|
||||
^daemon/dispatch\.c$
|
||||
^src/util/virterror\.c$
|
||||
4
.x-sc_prohibit_always_true_header_tests
Normal file
4
.x-sc_prohibit_always_true_header_tests
Normal file
@ -0,0 +1,4 @@
|
||||
ChangeLog*
|
||||
docs/news.html.in
|
||||
python/libvirt-override.c
|
||||
python/typewrappers.c
|
||||
3
.x-sc_prohibit_asprintf
Normal file
3
.x-sc_prohibit_asprintf
Normal file
@ -0,0 +1,3 @@
|
||||
^gnulib/
|
||||
^po/
|
||||
ChangeLog
|
||||
2
.x-sc_prohibit_gethostby
Normal file
2
.x-sc_prohibit_gethostby
Normal file
@ -0,0 +1,2 @@
|
||||
^gnulib/lib/getaddrinfo\.c$
|
||||
^gnulib/m4/
|
||||
2
.x-sc_prohibit_gethostname
Normal file
2
.x-sc_prohibit_gethostname
Normal file
@ -0,0 +1,2 @@
|
||||
^src/util/util\.c$
|
||||
^ChangeLog-old$
|
||||
2
.x-sc_prohibit_gettext_noop
Normal file
2
.x-sc_prohibit_gettext_noop
Normal file
@ -0,0 +1,2 @@
|
||||
ChangeLog*
|
||||
docs/news.html.in
|
||||
1
.x-sc_prohibit_have_config_h
Normal file
1
.x-sc_prohibit_have_config_h
Normal file
@ -0,0 +1 @@
|
||||
^gnulib/lib/strsep\.c$
|
||||
10
.x-sc_prohibit_nonreentrant
Normal file
10
.x-sc_prohibit_nonreentrant
Normal file
@ -0,0 +1,10 @@
|
||||
^gnulib/
|
||||
^po/
|
||||
^ChangeLog$
|
||||
^ChangeLog-old$
|
||||
^Makefile*
|
||||
^docs/
|
||||
^tests/
|
||||
^tools/virsh\.c$
|
||||
^tools/console\.c$
|
||||
^build-aux/
|
||||
2
.x-sc_prohibit_readlink
Normal file
2
.x-sc_prohibit_readlink
Normal file
@ -0,0 +1,2 @@
|
||||
^src/util/util\.c$
|
||||
^ChangeLog-old$
|
||||
1
.x-sc_prohibit_strcmp
Normal file
1
.x-sc_prohibit_strcmp
Normal file
@ -0,0 +1 @@
|
||||
^gnulib/
|
||||
9
.x-sc_prohibit_strcmp_and_strncmp
Normal file
9
.x-sc_prohibit_strcmp_and_strncmp
Normal file
@ -0,0 +1,9 @@
|
||||
^gnulib/
|
||||
^ChangeLog-old$
|
||||
^docs/
|
||||
^examples/domain-events/events-c/event-test\.c$
|
||||
^src/internal\.h$
|
||||
^src/lxc/lxc_container\.c$
|
||||
^src/node_device/node_device_devkit\.c$
|
||||
^src/node_device/node_device_hal\.c$
|
||||
^src/storage/parthelper\.c$
|
||||
1
.x-sc_prohibit_strncpy
Normal file
1
.x-sc_prohibit_strncpy
Normal file
@ -0,0 +1 @@
|
||||
^src/util/util\.c$
|
||||
1
.x-sc_prohibit_test_minus_ao
Normal file
1
.x-sc_prohibit_test_minus_ao
Normal file
@ -0,0 +1 @@
|
||||
docs/news.html.in
|
||||
4
.x-sc_require_config_h
Normal file
4
.x-sc_require_config_h
Normal file
@ -0,0 +1,4 @@
|
||||
^examples/
|
||||
^gnulib/lib/dummy\.c$
|
||||
^gnulib/tests/dummy\.c$
|
||||
^ChangeLog$
|
||||
1
.x-sc_require_config_h_first
Normal file
1
.x-sc_require_config_h_first
Normal file
@ -0,0 +1 @@
|
||||
^examples/
|
||||
7
.x-sc_trailing_blank
Normal file
7
.x-sc_trailing_blank
Normal file
@ -0,0 +1,7 @@
|
||||
\.fig$
|
||||
\.gif$
|
||||
\.ico$
|
||||
\.png$
|
||||
^ChangeLog$
|
||||
^NEWS$
|
||||
^docs/.*
|
||||
2
.x-sc_unmarked_diagnostics
Normal file
2
.x-sc_unmarked_diagnostics
Normal file
@ -0,0 +1,2 @@
|
||||
docs/apibuild.py
|
||||
tests/virt-aa-helper-test
|
||||
139
AUTHORS
139
AUTHORS
@ -1,2 +1,137 @@
|
||||
Daniel Veillard <veillard@redhat.com> or <daniel@veillard.com>
|
||||
Karel Zak <kzak@redhat.com>
|
||||
libvirt Authors
|
||||
===============
|
||||
|
||||
The libvirt project was initiated by:
|
||||
|
||||
Daniel Veillard <veillard@redhat.com> or <daniel@veillard.com>
|
||||
|
||||
The primary maintainers and people with commit access rights:
|
||||
|
||||
Daniel Veillard <veillard@redhat.com>
|
||||
Daniel Berrange <berrange@redhat.com>
|
||||
Richard W.M. Jones <rjones@redhat.com>
|
||||
Karel Zak <kzak@redhat.com>
|
||||
Mark McLoughlin <markmc@redhat.com>
|
||||
Anthony Liguori <aliguori@us.ibm.com>
|
||||
Jim Meyering <meyering@redhat.com>
|
||||
Jim Fehlig <jfehlig@novell.com>
|
||||
Chris Lalancette <clalance@redhat.com>
|
||||
Atsushi SAKAI <sakaia@jp.fujitsu.com>
|
||||
Dave Leskovec <dlesko@linux.vnet.ibm.com>
|
||||
Cole Robinson <crobinso@redhat.com>
|
||||
Dan Smith <danms@us.ibm.com>
|
||||
Guido Günther <agx@sigxcpu.org>
|
||||
John Levon <john.levon@sun.com>
|
||||
Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
Jiri Denemark <jdenemar@redhat.com>
|
||||
Dave Allan <dallan@redhat.com>
|
||||
Laine Stump <laine@redhat.com>
|
||||
Stefan Berger <stefanb@us.ibm.com>
|
||||
Eric Blake <eblake@redhat.com>
|
||||
|
||||
Patches have also been contributed by:
|
||||
|
||||
David Lutterkort <dlutter@redhat.com>
|
||||
Andrew Puch <apuch@redhat.com>
|
||||
Philippe Berthault <philippe.berthault@Bull.net>
|
||||
Hugh Brock <hbrock@redhat.com>
|
||||
Michel Ponceau <michel.ponceau@bull.net>
|
||||
Jeremy Katz <katzj@redhat.com>
|
||||
Pete Vetere <pvetere@redhat.com>
|
||||
Kazuki Mizushima <mizushima.kazuk@jp.fujitsu.com>
|
||||
Saori Fukuta <fukuta.saori@jp.fujitsu.com>
|
||||
Tatsuro Enokura <fj7716hz@aa.jp.fujitsu.com>
|
||||
Takahashi Tomohiro <takatom@jp.fujitsu.com>
|
||||
Nobuhiro Itou <fj0873gn@aa.jp.fujitsu.com>
|
||||
Masayuki Sunou <fj1826dm@aa.jp.fujitsu.com>
|
||||
Mark Johnson <johnson.nh@gmail.com>
|
||||
Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
|
||||
Shuveb Hussain <shuveb@binarykarma.com>
|
||||
Jim Paris <jim@jtan.com>
|
||||
Daniel Hokka Zakrisson <daniel@hozac.com>
|
||||
Mads Chr. Olesen <shiyee@shiyee.dk>
|
||||
Anton Protopopov <aspsk2@gmail.com>
|
||||
Stefan de Konink <dekonink@kinkrsoftware.nl>
|
||||
Kaitlin Rupert <kaitlin@linux.vnet.ibm.com>
|
||||
Evgeniy Sokolov <evg@openvz.org>
|
||||
David Lively <dlively@virtualiron.com>
|
||||
Charles Duffy <Charles_Duffy@messageone.com>
|
||||
Nguyen Anh Quynh <aquynh@gmail.com>
|
||||
James Morris <jmorris@namei.org>
|
||||
Chris Wright <chrisw@redhat.com>
|
||||
Ben Guthro <ben.guthro@gmail.com>
|
||||
Shigeki Sakamoto <fj0588di@aa.jp.fujitsu.com>
|
||||
Gerd von Egidy <lists@egidy.de>
|
||||
Itamar Heim <iheim@redhat.com>
|
||||
Markus Armbruster <armbru@redhat.com>
|
||||
Ryota Ozaki <ozaki.ryota@gmail.com>
|
||||
James Morris <jmorris@namei.org>
|
||||
Daniel J Walsh <dwalsh@redhat.com>
|
||||
Maximilian Wilhelm <max@rfc2324.org>
|
||||
Pritesh Kothari <Pritesh.Kothari@Sun.COM>
|
||||
Amit Shah <amit.shah@redhat.com>
|
||||
Florian Vichot <florian.vichot@diateam.net>
|
||||
Takahashi Tomohiro <takatom@jp.fujitsu.com>
|
||||
Serge E. Hallyn <serue@us.ibm.com>
|
||||
Soren Hansen <soren@canonical.com>
|
||||
Abel Míguez Rodríguez<amiguezr@pdi.ucm.es>
|
||||
Doug Goldstein <cardoe@gentoo.org>
|
||||
Javier Fontan <jfontan@gmail.com>
|
||||
Federico Simoncelli <federico.simoncelli@gmail.com>
|
||||
Amy Griffis <amy.griffis@hp.com>
|
||||
Henrik Persson E <henrik.e.persson@ericsson.com>
|
||||
Satoru SATOH <satoru.satoh@gmail.com>
|
||||
Paolo Bonzini <pbonzini@redhat.com>
|
||||
Miloslav Trmač <mitr@redhat.com>
|
||||
Jamie Strandboge <jamie@canonical.com>
|
||||
Gerhard Stenzel <gerhard.stenzel@de.ibm.com>
|
||||
Matthew Booth <mbooth@redhat.com>
|
||||
Diego Elio Pettenò <flameeyes@gmail.com>
|
||||
Adam Litke <agl@us.ibm.com>
|
||||
Steve Yarmie <steve.yarmie@gmail.com>
|
||||
Dan Kenigsberg <danken@redhat.com>
|
||||
Yuji NISHIDA <nishidy@nict.go.jp>
|
||||
Dustin Xiong <x_k_123@hotmail.com>
|
||||
Rolf Eike Beer <eike@sf-mail.de>
|
||||
Wolfgang Mauerer <wolfgang.mauerer@siemens.com>
|
||||
Philipp Hahn <hahn@univention.de>
|
||||
Ed Swierk <eswierk@aristanetworks.com>
|
||||
Paolo Smiraglia <paolo.smiraglia@gmail.com>
|
||||
Sharadha Prabhakar <sharadha.prabhakar@citrix.com>
|
||||
Chris Wong <wongc-redhat@hoku.net>
|
||||
Daniel Berteaud <daniel@firewall-services.com>
|
||||
Dustin Kirkland <kirkland@canonical.com>
|
||||
Luiz Capitulino <lcapitulino@redhat.com>
|
||||
Ryan Harper <ryanh@us.ibm.com>
|
||||
Spencer Shimko <sshimko@tresys.com>
|
||||
Marco Bozzolan <bozzolan@gmail.com>
|
||||
Alex Williamson <alex.williamson@redhat.com>
|
||||
Ersek Laszlo <lacos@caesar.elte.hu>
|
||||
Kenneth Nagin <NAGIN@il.ibm.com>
|
||||
Klaus Ethgen <Klaus@Ethgen.de>
|
||||
Bryan Kearney <bkearney@redhat.com>
|
||||
Darry L. Pierce <dpierce@redhat.com>
|
||||
David Jorm <dfj@redhat.com>
|
||||
Eduardo Otubo <otubo@linux.vnet.ibm.com>
|
||||
Garry Dolley <gdolley@arpnetworks.com>
|
||||
Harshavardhana <harsha@gluster.com>
|
||||
Jonas Eriksson <jonas.j.eriksson@ericsson.com>
|
||||
Jun Koi <junkoi2004@gmail.com>
|
||||
Olivier Fourdan <ofourdan@redhat.com>
|
||||
Ron Yorston <rmy@tigress.co.uk>
|
||||
Shahar Klein <shaharklein@yahoo.com>
|
||||
Taizo ITO <taizo.ito@hde.co.jp>
|
||||
Thomas Treutner <thomas@scripty.at>
|
||||
Jean-Baptiste Rouault <jean-baptiste.rouault@diateam.net>
|
||||
Марк Коренберг <socketpair@gmail.com>
|
||||
Justin Clift <justin@salasaga.org>
|
||||
Alan Pevec <apevec@redhat.com>
|
||||
|
||||
[....send patches to get your name here....]
|
||||
|
||||
The libvirt Logo was designed by Diana Fong
|
||||
|
||||
-- End
|
||||
;; Local Variables:
|
||||
;; coding: utf-8
|
||||
;; End:
|
||||
|
||||
@ -506,5 +506,3 @@ if necessary. Here is a sample; alter the names:
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
||||
|
||||
|
||||
428
ChangeLog
428
ChangeLog
@ -1,428 +0,0 @@
|
||||
Wed Feb 8 11:43:43 EST 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* //* : renamed the project libvirt , this affects all makefiles,
|
||||
the specs, the icons, the docs, etc ...
|
||||
* configure.in: prepare for 0.0.3
|
||||
|
||||
Fri Feb 3 15:47:32 CET 2006 Karel Zak <kzak@redhat.com>
|
||||
|
||||
* src/virsh.c: fix order of the save command options
|
||||
|
||||
Tue Jan 31 19:12:19 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in docs/examples/*: starting to add examples. the XSLT
|
||||
still need to be fixed for web site
|
||||
|
||||
Tue Jan 31 11:22:51 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* python/*: update of the python bindings, fix names, add
|
||||
missing features like list of domains and domain info extraction
|
||||
|
||||
Tue Jan 31 11:21:56 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in libvir.spec.in NEWS docs/*: commiting the state of 0.0.2
|
||||
release
|
||||
|
||||
Sun Jan 29 11:55:13 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* NEWS docs/news.xsl: added stylesheet to generate NEWS file
|
||||
* docs/*: updated docs preparing for the release
|
||||
|
||||
Sun Jan 29 09:52:03 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/site.xsl docs/*.html: credits to Diana Fong for graphics
|
||||
and web site design
|
||||
|
||||
Sat Jan 28 21:24:05 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* python/libvir.c: fix a stupid bug in python bindings (DomainDestroy
|
||||
is still mishandled though)
|
||||
|
||||
Fri Jan 27 09:58:31 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/libvir.c src/xml.c: applied patch from Anthony Liguori
|
||||
to remove the XenStore transactions as this is not needed
|
||||
anymore.
|
||||
|
||||
Thu Jan 26 13:10:43 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* TODO: updated
|
||||
* docs/search.php: use the new web site design
|
||||
* python/generator.py: fix a generation bug on python keyword
|
||||
|
||||
Tue Jan 24 11:44:53 CET 2006 Karel Zak <kzak@redhat.com>
|
||||
|
||||
* src/libvir_sym.version: add virDeomainRestore and virDomainSave
|
||||
* src/virsh.c: support '=' in options, fix command grammar
|
||||
* src/libvir.c: add conn->xshandle checks
|
||||
|
||||
Tue Jan 24 14:09:37 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/libvir.c: Karel pointed out handle was lost in
|
||||
virConnectOpenReadOnly()
|
||||
|
||||
Mon Jan 23 23:53:07 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/site.xsl docs/*.png docs/*.html: update the images from Diana,
|
||||
added favicon to page.
|
||||
* src/libvir.c: reorganized the include imports.
|
||||
|
||||
Mon Jan 23 14:23:16 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/*: augment and try to complete the doc in its current state
|
||||
|
||||
Sun Jan 22 17:26:20 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/*: started to augment and update the documentation
|
||||
|
||||
Sat Jan 21 23:33:46 GMT 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs//*: mostly finished the revamp in the plane, starts to look good
|
||||
|
||||
Fri Jan 20 16:48:05 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/* : total revamp of the web site based on Diana Fong design
|
||||
but not completely integrated yet
|
||||
|
||||
Fri Jan 20 10:57:44 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h include/libvir.h.in src/libvir.c: revamped the
|
||||
restore API (though it would be better if it was returning
|
||||
a domain pointer in case of success)
|
||||
* src/virsh.c: added save and restore to the commands, tested,
|
||||
the option handling need work though
|
||||
|
||||
Thu Jan 19 11:21:57 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/libvir.c src/xend_internal.c src/xend_internal.h: continue
|
||||
the integration of more xend based accesses, virsh seems to work
|
||||
without accessing the xen store now.
|
||||
|
||||
Wed Jan 18 19:57:53 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/libvir.c: small change w.r.t. reboot.
|
||||
|
||||
Wed Jan 18 11:32:04 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h include/libvir.h.in src/libvir.c: more integration
|
||||
of libxend capabilities, including checkpointing and restoring
|
||||
in a file.
|
||||
* docs//*: regenerated the docs
|
||||
|
||||
Tue Jan 17 17:53:43 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h[.in]: added VIR_DOMAIN_CRASHED status, small
|
||||
doc fix
|
||||
* src/virsh.c: fix a integer being formatted as %s in idof
|
||||
* src/internal.h src/libvir.c src/xend_internal.[ch]: started to
|
||||
integrated the xend back-end, especially for getting informations
|
||||
about a domain.
|
||||
|
||||
Fri Jan 13 17:39:24 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h.in include/libvir.h src/internal.h src/libvir.c
|
||||
src/xend_internal.c src/xend_internal.h: starting to plug the
|
||||
xend code in, replacing structures mostly, but not finished.
|
||||
|
||||
Thu Jan 12 16:36:21 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/Makefile.am src/xend_internal.c src/xend_internal.h:
|
||||
added more of Anthony Liquori libxend code, commented and reformatted
|
||||
this still need to be plugged, it's still dead code ATM.
|
||||
|
||||
Wed Jan 11 14:57:01 CET 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/libvir.html: grammatical fix
|
||||
* src/Makefile.am src/sexpr.c src/sexpr.h: starting to integrate
|
||||
Anthony Liquori libxend code
|
||||
* src/libvir.c: fix an uninitialized value
|
||||
|
||||
Wed Dec 21 17:58:45 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/architecture.* docs/*: added a section on the architecture
|
||||
and regenerated the docs.
|
||||
|
||||
Mon Dec 19 19:04:11 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* NEWS docs/libvir.html docs/news.html: preparing 0.0.1 release
|
||||
|
||||
Mon Dec 19 17:32:22 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* Makefile.am configure.in libvir.spec.in python/*: added a first
|
||||
version for python bindings, heavilly based on libxml2/libxslt
|
||||
way of doing things, maybe this need to be revisited. Added packaging
|
||||
too.
|
||||
* src/hash.h: fixed the Copyright notice.
|
||||
|
||||
Fri Dec 16 19:35:29 CET 2005 Karel Zak <kzak@redhat.com>
|
||||
|
||||
* src/xml.c src/internal.h src/libvir.c: struct checks cleanup,
|
||||
add macros VIS_IS_DOMAIN(), VIR_IS_CONNECT() and VIR_IS_CONNECTED_DOMAIN()
|
||||
|
||||
Fri Dec 16 14:26:05 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* libvir.spec.in src/Makefile.am: cleaned up the spec file, removed
|
||||
static libraries, adding virsh as an installed program
|
||||
|
||||
Fri Dec 16 13:59:35 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/libvir_sym.version: oops forgot to export the new symbol
|
||||
|
||||
Fri Dec 16 13:15:04 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h include/libvir.h.in src/internal.h src/libvir.c:
|
||||
adding the virDomainShutdown() API
|
||||
* src/virsh.c: adding a shutdown command
|
||||
* docs/*: regenerated
|
||||
|
||||
Fri Dec 16 01:43:18 CET 2005 Karel Zak <kzak@redhat.com>
|
||||
|
||||
* include/libvir.h.in: add missing declaration of virDomainGetXMLDesc()
|
||||
* include/libvir.h.in src/libvir.c src/virsh src/libvir_sym.version: add
|
||||
virDomainGetOSType()
|
||||
* src/internal.h src/libvir.c src/xml.c: add internal function virDomainGetVM(),
|
||||
move virDomainGetVMInfo() from src/xml.c
|
||||
|
||||
Thu Dec 15 17:56:27 CET 2005 Karel Zak <kzak@redhat.com>
|
||||
|
||||
* src/virsh.c: remove --id / --name options
|
||||
|
||||
Wed Dec 14 16:28:24 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/xml.c: add dump of os/boot informations
|
||||
|
||||
Wed Dec 14 13:35:39 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/xml.c: added dump of physical vbd and read-only status
|
||||
|
||||
Wed Dec 14 12:20:06 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/xml.c: started to add block devices and interfaces descriptions
|
||||
in the XML dump.
|
||||
|
||||
Tue Dec 13 17:20:11 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h src/Makefile.am src/internal.h src/libvir.c
|
||||
src/libvir_sym.version src/virsh.c src/xml.c: started working on
|
||||
the XML dump, added a dumpxml virsh version and a bit of
|
||||
infrastructure code. Found a way to detect dead ID from xenstore
|
||||
data.
|
||||
|
||||
Mon Dec 12 14:21:18 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/libvir.c src/xen_internal.c src/xen_internal.h: completing the
|
||||
API implementation, only CreateLinux is now missing.
|
||||
|
||||
Fri Dec 9 15:39:18 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/search.php docs/index.py docs/*.xsl docs/html/*: fixed the
|
||||
page generation, added the search engine.
|
||||
|
||||
Fri Dec 9 14:03:13 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/*: extended the documentation
|
||||
|
||||
Fri Dec 9 11:15:41 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in: adding --without-depends to make dist on non
|
||||
Xenified machine.
|
||||
|
||||
Fri Dec 9 00:47:12 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* Makefile.am include/libvir.h.in libvir.pc.in: various fixes.
|
||||
* docs/*: regenerated the docs
|
||||
|
||||
Fri Dec 9 00:02:06 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/virsh.c: added support for suspend/resume/destroy, validating
|
||||
the previous code.
|
||||
|
||||
Thu Dec 8 18:16:20 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/libvir.c src/xen_internal.c src/xen_internal.h: implement
|
||||
Pause, Resume, Destroy, but untested yet.
|
||||
|
||||
Thu Dec 8 17:43:11 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h src/libvir.c src/libvir_sym.version: adding
|
||||
virDomainFree()
|
||||
* docs/*: regenerated the docs
|
||||
|
||||
Thu Dec 8 16:07:07 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in include/libvir.h.in include/libvir.h src/Makefile.am
|
||||
include/Makefile.am: provide/fix library versionning information
|
||||
include/libvir.h is now generated !
|
||||
* include/libvir.h.in src/libvir.c: revamp APIs and implement
|
||||
complete ones.
|
||||
* src/virsh.c: finish the version command and a bit of cleanup.
|
||||
|
||||
Thu Dec 8 15:20:57 CET 2005 Karel Zak <kzak@redhat.com>
|
||||
|
||||
* src/virsh.c: code cleanup to prevent gcc warnings
|
||||
|
||||
Thu Dec 8 14:25:09 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in: activate pedantic flags
|
||||
* src/libvir.c src/libvir_sym.version src/xen_internal.[ch]
|
||||
include/libvir.h: implementing hypervisor Version and Type interfaces
|
||||
* src/virsh.c: adding a version command, WIP
|
||||
|
||||
Thu Dec 8 11:19:48 CET 2005 Karel Zak <kzak@redhat.com>
|
||||
|
||||
* src/Makefile.am src/virsh.c configure.in: adding readline support,
|
||||
and implement basic commands to virsh.
|
||||
|
||||
Thu Dec 8 11:12:36 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/libvir.c src/xen_internal.c: fixed the new Xen hypervisor call
|
||||
|
||||
Wed Dec 7 19:09:48 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in src/Makefile.am src/libvir.c src/xen_internal.c
|
||||
src/xen_internal.h: removed dependancy on xenctrl library, untested
|
||||
yet.
|
||||
|
||||
Wed Dec 7 15:08:54 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/*: adding missing links to API page.
|
||||
|
||||
Wed Dec 7 14:43:28 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in libvir.spec.in docs/Makefile.am: make sure the
|
||||
docs are installed and packaged in the -devel RPM
|
||||
* docs/api.xsl docs/newapi.xsl: forgot to commit API HTML stylesheets
|
||||
|
||||
Wed Dec 7 14:09:48 CET 2005 Karel Zak <kzak@redhat.com>
|
||||
* include/libvir.h src/libvir.c: adding xenConnectNumOfDomains()
|
||||
to returns number of active domains.
|
||||
|
||||
Wed Dec 7 13:55:04 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/ChangeLog.awk docs/ChangeLog.xsl: Changelog handling from
|
||||
libxml2 adapted to libvir
|
||||
* docs/* docs/html/libxml-libvir.html: regenerated
|
||||
|
||||
Wed Dec 7 11:58:20 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/* docs/html/*: more work on the docs generation
|
||||
* include/libvir.h: adding informations on the header
|
||||
|
||||
Wed Dec 7 10:31:29 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in docs/FAQ.html docs/Libxml2-Logo-90x34.gif
|
||||
docs/Makefile.am docs/bugs.html docs/index.html docs/intro.html
|
||||
docs/libvir.html docs/redhat.gif docs/site.xsl: starting to add
|
||||
the web site, based on libxml2 one.
|
||||
* src/hash.c: add a missing include
|
||||
|
||||
Tue Dec 6 17:47:11 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/Makefile.am docs/apibuild.py docs/libvir-api.xml
|
||||
docs/libvir-refs.xml: fix XML API generation
|
||||
* include/libvir.h src/libvir.c src/virsh.c: fix the info memory
|
||||
API again, use KB, not bytes so that an unsigned long is sufficient.
|
||||
|
||||
Tue Dec 6 17:12:52 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h src/libvir.c src/virsh.c: adding the extraction
|
||||
of the number of virtual CPUs for both interfaces.
|
||||
|
||||
Tue Dec 6 14:46:50 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h src/libvir.c src/virsh.c: tweaking of the
|
||||
GetInfo() API, returns bytes and nanoseconds, try to fix
|
||||
the scales, but time on unpriviledged interfaces doesn't work.
|
||||
|
||||
Mon Dec 5 19:14:05 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libvir.h src/libvir.c src/libvir_sym.version src/virsh.c:
|
||||
first pass at trying to implement virDomainGetInfo() quite a bit
|
||||
of work left to do.
|
||||
|
||||
Mon Dec 5 12:15:16 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* Makefile.am README TODO autogen.sh configure.in libvir.pc.in
|
||||
libvir.spec.in docs/Makefile.am docs/apibuild.py docs/structures.fig
|
||||
include/Makefile.am include/libvir.h src/Makefile.am src/hash.c
|
||||
src/hash.h src/internal.h src/libvir.c src/libvir_sym.version
|
||||
src/virsh.c: renamed to libvir
|
||||
|
||||
Fri Dec 2 15:15:26 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libxen.h src/libxen.c src/libxen_sym.version: adding
|
||||
xenConnectListDomains() to list active domains
|
||||
* src/xensh.c: integrated a basic test for xenConnectListDomains()
|
||||
|
||||
Fri Dec 2 13:10:04 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in src/Makefile.am: more warnings from compiler and
|
||||
link static in work environement
|
||||
|
||||
Thu Dec 1 18:32:43 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* Makefile.am configure.in docs/apibuild.py docs/libxen-api.xml
|
||||
docs/libxen-refs.xml docs/structures.fig: starting to add docs
|
||||
and the extraction tool
|
||||
* src/libxen.c: fixed comments error raised by apibuild
|
||||
|
||||
Thu Dec 1 17:34:23 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libxen.h src/libxen.c src/libxen_sym.version: add read-only
|
||||
connections for normal users (but need /var/run/xenstored/socket_ro
|
||||
to be chmoded to 666)
|
||||
* src/xensh.c: if not root use the RO access
|
||||
|
||||
Thu Dec 1 11:50:16 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* include/libxen.h src/libxen.c src/libxen_sym.version src/xensh.c:
|
||||
changed entry points naming conventions based on feedback with
|
||||
Karel Zak
|
||||
|
||||
Wed Nov 30 14:18:19 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/Makefile.am src/hash.[ch]: added hash module based on libxml2
|
||||
one.
|
||||
* include/libxen.h src/libxen.c src/libxen_sym.version: extend API
|
||||
start to access libxenctrl directly (need xen update to get includes)
|
||||
* src/xensh.c: access to both xenstore and hypervisor
|
||||
|
||||
Tue Nov 22 17:09:11 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in: checking xenstore library, error out on missing libs
|
||||
* include/libxen.h src/libxen.c src/libxen_sym.version: adding new
|
||||
entry points
|
||||
|
||||
Thu Nov 10 17:11:03 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/makefile.am src/libxen.c src/xensh.c: add a small tool sensh,
|
||||
implement xenopenconnect and xencloseconnect.
|
||||
|
||||
Wed Nov 9 10:57:12 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* docs/Goals: added a Goals document for the library
|
||||
|
||||
Mon Nov 7 18:14:50 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* TODO: updated
|
||||
* include/libxen.h src/libxen.c src/libxen_sym.version: extended
|
||||
entry points to a first minimal set.
|
||||
* src/internal.h: TODO macro
|
||||
|
||||
Wed Nov 2 16:35:54 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* TODO libxen.pc.in libxen.spec.in include/Makefile.am Makefile.am
|
||||
config.h.in configure.in: fix make dist, add rpm packaging
|
||||
* src/libxen_sym.version src/Makefile.am: set a policy of no
|
||||
export by default of library symbols
|
||||
|
||||
Wed Nov 2 14:17:50 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* AUTHORS NEWS README autogen.sh configure.in: allow autogen.sh and
|
||||
configure to start working
|
||||
* src/Makefile.am src/internal.h src/libxen.c: make the first compile
|
||||
|
||||
Wed Nov 2 13:44:47 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/libxen.c src/Makefile.am include/libxen.h configure.in
|
||||
Makefile.am COPYING.LIB: creation
|
||||
16699
ChangeLog-old
Normal file
16699
ChangeLog-old
Normal file
File diff suppressed because it is too large
Load Diff
502
HACKING
Normal file
502
HACKING
Normal file
@ -0,0 +1,502 @@
|
||||
-*- buffer-read-only: t -*- vi: set ro:
|
||||
DO NOT EDIT THIS FILE! IT IS GENERATED AUTOMATICALLY!
|
||||
|
||||
Libvirt contributor guidelines
|
||||
==============================
|
||||
|
||||
|
||||
General tips for contributing patches
|
||||
=====================================
|
||||
|
||||
(1) Discuss any large changes on the mailing list first. Post patches
|
||||
early and listen to feedback.
|
||||
|
||||
(2) Post patches in unified diff format. A command similar to this
|
||||
should work:
|
||||
|
||||
diff -urp libvirt.orig/ libvirt.modified/ > libvirt-myfeature.patch
|
||||
|
||||
or:
|
||||
|
||||
git diff > libvirt-myfeature.patch
|
||||
|
||||
(3) Split large changes into a series of smaller patches, self-contained
|
||||
if possible, with an explanation of each patch and an explanation of how
|
||||
the sequence of patches fits together.
|
||||
|
||||
(4) Make sure your patches apply against libvirt GIT. Developers
|
||||
only follow GIT and don't care much about released versions.
|
||||
|
||||
(5) Run the automated tests on your code before submitting any changes.
|
||||
In particular, configure with compile warnings set to -Werror:
|
||||
|
||||
./configure --enable-compile-warnings=error
|
||||
|
||||
and run the tests:
|
||||
|
||||
make check
|
||||
make syntax-check
|
||||
make -C tests valgrind
|
||||
|
||||
The latter test checks for memory leaks.
|
||||
|
||||
If you encounter any failing tests, the VIR_TEST_DEBUG environment variable
|
||||
may provide extra information to debug the failures. Larger values of
|
||||
VIR_TEST_DEBUG may provide larger amounts of information:
|
||||
|
||||
VIR_TEST_DEBUG=1 make check (or)
|
||||
VIR_TEST_DEBUG=2 make check
|
||||
|
||||
Also, individual tests can be run from inside the 'tests/' directory, like:
|
||||
|
||||
./qemuxml2xmltest
|
||||
|
||||
(6) Update tests and/or documentation, particularly if you are adding
|
||||
a new feature or changing the output of a program.
|
||||
|
||||
|
||||
There is more on this subject, including lots of links to background
|
||||
reading on the subject, on this page:
|
||||
|
||||
http://et.redhat.com/~rjones/how-to-supply-code-to-open-source-projects/
|
||||
|
||||
|
||||
|
||||
Code indentation
|
||||
================
|
||||
Libvirt's C source code generally adheres to some basic code-formatting
|
||||
conventions. The existing code base is not totally consistent on this
|
||||
front, but we do prefer that contributed code be formatted similarly.
|
||||
In short, use spaces-not-TABs for indentation, use 4 spaces for each
|
||||
indentation level, and other than that, follow the K&R style.
|
||||
|
||||
If you use Emacs, add the following to one of one of your start-up files
|
||||
(e.g., ~/.emacs), to help ensure that you get indentation right:
|
||||
|
||||
;;; When editing C sources in libvirt, use this style.
|
||||
(defun libvirt-c-mode ()
|
||||
"C mode with adjusted defaults for use with libvirt."
|
||||
(interactive)
|
||||
(c-set-style "K&R")
|
||||
(setq indent-tabs-mode nil) ; indent using spaces, not TABs
|
||||
(setq c-indent-level 4)
|
||||
(setq c-basic-offset 4))
|
||||
(add-hook 'c-mode-hook
|
||||
'(lambda () (if (string-match "/libvirt" (buffer-file-name))
|
||||
(libvirt-c-mode))))
|
||||
|
||||
Code formatting (especially for new code)
|
||||
=========================================
|
||||
With new code, we can be even more strict.
|
||||
Please apply the following function (using GNU indent) to any new code.
|
||||
Note that this also gives you an idea of the type of spacing we prefer
|
||||
around operators and keywords:
|
||||
|
||||
indent-libvirt()
|
||||
{
|
||||
indent -bad -bap -bbb -bli4 -br -ce -brs -cs -i4 -l75 -lc75 \
|
||||
-sbi4 -psl -saf -sai -saw -sbi4 -ss -sc -cdw -cli4 -npcs -nbc \
|
||||
--no-tabs "$@"
|
||||
}
|
||||
|
||||
Note that sometimes you'll have to post-process that output further, by
|
||||
piping it through "expand -i", since some leading TABs can get through.
|
||||
Usually they're in macro definitions or strings, and should be converted
|
||||
anyhow.
|
||||
|
||||
|
||||
Curly braces
|
||||
============
|
||||
Omit the curly braces around an "if", "while", "for" etc. body only when that
|
||||
body occupies a single line. In every other case we require the braces. This
|
||||
ensures that it is trivially easy to identify a single-*statement* loop: each
|
||||
has only one *line* in its body.
|
||||
|
||||
Omitting braces with a single-line body is fine:
|
||||
|
||||
while (expr) // one-line body -> omitting curly braces is ok
|
||||
single_line_stmt ();
|
||||
|
||||
However, the moment your loop/if/else body extends onto a second line, for
|
||||
whatever reason (even if it's just an added comment), then you should add
|
||||
braces. Otherwise, it would be too easy to insert a statement just before that
|
||||
comment (without adding braces), thinking it is already a multi-statement
|
||||
loop:
|
||||
|
||||
while (true) // BAD! multi-line body with no braces
|
||||
/* comment... */
|
||||
single_line_stmt ();
|
||||
|
||||
Do this instead:
|
||||
|
||||
while (true) { // Always put braces around a multi-line body.
|
||||
/* comment... */
|
||||
single_line_stmt ();
|
||||
}
|
||||
|
||||
There is one exception: when the second body line is not at the same
|
||||
indentation level as the first body line:
|
||||
|
||||
if (expr)
|
||||
die ("a diagnostic that would make this line"
|
||||
" extend past the 80-column limit"));
|
||||
|
||||
It is safe to omit the braces in the code above, since the further-indented
|
||||
second body line makes it obvious that this is still a single-statement body.
|
||||
|
||||
|
||||
To reiterate, don't do this:
|
||||
|
||||
if (expr) // BAD: no braces around...
|
||||
while (expr_2) { // ... a multi-line body
|
||||
...
|
||||
}
|
||||
|
||||
Do this, instead:
|
||||
|
||||
if (expr) {
|
||||
while (expr_2) {
|
||||
...
|
||||
}
|
||||
}
|
||||
|
||||
However, there is one exception in the other direction, when even a one-line
|
||||
block should have braces. That occurs when that one-line, brace-less block is
|
||||
an "else" block, and the corresponding "then" block *does* use braces. In that
|
||||
case, either put braces around the "else" block, or negate the "if"-condition
|
||||
and swap the bodies, putting the one-line block first and making the longer,
|
||||
multi-line block be the "else" block.
|
||||
|
||||
if (expr) {
|
||||
...
|
||||
...
|
||||
}
|
||||
else
|
||||
x = y; // BAD: braceless "else" with braced "then"
|
||||
|
||||
This is preferred, especially when the multi-line body is more than a few
|
||||
lines long, because it is easier to read and grasp the semantics of an if-
|
||||
then-else block when the simpler block occurs first, rather than after the
|
||||
more involved block:
|
||||
|
||||
if (!expr)
|
||||
x = y; // putting the smaller block first is more readable
|
||||
else {
|
||||
...
|
||||
...
|
||||
}
|
||||
|
||||
If you'd rather not negate the condition, then at least add braces:
|
||||
|
||||
if (expr) {
|
||||
...
|
||||
...
|
||||
} else {
|
||||
x = y;
|
||||
}
|
||||
|
||||
|
||||
Preprocessor
|
||||
============
|
||||
For variadic macros, stick with C99 syntax:
|
||||
|
||||
#define vshPrint(_ctl, ...) fprintf(stdout, __VA_ARGS__)
|
||||
|
||||
Use parenthesis when checking if a macro is defined, and use
|
||||
indentation to track nesting:
|
||||
|
||||
#if defined(HAVE_POSIX_FALLOCATE) && !defined(HAVE_FALLOCATE)
|
||||
# define fallocate(a,ignored,b,c) posix_fallocate(a,b,c)
|
||||
#endif
|
||||
|
||||
|
||||
C types
|
||||
=======
|
||||
Use the right type.
|
||||
|
||||
Scalars
|
||||
-------
|
||||
If you're using "int" or "long", odds are good that there's a better type.
|
||||
If a variable is counting something, be sure to declare it with an
|
||||
unsigned type.
|
||||
If it's memory-size-related, use size_t (use ssize_t only if required).
|
||||
If it's file-size related, use uintmax_t, or maybe off_t.
|
||||
If it's file-offset related (i.e., signed), use off_t.
|
||||
If it's just counting small numbers use "unsigned int";
|
||||
(on all but oddball embedded systems, you can assume that that
|
||||
type is at least four bytes wide).
|
||||
If a variable has boolean semantics, give it the "bool" type
|
||||
and use the corresponding "true" and "false" macros. It's ok
|
||||
to include <stdbool.h>, since libvirt's use of gnulib ensures
|
||||
that it exists and is usable.
|
||||
In the unusual event that you require a specific width, use a
|
||||
standard type like int32_t, uint32_t, uint64_t, etc.
|
||||
|
||||
While using "bool" is good for readability, it comes with minor caveats:
|
||||
- Don't use "bool" in places where the type size must be constant across
|
||||
all systems, like public interfaces and on-the-wire protocols. Note
|
||||
that it would be possible (albeit wasteful) to use "bool" in libvirt's
|
||||
logical wire protocol, since XDR maps that to its lower-level bool_t
|
||||
type, which *is* fixed-size.
|
||||
- Don't compare a bool variable against the literal, "true",
|
||||
since a value with a logical non-false value need not be "1".
|
||||
I.e., don't write "if (seen == true) ...". Rather, write "if (seen)...".
|
||||
|
||||
Of course, take all of the above with a grain of salt. If you're about
|
||||
to use some system interface that requires a type like size_t, pid_t or
|
||||
off_t, use matching types for any corresponding variables.
|
||||
|
||||
Also, if you try to use e.g., "unsigned int" as a type, and that
|
||||
conflicts with the signedness of a related variable, sometimes
|
||||
it's best just to use the *wrong* type, if "pulling the thread"
|
||||
and fixing all related variables would be too invasive.
|
||||
|
||||
Finally, while using descriptive types is important, be careful not to
|
||||
go overboard. If whatever you're doing causes warnings, or requires
|
||||
casts, then reconsider or ask for help.
|
||||
|
||||
Pointers
|
||||
--------
|
||||
Ensure that all of your pointers are "const-correct".
|
||||
Unless a pointer is used to modify the pointed-to storage,
|
||||
give it the "const" attribute. That way, the reader knows
|
||||
up-front that this is a read-only pointer. Perhaps more
|
||||
importantly, if we're diligent about this, when you see a non-const
|
||||
pointer, you're guaranteed that it is used to modify the storage
|
||||
it points to, or it is aliased to another pointer that is.
|
||||
|
||||
|
||||
Low level memory management
|
||||
===========================
|
||||
|
||||
Use of the malloc/free/realloc/calloc APIs is deprecated in the libvirt
|
||||
codebase, because they encourage a number of serious coding bugs and do
|
||||
not enable compile time verification of checks for NULL. Instead of these
|
||||
routines, use the macros from memory.h
|
||||
|
||||
- eg to allocate a single object:
|
||||
|
||||
virDomainPtr domain;
|
||||
|
||||
if (VIR_ALLOC(domain) < 0) {
|
||||
virReportOOMError();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
- eg to allocate an array of objects
|
||||
|
||||
virDomainPtr domains;
|
||||
int ndomains = 10;
|
||||
|
||||
if (VIR_ALLOC_N(domains, ndomains) < 0) {
|
||||
virReportOOMError();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- eg to allocate an array of object pointers
|
||||
|
||||
virDomainPtr *domains;
|
||||
int ndomains = 10;
|
||||
|
||||
if (VIR_ALLOC_N(domains, ndomains) < 0) {
|
||||
virReportOOMError();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- eg to re-allocate the array of domains to be longer
|
||||
|
||||
ndomains = 20
|
||||
|
||||
if (VIR_REALLOC_N(domains, ndomains) < 0) {
|
||||
virReportOOMError();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- eg to free the domain
|
||||
|
||||
VIR_FREE(domain);
|
||||
|
||||
|
||||
|
||||
String comparisons
|
||||
==================
|
||||
|
||||
Do not use the strcmp, strncmp, etc functions directly. Instead use
|
||||
one of the following semantically named macros
|
||||
|
||||
- For strict equality:
|
||||
|
||||
STREQ(a,b)
|
||||
STRNEQ(a,b)
|
||||
|
||||
- For case insensitive equality:
|
||||
STRCASEEQ(a,b)
|
||||
STRCASENEQ(a,b)
|
||||
|
||||
- For strict equality of a substring:
|
||||
|
||||
STREQLEN(a,b,n)
|
||||
STRNEQLEN(a,b,n)
|
||||
|
||||
- For case insensitive equality of a substring:
|
||||
|
||||
STRCASEEQLEN(a,b,n)
|
||||
STRCASENEQLEN(a,b,n)
|
||||
|
||||
- For strict equality of a prefix:
|
||||
|
||||
STRPREFIX(a,b)
|
||||
|
||||
|
||||
|
||||
String copying
|
||||
==============
|
||||
|
||||
Do not use the strncpy function. According to the man page, it does
|
||||
*not* guarantee a NULL-terminated buffer, which makes it extremely dangerous
|
||||
to use. Instead, use one of the functionally equivalent functions:
|
||||
|
||||
- virStrncpy(char *dest, const char *src, size_t n, size_t destbytes)
|
||||
The first three arguments have the same meaning as for strncpy; namely the
|
||||
destination, source, and number of bytes to copy, respectively. The last
|
||||
argument is the number of bytes available in the destination string; if a
|
||||
copy of the source string (including a \0) will not fit into the
|
||||
destination, no bytes are copied and the routine returns NULL.
|
||||
Otherwise, n bytes from the source are copied into the destination and a
|
||||
trailing \0 is appended.
|
||||
|
||||
- virStrcpy(char *dest, const char *src, size_t destbytes)
|
||||
Use this variant if you know you want to copy the entire src string
|
||||
into dest. Note that this is a macro, so arguments could be
|
||||
evaluated more than once. This is equivalent to
|
||||
virStrncpy(dest, src, strlen(src), destbytes)
|
||||
|
||||
- virStrcpyStatic(char *dest, const char *src)
|
||||
Use this variant if you know you want to copy the entire src string
|
||||
into dest *and* you know that your destination string is a static string
|
||||
(i.e. that sizeof(dest) returns something meaningful). Note that
|
||||
this is a macro, so arguments could be evaluated more than once. This is
|
||||
equivalent to virStrncpy(dest, src, strlen(src), sizeof(dest)).
|
||||
|
||||
|
||||
|
||||
Variable length string buffer
|
||||
=============================
|
||||
|
||||
If there is a need for complex string concatenations, avoid using
|
||||
the usual sequence of malloc/strcpy/strcat/snprintf functions and
|
||||
make use of the virBuffer API described in buf.h
|
||||
|
||||
eg typical usage is as follows:
|
||||
|
||||
char *
|
||||
somefunction(...) {
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
...
|
||||
|
||||
virBufferAddLit(&buf, "<domain>\n");
|
||||
virBufferVSprint(&buf, " <memory>%d</memory>\n", memory);
|
||||
...
|
||||
virBufferAddLit(&buf, "</domain>\n");
|
||||
|
||||
...
|
||||
|
||||
if (virBufferError(&buf)) {
|
||||
virBufferFreeAndReset(&buf);
|
||||
virReportOOMError();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return virBufferContentAndReset(&buf);
|
||||
}
|
||||
|
||||
|
||||
Include files
|
||||
=============
|
||||
|
||||
There are now quite a large number of include files, both libvirt
|
||||
internal and external, and system includes. To manage all this
|
||||
complexity it's best to stick to the following general plan for all
|
||||
*.c source files:
|
||||
|
||||
/*
|
||||
* Copyright notice
|
||||
* ....
|
||||
* ....
|
||||
* ....
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h> Must come first in every file.
|
||||
|
||||
#include <stdio.h> Any system includes you need.
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
#if HAVE_NUMACTL Some system includes aren't supported
|
||||
# include <numa.h> everywhere so need these #if guards.
|
||||
#endif
|
||||
|
||||
#include "internal.h" Include this first, after system includes.
|
||||
|
||||
#include "util.h" Any libvirt internal header files.
|
||||
#include "buf.h"
|
||||
|
||||
static myInternalFunc () The actual code.
|
||||
{
|
||||
...
|
||||
|
||||
Of particular note: *DO NOT* include libvirt/libvirt.h or
|
||||
libvirt/virterror.h. It is included by "internal.h" already and there
|
||||
are some special reasons why you cannot include these files
|
||||
explicitly.
|
||||
|
||||
|
||||
Printf-style functions
|
||||
======================
|
||||
|
||||
Whenever you add a new printf-style function, i.e., one with a format
|
||||
string argument and following "..." in its prototype, be sure to use
|
||||
gcc's printf attribute directive in the prototype. For example, here's
|
||||
the one for virAsprintf, in util.h:
|
||||
|
||||
int virAsprintf(char **strp, const char *fmt, ...)
|
||||
ATTRIBUTE_FMT_PRINTF(2, 3);
|
||||
|
||||
This makes it so gcc's -Wformat and -Wformat-security options can do
|
||||
their jobs and cross-check format strings with the number and types
|
||||
of arguments.
|
||||
|
||||
|
||||
|
||||
Libvirt committer guidelines
|
||||
============================
|
||||
|
||||
The AUTHORS files indicates the list of people with commit access right
|
||||
who can actually merge the patches.
|
||||
|
||||
The general rule for committing a patch is to make sure it has been reviewed
|
||||
properly in the mailing-list first, usually if a couple of people gave an
|
||||
ACK or +1 to a patch and nobody raised an objection on the list it should
|
||||
be good to go. If the patch touches a part of the code where you're not the
|
||||
main maintainer or not have a very clear idea of how things work, it's better
|
||||
to wait for a more authoritative feedback though. Before committing please
|
||||
also rebuild locally and run 'make check syntax-check' and make sure they
|
||||
don't raise error. Try to look for warnings too for example configure with
|
||||
--enable-compile-warnings=error
|
||||
which adds -Werror to compile flags, so no warnings get missed
|
||||
|
||||
Exceptions to that 'review and approval on the list first' is fixing failures
|
||||
to build:
|
||||
- if a recently committed patch breaks compilation on a platform
|
||||
or for a given driver then it's fine to commit a minimal fix
|
||||
directly without getting the review feedback first
|
||||
- similarly, if make check or make syntax-check breaks, if there is
|
||||
an obvious fix, it's fine to commit immediately
|
||||
The patch should still be sent to the list (or tell what the fix was if
|
||||
trivial) and 'make check syntax-check' should pass too before committing
|
||||
anything
|
||||
Similar fixes for documentation and code comments can be managed
|
||||
in the same way, but still make sure they get reviewed if non-trivial.
|
||||
91
Makefile.am
91
Makefile.am
@ -1,13 +1,96 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
SUBDIRS = src include docs @PYTHON_SUBDIR@
|
||||
LCOV = lcov
|
||||
GENHTML = genhtml
|
||||
|
||||
EXTRA_DIST = libvirt.spec.in libvirt.spec COPYING.LIB \
|
||||
libvirt.pc.in libvirt.pc TODO AUTHORS ChangeLog \
|
||||
NEWS README
|
||||
SUBDIRS = gnulib/lib include src daemon tools proxy docs gnulib/tests \
|
||||
python tests po examples/domain-events/events-c examples/hellolibvirt \
|
||||
examples/dominfo examples/domsuspend examples/python examples/apparmor \
|
||||
examples/xml/nwfilter
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4 -I gnulib/m4
|
||||
|
||||
XML_EXAMPLES = \
|
||||
$(patsubst $(srcdir)/%,%,$(wildcard $(addprefix $(srcdir)/examples/xml/, \
|
||||
test/*.xml storage/*.xml)))
|
||||
|
||||
EXTRA_DIST = \
|
||||
ChangeLog-old \
|
||||
libvirt.spec libvirt.spec.in \
|
||||
mingw32-libvirt.spec.in \
|
||||
libvirt.pc libvirt.pc.in \
|
||||
autobuild.sh \
|
||||
.x-sc_avoid_ctype_macros \
|
||||
.x-sc_avoid_if_before_free \
|
||||
.x-sc_avoid_write \
|
||||
.x-sc_m4_quote_check \
|
||||
.x-sc_prohibit_asprintf \
|
||||
.x-sc_prohibit_gethostby \
|
||||
.x-sc_prohibit_gethostname \
|
||||
.x-sc_prohibit_gettext_noop \
|
||||
.x-sc_prohibit_have_config_h \
|
||||
.x-sc_prohibit_HAVE_MBRTOWC \
|
||||
.x-sc_prohibit_nonreentrant \
|
||||
.x-sc_prohibit_strcmp \
|
||||
.x-sc_prohibit_strcmp_and_strncmp \
|
||||
.x-sc_prohibit_strncpy \
|
||||
.x-sc_prohibit_test_minus_ao \
|
||||
.x-sc_prohibit_VIR_ERR_NO_MEMORY \
|
||||
.x-sc_require_config_h \
|
||||
.x-sc_require_config_h_first \
|
||||
.x-sc_trailing_blank \
|
||||
Makefile.nonreentrant \
|
||||
autogen.sh \
|
||||
examples/domain-events/events-python \
|
||||
$(XML_EXAMPLES)
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libvirt.pc
|
||||
|
||||
NEWS: $(top_srcdir)/docs/news.xsl $(top_srcdir)/docs/news.html.in
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
$(XSLTPROC) --nonet $(top_srcdir)/docs/news.xsl \
|
||||
$(top_srcdir)/docs/news.html.in \
|
||||
| perl -0777 -pe 's/\n\n+$$/\n/' \
|
||||
| perl -pe 's/[ \t]+$$//' \
|
||||
> $@-t && mv $@-t $@ ; fi );
|
||||
|
||||
|
||||
rpm: clean
|
||||
@(unset CDPATH ; $(MAKE) dist && rpmbuild -ta $(distdir).tar.gz)
|
||||
|
||||
check-local: all tests
|
||||
|
||||
tests:
|
||||
@(cd docs/examples ; $(MAKE) MAKEFLAGS+=--silent tests)
|
||||
@(if [ "$(pythondir)" != "" ] ; then cd python ; \
|
||||
$(MAKE) MAKEFLAGS+=--silent tests ; fi)
|
||||
|
||||
cov: clean-cov
|
||||
mkdir $(top_builddir)/coverage
|
||||
$(LCOV) -c -o $(top_builddir)/coverage/libvirt.info.tmp -d $(top_srcdir)/src -d $(top_srcdir)/daemon -d $(top_srcdir)/tests
|
||||
$(LCOV) -r $(top_builddir)/coverage/libvirt.info.tmp -o $(top_builddir)/coverage/libvirt.info *usr*
|
||||
rm $(top_builddir)/coverage/libvirt.info.tmp
|
||||
$(GENHTML) -s -t "libvirt" -o $(top_builddir)/coverage --legend $(top_builddir)/coverage/libvirt.info
|
||||
|
||||
clean-cov:
|
||||
rm -rf $(top_builddir)/coverage
|
||||
|
||||
MAINTAINERCLEANFILES = .git-module-status
|
||||
|
||||
# disable this check
|
||||
distuninstallcheck:
|
||||
|
||||
dist-hook: gen-ChangeLog
|
||||
|
||||
# Generate the ChangeLog file (with all entries since the switch to git)
|
||||
# and insert it into the directory we're about to use to create a tarball.
|
||||
gen_start_date = 2009-07-04
|
||||
.PHONY: gen-ChangeLog
|
||||
gen-ChangeLog:
|
||||
if test -d .git; then \
|
||||
$(top_srcdir)/build-aux/gitlog-to-changelog \
|
||||
--since=$(gen_start_date) > $(distdir)/cl-t; \
|
||||
rm -f $(distdir)/ChangeLog; \
|
||||
mv $(distdir)/cl-t $(distdir)/ChangeLog; \
|
||||
fi
|
||||
|
||||
85
Makefile.nonreentrant
Normal file
85
Makefile.nonreentrant
Normal file
@ -0,0 +1,85 @@
|
||||
|
||||
#
|
||||
# Generated by running the following on Fedora 9:
|
||||
#
|
||||
# nm -D --defined-only /lib/libc.so.6 \
|
||||
# | grep '_r$' \
|
||||
# | awk '{print $3}' \
|
||||
# | grep -v __ \
|
||||
# | grep -v qsort \ # Red herring since we don't need to pass extra args to qsort comparator
|
||||
# | grep -v readdir \ # This is safe as long as each DIR * instance is only used by one thread
|
||||
# | sort \
|
||||
# | uniq \
|
||||
# | sed -e 's/_r//'
|
||||
#
|
||||
|
||||
NON_REENTRANT =
|
||||
NON_REENTRANT += asctime
|
||||
NON_REENTRANT += ctime
|
||||
NON_REENTRANT += drand48
|
||||
NON_REENTRANT += ecvt
|
||||
NON_REENTRANT += erand48
|
||||
NON_REENTRANT += ether_aton
|
||||
NON_REENTRANT += ether_ntoa
|
||||
NON_REENTRANT += fcvt
|
||||
NON_REENTRANT += fgetgrent
|
||||
NON_REENTRANT += fgetpwent
|
||||
NON_REENTRANT += fgetspent
|
||||
NON_REENTRANT += getaliasbyname
|
||||
NON_REENTRANT += getaliasent
|
||||
NON_REENTRANT += getdate
|
||||
NON_REENTRANT += getgrent
|
||||
NON_REENTRANT += getgrgid
|
||||
NON_REENTRANT += getgrnam
|
||||
NON_REENTRANT += gethostbyaddr
|
||||
NON_REENTRANT += gethostbyname2
|
||||
NON_REENTRANT += gethostbyname
|
||||
NON_REENTRANT += gethostent
|
||||
NON_REENTRANT += getlogin
|
||||
NON_REENTRANT += getmntent
|
||||
NON_REENTRANT += getnetbyaddr
|
||||
NON_REENTRANT += getnetbyname
|
||||
NON_REENTRANT += getnetent
|
||||
NON_REENTRANT += getnetgrent
|
||||
NON_REENTRANT += getprotobyname
|
||||
NON_REENTRANT += getprotobynumber
|
||||
NON_REENTRANT += getprotoent
|
||||
NON_REENTRANT += getpwent
|
||||
NON_REENTRANT += getpwnam
|
||||
NON_REENTRANT += getpwuid
|
||||
NON_REENTRANT += getrpcbyname
|
||||
NON_REENTRANT += getrpcbynumber
|
||||
NON_REENTRANT += getrpcent
|
||||
NON_REENTRANT += getservbyname
|
||||
NON_REENTRANT += getservbyport
|
||||
NON_REENTRANT += getservent
|
||||
NON_REENTRANT += getspent
|
||||
NON_REENTRANT += getspnam
|
||||
NON_REENTRANT += getutent
|
||||
NON_REENTRANT += getutid
|
||||
NON_REENTRANT += getutline
|
||||
NON_REENTRANT += gmtime
|
||||
NON_REENTRANT += hcreate
|
||||
NON_REENTRANT += hdestroy
|
||||
NON_REENTRANT += hsearch
|
||||
NON_REENTRANT += initstate
|
||||
NON_REENTRANT += jrand48
|
||||
NON_REENTRANT += lcong48
|
||||
NON_REENTRANT += localtime
|
||||
NON_REENTRANT += lrand48
|
||||
NON_REENTRANT += mrand48
|
||||
NON_REENTRANT += nrand48
|
||||
NON_REENTRANT += ptsname
|
||||
NON_REENTRANT += qecvt
|
||||
NON_REENTRANT += qfcvt
|
||||
NON_REENTRANT += random
|
||||
NON_REENTRANT += rand
|
||||
NON_REENTRANT += seed48
|
||||
NON_REENTRANT += setstate
|
||||
NON_REENTRANT += sgetspent
|
||||
NON_REENTRANT += srand48
|
||||
NON_REENTRANT += srandom
|
||||
NON_REENTRANT += strerror
|
||||
NON_REENTRANT += strtok
|
||||
NON_REENTRANT += tmpnam
|
||||
NON_REENTRANT += ttyname
|
||||
22
NEWS
22
NEWS
@ -1,22 +0,0 @@
|
||||
|
||||
NEWS file for libvirt
|
||||
|
||||
Note that this is automatically generated from the news webpage at:
|
||||
http://libvirt.org/news.html
|
||||
|
||||
Releases
|
||||
0.0.2: Jan 29 2006:
|
||||
- Update of the documentation, web site redesign (Diana Fong)
|
||||
- integration of HTTP xend RPC based on libxend by Anthony Liquori for
|
||||
most operations
|
||||
- Adding Save and Restore APIs
|
||||
- extended the virsh command line tool (Karel Zak)
|
||||
- remove xenstore transactions (Anthony Liguori)
|
||||
- fix the Python bindings bug when domain and connections where freed
|
||||
|
||||
|
||||
0.0.1: Dec 19 2005:
|
||||
- First release
|
||||
- Basic management of existing Xen domains
|
||||
- Minimal autogenerated Python bindings
|
||||
|
||||
4
README
4
README
@ -1,11 +1,11 @@
|
||||
|
||||
LibVirt : simple API for virtualization
|
||||
|
||||
Libvir is a C toolkit to interract with the virtualization capabilities
|
||||
Libvirt is a C toolkit to interact with the virtualization capabilities
|
||||
of recent versions of Linux (and other OSes). It is free software
|
||||
available under the GNU Lesser General Public License. Virtualization of
|
||||
the Linux Operating System means the ability to run multiple instances of
|
||||
Operating Systems concurently on a single hardware system where the basic
|
||||
Operating Systems concurrently on a single hardware system where the basic
|
||||
resources are driven by a Linux instance. The library aim at providing
|
||||
long term stable C API initially for the Xen paravirtualization but
|
||||
should be able to integrate other virtualization mechanisms if needed.
|
||||
|
||||
57
README-hacking
Normal file
57
README-hacking
Normal file
@ -0,0 +1,57 @@
|
||||
-*- outline -*-
|
||||
|
||||
These notes intend to help people working on the checked-out sources.
|
||||
These requirements do not apply when building from a distribution tarball.
|
||||
See also HACKING for more detailed libvirt contribution guidelines.
|
||||
|
||||
* Requirements
|
||||
|
||||
We've opted to keep only the highest-level sources in the GIT repository.
|
||||
This eases our maintenance burden, (fewer merges etc.), but imposes more
|
||||
requirements on anyone wishing to build from the just-checked-out sources.
|
||||
Note the requirements to build the released archive are much less and
|
||||
are just the requirements of the standard ./configure && make procedure.
|
||||
Specific development tools and versions will be checked for and listed by
|
||||
the bootstrap script.
|
||||
|
||||
Valgrind <http://valgrind.org/> is also highly recommended, if
|
||||
Valgrind supports your architecture. See also README-valgrind.
|
||||
|
||||
While building from a just-cloned source tree may require installing a
|
||||
few prerequisites, later, a plain `git pull && make' should be sufficient.
|
||||
|
||||
* First GIT checkout
|
||||
|
||||
You can get a copy of the source repository like this:
|
||||
|
||||
$ git clone git://libvirt.org/libvirt
|
||||
$ cd libvirt
|
||||
|
||||
As an optional step, if you already have a copy of the gnulib git
|
||||
repository on your hard drive, then you can use it as a reference to
|
||||
reduce download time and disk space requirements:
|
||||
|
||||
$ export GNULIB_SRCDIR=/path/to/gnulib
|
||||
|
||||
The next step is to get all required pieces from gnulib,
|
||||
to run autoreconf, and to invoke ./configure:
|
||||
|
||||
$ ./autogen.sh
|
||||
|
||||
And there you are! Just
|
||||
|
||||
$ make
|
||||
$ make check
|
||||
|
||||
At this point, there should be no difference between your local copy,
|
||||
and the GIT master copy:
|
||||
|
||||
$ git diff
|
||||
|
||||
should output no difference.
|
||||
|
||||
Enjoy!
|
||||
|
||||
Local Variables:
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
35
TODO
35
TODO
@ -1,14 +1,13 @@
|
||||
Absolute TODOs:
|
||||
- Create() API, how do we best keep flexibility and allow various
|
||||
specific environment and space for evolution (VMX)
|
||||
- thread protection, reentrancy, refcounting, etc ...
|
||||
- documentation and examples on using the toolkit
|
||||
- Error API. probably similar to libxml2 structured API
|
||||
|
||||
TODO:
|
||||
- track change of xend API, XML-RPC, UUID based lookup and naming
|
||||
- API for the Node: extracting informations, selecting scheduling policy
|
||||
- better resources allocation APIs (%CPU, set memory)
|
||||
- libvirt_virDomainSetMemory should check memory is > 0
|
||||
- check how to better handle renaming of domains (xm rename and cache)
|
||||
|
||||
- UUID lookup in hash.c
|
||||
|
||||
Other environment:
|
||||
- support for UML
|
||||
|
||||
+ UML control layer should be easy at least for one user but incomplete
|
||||
|
||||
Probable TODOs:
|
||||
- event on big domain state change (create, crashed, paused, shutdown, destroy)
|
||||
@ -16,9 +15,15 @@ Probable TODOs:
|
||||
|
||||
Would-be-nice TODO:
|
||||
- man page for virsh and the libraries entry points
|
||||
- support for QEmu and other virtualization engines
|
||||
- more documentation and examples on using the toolkit
|
||||
- examples for the error handling code
|
||||
|
||||
Done:
|
||||
- make dist and make rpm targets
|
||||
- set a no public by default policy for libvir symbols
|
||||
- fix the python bindings
|
||||
Cleanup:
|
||||
- now that libxml2 is linked in, drop hash.[ch] and get back to libxml2 ones ?
|
||||
same for the buffers
|
||||
|
||||
Autoconf:
|
||||
- On Debian and other platforms, C++ compiler is required because
|
||||
autoconf macros to detect libtool depend on it. (This is probably
|
||||
an autoconf or libtool m4 macro bug, and the fact that it happens
|
||||
on Debian is a red herring).
|
||||
|
||||
115
acinclude.m4
Normal file
115
acinclude.m4
Normal file
@ -0,0 +1,115 @@
|
||||
dnl
|
||||
dnl Taken from gnome-common/macros2/gnome-compiler-flags.m4
|
||||
dnl
|
||||
dnl We've added:
|
||||
dnl -Wextra -Wshadow -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Winline -Wredundant-decls
|
||||
dnl We've removed
|
||||
dnl CFLAGS="$realsave_CFLAGS"
|
||||
dnl to avoid clobbering user-specified CFLAGS
|
||||
dnl
|
||||
AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
|
||||
dnl ******************************
|
||||
dnl More compiler warnings
|
||||
dnl ******************************
|
||||
|
||||
AC_ARG_ENABLE(compile-warnings,
|
||||
[AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],
|
||||
[Turn on compiler warnings])],,
|
||||
[enable_compile_warnings="m4_default([$1],[maximum])"])
|
||||
|
||||
warnCFLAGS=
|
||||
|
||||
common_flags=
|
||||
common_flags="$common_flags -Wp,-D_FORTIFY_SOURCE=2"
|
||||
common_flags="$common_flags -fexceptions"
|
||||
common_flags="$common_flags -fasynchronous-unwind-tables"
|
||||
common_flags="$common_flags -fdiagnostics-show-option"
|
||||
|
||||
case "$enable_compile_warnings" in
|
||||
no)
|
||||
try_compiler_flags=""
|
||||
;;
|
||||
minimum)
|
||||
try_compiler_flags="-Wall -Wformat -Wformat-security $common_flags"
|
||||
;;
|
||||
yes)
|
||||
try_compiler_flags="-Wall -Wformat -Wformat-security -Wmissing-prototypes $common_flags"
|
||||
;;
|
||||
maximum|error)
|
||||
try_compiler_flags="-Wall -Wformat -Wformat-security -Wmissing-prototypes -Wnested-externs -Wpointer-arith"
|
||||
try_compiler_flags="$try_compiler_flags -Wextra -Wshadow -Wcast-align -Wwrite-strings -Waggregate-return"
|
||||
try_compiler_flags="$try_compiler_flags -Wstrict-prototypes -Winline -Wredundant-decls -Wno-sign-compare"
|
||||
try_compiler_flags="$try_compiler_flags $common_flags"
|
||||
if test "$enable_compile_warnings" = "error" ; then
|
||||
try_compiler_flags="$try_compiler_flags -Werror"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
|
||||
;;
|
||||
esac
|
||||
|
||||
COMPILER_FLAGS=
|
||||
for option in $try_compiler_flags; do
|
||||
gl_COMPILER_FLAGS($option)
|
||||
done
|
||||
unset option
|
||||
unset try_compiler_flags
|
||||
|
||||
AC_ARG_ENABLE(iso-c,
|
||||
AC_HELP_STRING([--enable-iso-c],
|
||||
[Try to warn if code is not ISO C ]),,
|
||||
[enable_iso_c=no])
|
||||
|
||||
AC_MSG_CHECKING(what language compliance flags to pass to the C compiler)
|
||||
complCFLAGS=
|
||||
if test "x$enable_iso_c" != "xno"; then
|
||||
if test "x$GCC" = "xyes"; then
|
||||
case " $CFLAGS " in
|
||||
*[\ \ ]-ansi[\ \ ]*) ;;
|
||||
*) complCFLAGS="$complCFLAGS -ansi" ;;
|
||||
esac
|
||||
case " $CFLAGS " in
|
||||
*[\ \ ]-pedantic[\ \ ]*) ;;
|
||||
*) complCFLAGS="$complCFLAGS -pedantic" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT($complCFLAGS)
|
||||
|
||||
WARN_CFLAGS="$COMPILER_FLAGS $complCFLAGS"
|
||||
WARN_LDFLAGS=$WARN_CFLAGS
|
||||
AC_SUBST([WARN_CFLAGS])
|
||||
AC_SUBST([WARN_LDFLAGS])
|
||||
|
||||
dnl Needed to keep compile quiet on python 2.4
|
||||
COMPILER_FLAGS=
|
||||
gl_COMPILER_FLAGS(-Wno-redundant-decls)
|
||||
WARN_PYTHON_CFLAGS=$COMPILER_FLAGS
|
||||
AC_SUBST(WARN_PYTHON_CFLAGS)
|
||||
])
|
||||
|
||||
|
||||
dnl
|
||||
dnl To support the old pkg-config from RHEL4 vintage, we need
|
||||
dnl to define the PKG_PROG_PKG_CONFIG macro if its not already
|
||||
dnl present
|
||||
m4_ifndef([PKG_PROG_PKG_CONFIG],
|
||||
[AC_DEFUN([PKG_PROG_PKG_CONFIG],
|
||||
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
|
||||
m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
|
||||
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
|
||||
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
|
||||
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
|
||||
fi
|
||||
if test -n "$PKG_CONFIG"; then
|
||||
_pkg_min_version=m4_default([$1], [0.9.0])
|
||||
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
PKG_CONFIG=""
|
||||
fi
|
||||
fi[]dnl
|
||||
])])
|
||||
102
autobuild.sh
Executable file
102
autobuild.sh
Executable file
@ -0,0 +1,102 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
set -v
|
||||
|
||||
# Make things clean.
|
||||
|
||||
test -n "$1" && RESULTS=$1 || RESULTS=results.log
|
||||
: ${AUTOBUILD_INSTALL_ROOT=$HOME/builder}
|
||||
|
||||
test -f Makefile && make -k distclean || :
|
||||
rm -rf coverage
|
||||
|
||||
#rm -rf build
|
||||
#mkdir build
|
||||
#cd build
|
||||
|
||||
./autogen.sh --prefix="$AUTOBUILD_INSTALL_ROOT" \
|
||||
--enable-test-coverage \
|
||||
--enable-compile-warnings=error \
|
||||
--with-xen-proxy
|
||||
|
||||
# If the MAKEFLAGS envvar does not yet include a -j option,
|
||||
# add -jN where N depends on the number of processors.
|
||||
case $MAKEFLAGS in
|
||||
*-j*) ;;
|
||||
*) n=$(getconf _NPROCESSORS_ONLN 2> /dev/null)
|
||||
test "$n" -gt 0 || n=1
|
||||
n=$(expr $n + 1)
|
||||
MAKEFLAGS="$MAKEFLAGS -j$n"
|
||||
export MAKEFLAGS
|
||||
;;
|
||||
esac
|
||||
|
||||
make
|
||||
make install
|
||||
|
||||
# set -o pipefail is a bashism; this use of exec is the POSIX alternative
|
||||
exec 3>&1
|
||||
st=$(
|
||||
exec 4>&1 >&3
|
||||
{ make check syntax-check 2>&1; echo $? >&4; } | tee "$RESULTS"
|
||||
)
|
||||
exec 3>&-
|
||||
test $st = 0
|
||||
test -x /usr/bin/lcov && make cov
|
||||
|
||||
rm -f *.tar.gz
|
||||
make dist
|
||||
|
||||
if [ -n "$AUTOBUILD_COUNTER" ]; then
|
||||
EXTRA_RELEASE=".auto$AUTOBUILD_COUNTER"
|
||||
else
|
||||
NOW=`date +"%s"`
|
||||
EXTRA_RELEASE=".$USER$NOW"
|
||||
fi
|
||||
|
||||
if [ -f /usr/bin/rpmbuild ]; then
|
||||
rpmbuild --nodeps \
|
||||
--define "extra_release $EXTRA_RELEASE" \
|
||||
--define "_sourcedir `pwd`" \
|
||||
-ba --clean libvirt.spec
|
||||
fi
|
||||
|
||||
if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
|
||||
make distclean
|
||||
|
||||
PKG_CONFIG_PATH="$AUTOBUILD_INSTALL_ROOT/i686-pc-mingw32/sys-root/mingw/lib/pkgconfig" \
|
||||
CC="i686-pc-mingw32-gcc" \
|
||||
./configure \
|
||||
--build=$(uname -m)-pc-linux \
|
||||
--host=i686-pc-mingw32 \
|
||||
--prefix="$AUTOBUILD_INSTALL_ROOT/i686-pc-mingw32/sys-root/mingw" \
|
||||
--enable-compile-warnings=error \
|
||||
--without-sasl \
|
||||
--without-avahi \
|
||||
--without-polkit \
|
||||
--without-python \
|
||||
--without-xen \
|
||||
--without-qemu \
|
||||
--without-lxc \
|
||||
--without-uml \
|
||||
--without-vbox \
|
||||
--without-openvz \
|
||||
--without-one \
|
||||
--without-phyp \
|
||||
--without-netcf \
|
||||
--without-libvirtd
|
||||
|
||||
make
|
||||
make install
|
||||
|
||||
#set -o pipefail
|
||||
#make check 2>&1 | tee "$RESULTS"
|
||||
|
||||
if [ -f /usr/bin/rpmbuild ]; then
|
||||
rpmbuild --nodeps \
|
||||
--define "extra_release $EXTRA_RELEASE" \
|
||||
--define "_sourcedir `pwd`" \
|
||||
-ba --clean mingw32-libvirt.spec
|
||||
fi
|
||||
fi
|
||||
78
autogen.sh
78
autogen.sh
@ -1,16 +1,24 @@
|
||||
#!/bin/sh
|
||||
# Run this to generate all the initial makefiles, etc.
|
||||
|
||||
srcdir=`dirname $0`
|
||||
test -z "$srcdir" && srcdir=.
|
||||
srcdir=`dirname "$0"`
|
||||
test -z "$srcdir" && srcdir=.
|
||||
|
||||
THEDIR=`pwd`
|
||||
cd $srcdir
|
||||
cd "$srcdir"
|
||||
DIE=0
|
||||
|
||||
(autopoint --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have autopoint installed to compile libvirt."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or see http://www.gnu.org/software/gettext"
|
||||
DIE=1
|
||||
}
|
||||
|
||||
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have autoconf installed to compile libxen."
|
||||
echo "You must have autoconf installed to compile libvirt."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or see http://www.gnu.org/software/autoconf"
|
||||
DIE=1
|
||||
@ -18,7 +26,7 @@ DIE=0
|
||||
|
||||
(libtool --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have libtool installed to compile libxen."
|
||||
echo "You must have libtool installed to compile libvirt."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or see http://www.gnu.org/software/libtool"
|
||||
DIE=1
|
||||
@ -27,7 +35,7 @@ DIE=0
|
||||
(automake --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
DIE=1
|
||||
echo "You must have automake installed to compile libxen."
|
||||
echo "You must have automake installed to compile libvirt."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or see http://www.gnu.org/software/automake"
|
||||
}
|
||||
@ -36,29 +44,59 @@ if test "$DIE" -eq 1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test -f src/libvir.c || {
|
||||
echo "You must run this script in the top-level libxen directory"
|
||||
test -f src/libvirt.c || {
|
||||
echo "You must run this script in the top-level libvirt directory"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if test -z "$*"; then
|
||||
echo "I am going to run ./configure with no arguments - if you wish "
|
||||
|
||||
EXTRA_ARGS=
|
||||
if test "x$1" = "x--system"; then
|
||||
shift
|
||||
EXTRA_ARGS="--prefix=/usr --sysconfdir=/etc --localstatedir=/var"
|
||||
echo "Running ./configure with $EXTRA_ARGS $@"
|
||||
else
|
||||
if test -z "$*" && test ! -f "$THEDIR/config.status"; then
|
||||
echo "I am going to run ./configure with no arguments - if you wish "
|
||||
echo "to pass any to it, please specify them on the $0 command line."
|
||||
fi
|
||||
fi
|
||||
|
||||
libtoolize --copy --force
|
||||
aclocal $ACLOCAL_FLAGS
|
||||
automake --add-missing
|
||||
autoconf
|
||||
# Compute the hash we'll use to determine whether rerunning bootstrap
|
||||
# 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
|
||||
# by this package, we rerun bootstrap to pull in the matching set of files.
|
||||
bootstrap_hash()
|
||||
{
|
||||
git submodule status | sed 's/^[ +-]//;s/ .*//'
|
||||
git hash-object bootstrap.conf
|
||||
}
|
||||
|
||||
cd $THEDIR
|
||||
# Ensure that whenever we pull in a gnulib update or otherwise change to a
|
||||
# different version (i.e., when switching branches), we also rerun ./bootstrap.
|
||||
curr_status=.git-module-status
|
||||
t=$(bootstrap_hash; git diff .gnulib)
|
||||
if test "$t" = "$(cat $curr_status 2>/dev/null)"; then
|
||||
: # good, it's up to date, all we need is autoreconf
|
||||
autoreconf -if
|
||||
else
|
||||
echo running bootstrap...
|
||||
./bootstrap && bootstrap_hash > $curr_status \
|
||||
|| { echo "Failed to bootstrap gnulib, please investigate."; exit 1; }
|
||||
fi
|
||||
|
||||
if test x$OBJ_DIR != x; then
|
||||
cd "$THEDIR"
|
||||
|
||||
if test "x$OBJ_DIR" != x; then
|
||||
mkdir -p "$OBJ_DIR"
|
||||
cd "$OBJ_DIR"
|
||||
fi
|
||||
|
||||
$srcdir/configure "$@"
|
||||
|
||||
echo
|
||||
echo "Now type 'make' to compile libvir."
|
||||
if test -z "$*" && test -f config.status; then
|
||||
./config.status --recheck
|
||||
else
|
||||
$srcdir/configure $EXTRA_ARGS "$@"
|
||||
fi && {
|
||||
echo
|
||||
echo "Now type 'make' to compile libvirt."
|
||||
}
|
||||
|
||||
855
bootstrap
Executable file
855
bootstrap
Executable file
@ -0,0 +1,855 @@
|
||||
#! /bin/sh
|
||||
# Print a version string.
|
||||
scriptversion=2010-05-17.18; # UTC
|
||||
|
||||
# Bootstrap this package from checked-out sources.
|
||||
|
||||
# Copyright (C) 2003-2010 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Originally written by Paul Eggert. The canonical version of this
|
||||
# script is maintained as build-aux/bootstrap in gnulib, however, to
|
||||
# be useful to your project, you should place a copy of it under
|
||||
# version control in the top-level directory of your project. The
|
||||
# intent is that all customization can be done with a bootstrap.conf
|
||||
# file also maintained in your version control; gnulib comes with a
|
||||
# template build-aux/bootstrap.conf to get you started.
|
||||
|
||||
# Please report bugs or propose patches to bug-gnulib@gnu.org.
|
||||
|
||||
nl='
|
||||
'
|
||||
|
||||
# Ensure file names are sorted consistently across platforms.
|
||||
LC_ALL=C
|
||||
export LC_ALL
|
||||
|
||||
local_gl_dir=gl
|
||||
|
||||
# Temporary directory names.
|
||||
bt='._bootmp'
|
||||
bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
|
||||
bt2=${bt}2
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: $0 [OPTION]...
|
||||
Bootstrap this package from the checked-out sources.
|
||||
|
||||
Options:
|
||||
--gnulib-srcdir=DIRNAME Specify the local directory where gnulib
|
||||
sources reside. Use this if you already
|
||||
have gnulib sources on your machine, and
|
||||
do not want to waste your bandwidth downloading
|
||||
them again. Defaults to \$GNULIB_SRCDIR.
|
||||
--copy Copy files instead of creating symbolic links.
|
||||
--force Attempt to bootstrap even if the sources seem
|
||||
not to have been checked out.
|
||||
--skip-po Do not download po files.
|
||||
|
||||
If the file $0.conf exists in the same directory as this script, its
|
||||
contents are read as shell variables to configure the bootstrap.
|
||||
|
||||
For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
|
||||
are honored.
|
||||
|
||||
Running without arguments will suffice in most cases.
|
||||
EOF
|
||||
}
|
||||
|
||||
# Configuration.
|
||||
|
||||
# Name of the Makefile.am
|
||||
gnulib_mk=gnulib.mk
|
||||
|
||||
# List of gnulib modules needed.
|
||||
gnulib_modules=
|
||||
|
||||
# Any gnulib files needed that are not in modules.
|
||||
gnulib_files=
|
||||
|
||||
# A function to be called after everything else in this script.
|
||||
# Override it via your own definition in bootstrap.conf.
|
||||
bootstrap_epilogue() { :; }
|
||||
|
||||
# The command to download all .po files for a specified domain into
|
||||
# a specified directory. Fill in the first %s is the domain name, and
|
||||
# the second with the destination directory. Use rsync's -L and -r
|
||||
# options because the latest/%s directory and the .po files within are
|
||||
# all symlinks.
|
||||
po_download_command_format=\
|
||||
"rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
|
||||
|
||||
extract_package_name='
|
||||
/^AC_INIT(/{
|
||||
/.*,.*,.*, */{
|
||||
s///
|
||||
s/[][]//g
|
||||
s/)$//
|
||||
p
|
||||
q
|
||||
}
|
||||
s/AC_INIT(\[*//
|
||||
s/]*,.*//
|
||||
s/^GNU //
|
||||
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||||
s/[^A-Za-z0-9_]/-/g
|
||||
p
|
||||
}
|
||||
'
|
||||
package=`sed -n "$extract_package_name" configure.ac` || exit
|
||||
gnulib_name=lib$package
|
||||
|
||||
build_aux=build-aux
|
||||
source_base=lib
|
||||
m4_base=m4
|
||||
doc_base=doc
|
||||
tests_base=tests
|
||||
|
||||
# Extra files from gnulib, which override files from other sources.
|
||||
gnulib_extra_files="
|
||||
$build_aux/install-sh
|
||||
$build_aux/missing
|
||||
$build_aux/mdate-sh
|
||||
$build_aux/texinfo.tex
|
||||
$build_aux/depcomp
|
||||
$build_aux/config.guess
|
||||
$build_aux/config.sub
|
||||
doc/INSTALL
|
||||
"
|
||||
|
||||
# Additional gnulib-tool options to use. Use "\newline" to break lines.
|
||||
gnulib_tool_option_extras=
|
||||
|
||||
# Other locale categories that need message catalogs.
|
||||
EXTRA_LOCALE_CATEGORIES=
|
||||
|
||||
# Additional xgettext options to use. Use "\\\newline" to break lines.
|
||||
XGETTEXT_OPTIONS='\\\
|
||||
--flag=_:1:pass-c-format\\\
|
||||
--flag=N_:1:pass-c-format\\\
|
||||
--flag=error:3:c-format --flag=error_at_line:5:c-format\\\
|
||||
'
|
||||
|
||||
# Package bug report address and copyright holder for gettext files
|
||||
COPYRIGHT_HOLDER='Free Software Foundation, Inc.'
|
||||
MSGID_BUGS_ADDRESS=bug-$package@gnu.org
|
||||
|
||||
# Files we don't want to import.
|
||||
excluded_files=
|
||||
|
||||
# File that should exist in the top directory of a checked out hierarchy,
|
||||
# but not in a distribution tarball.
|
||||
checkout_only_file=README-hacking
|
||||
|
||||
# Whether to use copies instead of symlinks.
|
||||
copy=false
|
||||
|
||||
# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
|
||||
# those files to be generated in directories like lib/, m4/, and po/.
|
||||
# Or set it to 'auto' to make this script select which to use based
|
||||
# on which version control system (if any) is used in the source directory.
|
||||
vc_ignore=auto
|
||||
|
||||
# find_tool ENVVAR NAMES...
|
||||
# -------------------------
|
||||
# Search for a required program. Use the value of ENVVAR, if set,
|
||||
# otherwise find the first of the NAMES that can be run (i.e.,
|
||||
# supports --version). If found, set ENVVAR to the program name,
|
||||
# die otherwise.
|
||||
find_tool ()
|
||||
{
|
||||
find_tool_envvar=$1
|
||||
shift
|
||||
find_tool_names=$@
|
||||
eval "find_tool_res=\$$find_tool_envvar"
|
||||
if test x"$find_tool_res" = x; then
|
||||
for i
|
||||
do
|
||||
if ($i --version </dev/null) >/dev/null 2>&1; then
|
||||
find_tool_res=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
find_tool_error_prefix="\$$find_tool_envvar: "
|
||||
fi
|
||||
if test x"$find_tool_res" = x; then
|
||||
echo >&2 "$0: one of these is required: $find_tool_names"
|
||||
exit 1
|
||||
fi
|
||||
($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
|
||||
echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version"
|
||||
exit 1
|
||||
}
|
||||
eval "$find_tool_envvar=\$find_tool_res"
|
||||
eval "export $find_tool_envvar"
|
||||
}
|
||||
|
||||
# Find sha1sum, named gsha1sum on MacPorts, and shasum on MacOS 10.6.
|
||||
find_tool SHA1SUM sha1sum gsha1sum shasum
|
||||
|
||||
# Override the default configuration, if necessary.
|
||||
# Make sure that bootstrap.conf is sourced from the current directory
|
||||
# if we were invoked as "sh bootstrap".
|
||||
case "$0" in
|
||||
*/*) test -r "$0.conf" && . "$0.conf" ;;
|
||||
*) test -r "$0.conf" && . ./"$0.conf" ;;
|
||||
esac
|
||||
|
||||
|
||||
if test "$vc_ignore" = auto; then
|
||||
vc_ignore=
|
||||
test -d .git && vc_ignore=.gitignore
|
||||
test -d CVS && vc_ignore="$vc_ignore .cvsignore"
|
||||
fi
|
||||
|
||||
# Translate configuration into internal form.
|
||||
|
||||
# Parse options.
|
||||
|
||||
for option
|
||||
do
|
||||
case $option in
|
||||
--help)
|
||||
usage
|
||||
exit;;
|
||||
--gnulib-srcdir=*)
|
||||
GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;;
|
||||
--skip-po)
|
||||
SKIP_PO=t;;
|
||||
--force)
|
||||
checkout_only_file=;;
|
||||
--copy)
|
||||
copy=true;;
|
||||
*)
|
||||
echo >&2 "$0: $option: unknown option"
|
||||
exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
|
||||
echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# If $STR is not already on a line by itself in $FILE, insert it,
|
||||
# sorting the new contents of the file and replacing $FILE with the result.
|
||||
insert_sorted_if_absent() {
|
||||
file=$1
|
||||
str=$2
|
||||
test -f $file || touch $file
|
||||
echo "$str" | sort -u - $file | cmp - $file > /dev/null \
|
||||
|| echo "$str" | sort -u - $file -o $file \
|
||||
|| exit 1
|
||||
}
|
||||
|
||||
# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
|
||||
found_aux_dir=no
|
||||
grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
|
||||
>/dev/null && found_aux_dir=yes
|
||||
grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
|
||||
>/dev/null && found_aux_dir=yes
|
||||
if test $found_aux_dir = no; then
|
||||
echo "$0: expected line not found in configure.ac. Add the following:" >&2
|
||||
echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# If $build_aux doesn't exist, create it now, otherwise some bits
|
||||
# below will malfunction. If creating it, also mark it as ignored.
|
||||
if test ! -d $build_aux; then
|
||||
mkdir $build_aux
|
||||
for dot_ig in x $vc_ignore; do
|
||||
test $dot_ig = x && continue
|
||||
insert_sorted_if_absent $dot_ig $build_aux
|
||||
done
|
||||
fi
|
||||
|
||||
# Note this deviates from the version comparison in automake
|
||||
# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
|
||||
# but this should suffice as we won't be specifying old
|
||||
# version formats or redundant trailing .0 in bootstrap.conf.
|
||||
# If we did want full compatibility then we should probably
|
||||
# use m4_version_compare from autoconf.
|
||||
sort_ver() { # sort -V is not generally available
|
||||
ver1="$1"
|
||||
ver2="$2"
|
||||
|
||||
# split on '.' and compare each component
|
||||
i=1
|
||||
while : ; do
|
||||
p1=$(echo "$ver1" | cut -d. -f$i)
|
||||
p2=$(echo "$ver2" | cut -d. -f$i)
|
||||
if [ ! "$p1" ]; then
|
||||
echo "$1 $2"
|
||||
break
|
||||
elif [ ! "$p2" ]; then
|
||||
echo "$2 $1"
|
||||
break
|
||||
elif [ ! "$p1" = "$p2" ]; then
|
||||
if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison
|
||||
echo "$2 $1"
|
||||
elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
|
||||
echo "$1 $2"
|
||||
else # numeric, then lexicographic comparison
|
||||
lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
|
||||
if [ "$lp" = "$p2" ]; then
|
||||
echo "$1 $2"
|
||||
else
|
||||
echo "$2 $1"
|
||||
fi
|
||||
fi
|
||||
break
|
||||
fi
|
||||
i=$(($i+1))
|
||||
done
|
||||
}
|
||||
|
||||
get_version() {
|
||||
app=$1
|
||||
|
||||
$app --version >/dev/null 2>&1 || return 1
|
||||
|
||||
$app --version 2>&1 |
|
||||
sed -n '# extract version within line
|
||||
s/.*[v ]\{1,\}\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/
|
||||
t done
|
||||
|
||||
# extract version at start of line
|
||||
s/^\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/
|
||||
t done
|
||||
|
||||
d
|
||||
|
||||
:done
|
||||
#the following essentially does s/5.005/5.5/
|
||||
s/\.0*\([1-9]\)/.\1/g
|
||||
p
|
||||
q'
|
||||
}
|
||||
|
||||
check_versions() {
|
||||
ret=0
|
||||
|
||||
while read app req_ver; do
|
||||
# Honor $APP variables ($TAR, $AUTOCONF, etc.)
|
||||
appvar=`echo $app | tr '[a-z]' '[A-Z]'`
|
||||
test "$appvar" = TAR && appvar=AMTAR
|
||||
eval "app=\${$appvar-$app}"
|
||||
inst_ver=$(get_version $app)
|
||||
if [ ! "$inst_ver" ]; then
|
||||
echo "Error: '$app' not found" >&2
|
||||
ret=1
|
||||
elif [ ! "$req_ver" = "-" ]; then
|
||||
latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
|
||||
if [ ! "$latest_ver" = "$inst_ver" ]; then
|
||||
echo "Error: '$app' version == $inst_ver is too old" >&2
|
||||
echo " '$app' version >= $req_ver is required" >&2
|
||||
ret=1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
print_versions() {
|
||||
echo "Program Min_version"
|
||||
echo "----------------------"
|
||||
printf "$buildreq"
|
||||
echo "----------------------"
|
||||
# can't depend on column -t
|
||||
}
|
||||
|
||||
if ! printf "$buildreq" | check_versions; then
|
||||
test -f README-prereq &&
|
||||
echo "See README-prereq for notes on obtaining these prerequisite programs:" >&2
|
||||
echo
|
||||
print_versions
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$0: Bootstrapping from checked-out $package sources..."
|
||||
|
||||
# See if we can use gnulib's git-merge-changelog merge driver.
|
||||
if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
|
||||
if git config merge.merge-changelog.driver >/dev/null ; then
|
||||
:
|
||||
elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
|
||||
echo "initializing git-merge-changelog driver"
|
||||
git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
|
||||
git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
|
||||
else
|
||||
echo "consider installing git-merge-changelog from gnulib"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
cleanup_gnulib() {
|
||||
status=$?
|
||||
rm -fr "$gnulib_path"
|
||||
exit $status
|
||||
}
|
||||
|
||||
git_modules_config () {
|
||||
test -f .gitmodules && git config --file .gitmodules "$@"
|
||||
}
|
||||
|
||||
gnulib_path=`git_modules_config submodule.gnulib.path`
|
||||
: ${gnulib_path=gnulib}
|
||||
|
||||
# Get gnulib files.
|
||||
|
||||
case ${GNULIB_SRCDIR--} in
|
||||
-)
|
||||
if git_modules_config submodule.gnulib.url >/dev/null; then
|
||||
echo "$0: getting gnulib files..."
|
||||
git submodule init || exit $?
|
||||
git submodule update || exit $?
|
||||
|
||||
elif [ ! -d "$gnulib_path" ]; then
|
||||
echo "$0: getting gnulib files..."
|
||||
|
||||
trap cleanup_gnulib 1 2 13 15
|
||||
|
||||
shallow=
|
||||
git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2'
|
||||
git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" ||
|
||||
cleanup_gnulib
|
||||
|
||||
trap - 1 2 13 15
|
||||
fi
|
||||
GNULIB_SRCDIR=$gnulib_path
|
||||
;;
|
||||
*)
|
||||
# Use GNULIB_SRCDIR as a reference.
|
||||
if test -d "$GNULIB_SRCDIR"/.git && \
|
||||
git_modules_config submodule.gnulib.url >/dev/null; then
|
||||
echo "$0: getting gnulib files..."
|
||||
if git submodule -h|grep -- --reference > /dev/null; then
|
||||
# Prefer the one-liner available in git 1.6.4 or newer.
|
||||
git submodule update --init --reference "$GNULIB_SRCDIR" \
|
||||
"$gnulib_path" || exit $?
|
||||
else
|
||||
# This fallback allows at least git 1.5.5.
|
||||
if test -f "$gnulib_path"/gnulib-tool; then
|
||||
# Since file already exists, assume submodule init already complete.
|
||||
git submodule update || exit $?
|
||||
else
|
||||
# Older git can't clone into an empty directory.
|
||||
rmdir "$gnulib_path" 2>/dev/null
|
||||
git clone --reference "$GNULIB_SRCDIR" \
|
||||
"$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \
|
||||
&& git submodule init && git submodule update \
|
||||
|| exit $?
|
||||
fi
|
||||
fi
|
||||
GNULIB_SRCDIR=$gnulib_path
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
|
||||
<$gnulib_tool || exit
|
||||
|
||||
# Get translations.
|
||||
|
||||
download_po_files() {
|
||||
subdir=$1
|
||||
domain=$2
|
||||
echo "$0: getting translations into $subdir for $domain..."
|
||||
cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
|
||||
eval "$cmd"
|
||||
}
|
||||
|
||||
# Download .po files to $po_dir/.reference and copy only the new
|
||||
# or modified ones into $po_dir. Also update $po_dir/LINGUAS.
|
||||
update_po_files() {
|
||||
# Directory containing primary .po files.
|
||||
# Overwrite them only when we're sure a .po file is new.
|
||||
po_dir=$1
|
||||
domain=$2
|
||||
|
||||
# Download *.po files into this dir.
|
||||
# Usually contains *.s1 checksum files.
|
||||
ref_po_dir="$po_dir/.reference"
|
||||
|
||||
test -d $ref_po_dir || mkdir $ref_po_dir || return
|
||||
download_po_files $ref_po_dir $domain \
|
||||
&& ls "$ref_po_dir"/*.po 2>/dev/null |
|
||||
sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return
|
||||
|
||||
langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
|
||||
test "$langs" = '*' && langs=x
|
||||
for po in $langs; do
|
||||
case $po in x) continue;; esac
|
||||
new_po="$ref_po_dir/$po.po"
|
||||
cksum_file="$ref_po_dir/$po.s1"
|
||||
if ! test -f "$cksum_file" ||
|
||||
! test -f "$po_dir/$po.po" ||
|
||||
! $SHA1SUM -c --status "$cksum_file" \
|
||||
< "$new_po" > /dev/null; then
|
||||
echo "updated $po_dir/$po.po..."
|
||||
cp "$new_po" "$po_dir/$po.po" \
|
||||
&& $SHA1SUM < "$new_po" > "$cksum_file"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
case $SKIP_PO in
|
||||
'')
|
||||
if test -d po; then
|
||||
update_po_files po $package || exit
|
||||
fi
|
||||
|
||||
if test -d runtime-po; then
|
||||
update_po_files runtime-po $package-runtime || exit
|
||||
fi;;
|
||||
esac
|
||||
|
||||
symlink_to_dir()
|
||||
{
|
||||
src=$1/$2
|
||||
dst=${3-$2}
|
||||
|
||||
test -f "$src" && {
|
||||
|
||||
# If the destination directory doesn't exist, create it.
|
||||
# This is required at least for "lib/uniwidth/cjk.h".
|
||||
dst_dir=`dirname "$dst"`
|
||||
if ! test -d "$dst_dir"; then
|
||||
mkdir -p "$dst_dir"
|
||||
|
||||
# If we've just created a directory like lib/uniwidth,
|
||||
# tell version control system(s) it's ignorable.
|
||||
# FIXME: for now, this does only one level
|
||||
parent=`dirname "$dst_dir"`
|
||||
for dot_ig in x $vc_ignore; do
|
||||
test $dot_ig = x && continue
|
||||
ig=$parent/$dot_ig
|
||||
insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'`
|
||||
done
|
||||
fi
|
||||
|
||||
if $copy; then
|
||||
{
|
||||
test ! -h "$dst" || {
|
||||
echo "$0: rm -f $dst" &&
|
||||
rm -f "$dst"
|
||||
}
|
||||
} &&
|
||||
test -f "$dst" &&
|
||||
cmp -s "$src" "$dst" || {
|
||||
echo "$0: cp -fp $src $dst" &&
|
||||
cp -fp "$src" "$dst"
|
||||
}
|
||||
else
|
||||
test -h "$dst" &&
|
||||
src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
|
||||
dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
|
||||
test "$src_i" = "$dst_i" || {
|
||||
dot_dots=
|
||||
case $src in
|
||||
/*) ;;
|
||||
*)
|
||||
case /$dst/ in
|
||||
*//* | */../* | */./* | /*/*/*/*/*/)
|
||||
echo >&2 "$0: invalid symlink calculation: $src -> $dst"
|
||||
exit 1;;
|
||||
/*/*/*/*/) dot_dots=../../../;;
|
||||
/*/*/*/) dot_dots=../../;;
|
||||
/*/*/) dot_dots=../;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
echo "$0: ln -fs $dot_dots$src $dst" &&
|
||||
ln -fs "$dot_dots$src" "$dst"
|
||||
}
|
||||
fi
|
||||
}
|
||||
}
|
||||
|
||||
cp_mark_as_generated()
|
||||
{
|
||||
cp_src=$1
|
||||
cp_dst=$2
|
||||
|
||||
if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
|
||||
symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
|
||||
elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
|
||||
symlink_to_dir $local_gl_dir "$cp_dst"
|
||||
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.
|
||||
# This is required at least for "lib/uniwidth/cjk.h".
|
||||
dst_dir=`dirname "$cp_dst"`
|
||||
test -d "$dst_dir" || mkdir -p "$dst_dir"
|
||||
|
||||
if test -z "$c1"; then
|
||||
cmp -s "$cp_src" "$cp_dst" || {
|
||||
# Copy the file first to get proper permissions if it
|
||||
# doesn't already exist. Then overwrite the copy.
|
||||
echo "$0: cp -f $cp_src $cp_dst" &&
|
||||
rm -f "$cp_dst" &&
|
||||
cp "$cp_src" "$cp_dst-t" &&
|
||||
sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
|
||||
mv -f "$cp_dst-t" "$cp_dst"
|
||||
}
|
||||
else
|
||||
# Copy the file first to get proper permissions if it
|
||||
# doesn't already exist. Then overwrite the copy.
|
||||
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 "$0: cp $cp_src $cp_dst # with edits" &&
|
||||
mv -f "$cp_dst-t" "$cp_dst"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
version_controlled_file() {
|
||||
dir=$1
|
||||
file=$2
|
||||
found=no
|
||||
if test -d CVS; then
|
||||
grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
|
||||
grep '^/[^/]*/[0-9]' > /dev/null && found=yes
|
||||
elif test -d .git; then
|
||||
git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
|
||||
elif test -d .svn; then
|
||||
svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
|
||||
else
|
||||
echo "$0: no version control for $dir/$file?" >&2
|
||||
fi
|
||||
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;;
|
||||
.*) continue;; # FIXME: should all file names starting with "." be ignored?
|
||||
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 "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
|
||||
rm -f $dir/$gnulib_mk &&
|
||||
sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
|
||||
}
|
||||
elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
|
||||
version_controlled_file $dir $file; then
|
||||
echo "$0: $dir/$file overrides $1/$dir/$file"
|
||||
else
|
||||
copied=$copied$sep$file; sep=$nl
|
||||
if test $file = gettext.m4; then
|
||||
echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
|
||||
rm -f $dir/$file
|
||||
sed '
|
||||
/^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
|
||||
AC_DEFUN([AM_INTL_SUBDIR], [])
|
||||
/^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
|
||||
AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
|
||||
$a\
|
||||
AC_DEFUN([gl_LOCK_EARLY], [])
|
||||
' $1/$dir/$file >$dir/$file
|
||||
else
|
||||
cp_mark_as_generated $1/$dir/$file $dir/$file
|
||||
fi
|
||||
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_sorted_if_absent $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_sorted_if_absent $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_sorted_if_absent $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.
|
||||
|
||||
gnulib_tool_options="\
|
||||
--import\
|
||||
--no-changelog\
|
||||
--aux-dir $bt/$build_aux\
|
||||
--doc-base $bt/$doc_base\
|
||||
--lib $gnulib_name\
|
||||
--m4-base $bt/$m4_base/\
|
||||
--source-base $bt/$source_base/\
|
||||
--tests-base $bt/$tests_base\
|
||||
--local-dir $local_gl_dir\
|
||||
$gnulib_tool_option_extras\
|
||||
"
|
||||
echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
|
||||
$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
|
||||
slurp $bt || exit
|
||||
|
||||
for file in $gnulib_files; do
|
||||
symlink_to_dir "$GNULIB_SRCDIR" $file || exit
|
||||
done
|
||||
|
||||
|
||||
# Import from gettext.
|
||||
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
|
||||
# gnulib-populated directories. Such .m4 files would cause aclocal to fail.
|
||||
# The following requires GNU find 4.2.3 or newer. Considering the usual
|
||||
# portability constraints of this script, that may seem a very demanding
|
||||
# requirement, but it should be ok. Ignore any failure, which is fine,
|
||||
# since this is only a convenience to help developers avoid the relatively
|
||||
# unusual case in which a symlinked-to .m4 file is git-removed from gnulib
|
||||
# between successive runs of this script.
|
||||
find "$m4_base" "$source_base" \
|
||||
-depth \( -name '*.m4' -o -name '*.[ch]' \) \
|
||||
-type l -xtype l -delete > /dev/null 2>&1
|
||||
|
||||
# Reconfigure, getting other files.
|
||||
|
||||
# Skip autoheader if it's not needed.
|
||||
grep -E '^[ ]*AC_CONFIG_HEADERS?\>' configure.ac >/dev/null ||
|
||||
AUTOHEADER=true
|
||||
|
||||
for command in \
|
||||
libtool \
|
||||
"${ACLOCAL-aclocal} --force -I m4" \
|
||||
"${AUTOCONF-autoconf} --force" \
|
||||
"${AUTOHEADER-autoheader} --force" \
|
||||
"${AUTOMAKE-automake} --add-missing --copy --force-missing"
|
||||
do
|
||||
if test "$command" = libtool; then
|
||||
use_libtool=0
|
||||
# We'd like to use grep -E, to see if any of LT_INIT,
|
||||
# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
|
||||
# but that's not portable enough (e.g., for Solaris).
|
||||
grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
|
||||
&& use_libtool=1
|
||||
grep '^[ ]*LT_INIT' configure.ac >/dev/null \
|
||||
&& use_libtool=1
|
||||
test $use_libtool = 0 \
|
||||
&& continue
|
||||
command="${LIBTOOLIZE-libtoolize} -c -f"
|
||||
fi
|
||||
echo "$0: $command ..."
|
||||
$command || exit
|
||||
done
|
||||
|
||||
|
||||
# Get some extra files from gnulib, overriding existing files.
|
||||
for file in $gnulib_extra_files; do
|
||||
case $file in
|
||||
*/INSTALL) dst=INSTALL;;
|
||||
build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
|
||||
*) dst=$file;;
|
||||
esac
|
||||
symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
|
||||
done
|
||||
|
||||
if test $with_gettext = yes; then
|
||||
# Create gettext configuration.
|
||||
echo "$0: Creating po/Makevars from po/Makevars.template ..."
|
||||
rm -f po/Makevars
|
||||
sed '
|
||||
/^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
|
||||
/^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/
|
||||
/^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'|
|
||||
/^XGETTEXT_OPTIONS *=/{
|
||||
s/$/ \\/
|
||||
a\
|
||||
'"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
|
||||
}
|
||||
' po/Makevars.template >po/Makevars || exit 1
|
||||
|
||||
if test -d runtime-po; then
|
||||
# Similarly for runtime-po/Makevars, but not quite the same.
|
||||
rm -f runtime-po/Makevars
|
||||
sed '
|
||||
/^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
|
||||
/^subdir *=.*/s/=.*/= runtime-po/
|
||||
/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
|
||||
/^XGETTEXT_OPTIONS *=/{
|
||||
s/$/ \\/
|
||||
a\
|
||||
'"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
|
||||
}
|
||||
' po/Makevars.template >runtime-po/Makevars || exit 1
|
||||
|
||||
# Copy identical files from po to runtime-po.
|
||||
(cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
|
||||
fi
|
||||
fi
|
||||
|
||||
bootstrap_epilogue
|
||||
|
||||
echo "$0: done. Now you can run './configure'."
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
162
bootstrap.conf
Normal file
162
bootstrap.conf
Normal file
@ -0,0 +1,162 @@
|
||||
# Bootstrap configuration.
|
||||
|
||||
# Copyright (C) 2010 Red Hat, Inc.
|
||||
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
# gnulib modules used by this package.
|
||||
gnulib_modules='
|
||||
areadlink
|
||||
base64
|
||||
c-ctype
|
||||
canonicalize-lgpl
|
||||
close
|
||||
connect
|
||||
count-one-bits
|
||||
dirname-lgpl
|
||||
fcntl-h
|
||||
getaddrinfo
|
||||
gethostname
|
||||
getpass
|
||||
gettext-h
|
||||
gettimeofday
|
||||
gitlog-to-changelog
|
||||
gnumakefile
|
||||
ignore-value
|
||||
inet_pton
|
||||
ioctl
|
||||
maintainer-makefile
|
||||
mkstemp
|
||||
mktempd
|
||||
netdb
|
||||
perror
|
||||
physmem
|
||||
poll
|
||||
posix-shell
|
||||
pthread
|
||||
recv
|
||||
random_r
|
||||
sched
|
||||
send
|
||||
setsockopt
|
||||
socket
|
||||
stpcpy
|
||||
strchrnul
|
||||
strndup
|
||||
strerror
|
||||
strptime
|
||||
strsep
|
||||
strtok_r
|
||||
sys_stat
|
||||
sys_wait
|
||||
time_r
|
||||
timegm
|
||||
uname
|
||||
useless-if-before-free
|
||||
usleep
|
||||
vasprintf
|
||||
verify
|
||||
vc-list-files
|
||||
'
|
||||
|
||||
# Additional xgettext options to use. Use "\\\newline" to break lines.
|
||||
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
|
||||
--flag=virAsprintf:2:c-format\\\
|
||||
--from-code=UTF-8\\\
|
||||
'
|
||||
|
||||
# This is not a GNU package, so the default bug address is invalid,
|
||||
# and the translation project is not in use.
|
||||
MSGID_BUGS_ADDRESS=libvir-list@redhat.com
|
||||
COPYRIGHT_HOLDER='Red Hat, Inc.'
|
||||
SKIP_PO=true
|
||||
|
||||
# Enable copy-mode for MSYS/MinGW. MSYS' ln doesn't work well in the way
|
||||
# bootstrap uses it with relative paths.
|
||||
if test -n "$MSYSTEM"; then
|
||||
copy=true
|
||||
fi
|
||||
|
||||
# If "AM_GNU_GETTEXT(external" or "AM_GNU_GETTEXT([external]"
|
||||
# appears in configure.ac, exclude some unnecessary files.
|
||||
# Without grep's -E option (not portable enough, pre-configure),
|
||||
# the following test is ugly. Also, this depends on the existence
|
||||
# of configure.ac, not the obsolescent-named configure.in. But if
|
||||
# you're using this infrastructure, you should care about such things.
|
||||
|
||||
gettext_external=0
|
||||
grep '^[ ]*AM_GNU_GETTEXT(external\>' configure.ac > /dev/null &&
|
||||
gettext_external=1
|
||||
grep '^[ ]*AM_GNU_GETTEXT(\[external\]' configure.ac > /dev/null &&
|
||||
gettext_external=1
|
||||
|
||||
if test $gettext_external = 1; then
|
||||
# Gettext supplies these files, but we don't need them since
|
||||
# we don't have an intl subdirectory.
|
||||
excluded_files='
|
||||
m4/glibc2.m4
|
||||
m4/intdiv0.m4
|
||||
m4/lcmessage.m4
|
||||
m4/uintmax_t.m4
|
||||
m4/ulonglong.m4
|
||||
m4/visibility.m4
|
||||
'
|
||||
fi
|
||||
|
||||
# Tell gnulib to:
|
||||
# require LGPLv2+
|
||||
# put *.m4 files in new gnulib/m4/ dir
|
||||
# put *.[ch] files in new gnulib/lib/ dir.
|
||||
# import gnulib tests in new gnulib/tests/ dir.
|
||||
gnulib_name=libgnu
|
||||
m4_base=gnulib/m4
|
||||
source_base=gnulib/lib
|
||||
tests_base=gnulib/tests
|
||||
gnulib_mk=Makefile.am
|
||||
gnulib_tool_option_extras="\
|
||||
--lgpl=2\
|
||||
--with-tests\
|
||||
"
|
||||
|
||||
# Convince bootstrap to use multiple m4 directories.
|
||||
: ${ACLOCAL=aclocal}
|
||||
ACLOCAL="$ACLOCAL -I gnulib/m4"
|
||||
export ACLOCAL
|
||||
|
||||
# Build prerequisites
|
||||
buildreq="\
|
||||
autoconf 2.59
|
||||
automake 1.9.6
|
||||
autopoint -
|
||||
gettext -
|
||||
git 1.5.5
|
||||
gzip -
|
||||
libtool -
|
||||
perl 5.5
|
||||
tar -
|
||||
"
|
||||
|
||||
# Automake requires that ChangeLog exist.
|
||||
touch ChangeLog || exit 1
|
||||
|
||||
|
||||
bootstrap_epilogue()
|
||||
{
|
||||
# Change paths in gnulib/tests/Makefile.am from "../../.." to "../..".
|
||||
m=gnulib/tests/Makefile.am
|
||||
sed 's,\.\./\.\./\.\.,../..,g' $m > $m-t
|
||||
mv -f $m-t $m
|
||||
}
|
||||
16
build-aux/.gitignore
vendored
Normal file
16
build-aux/.gitignore
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
*
|
||||
/arg-nonnull.h
|
||||
/gitlog-to-changelog
|
||||
/link-warning.h
|
||||
/mktempd
|
||||
/useless-if-before-free
|
||||
/vc-list-files
|
||||
arg-nonnull.h
|
||||
c++defs.h
|
||||
config.rpath
|
||||
gitlog-to-changelog
|
||||
mkinstalldirs
|
||||
mktempd
|
||||
useless-if-before-free
|
||||
vc-list-files
|
||||
warn-on-use.h
|
||||
497
cfg.mk
Normal file
497
cfg.mk
Normal file
@ -0,0 +1,497 @@
|
||||
# Customize Makefile.maint. -*- makefile -*-
|
||||
# Copyright (C) 2003-2010 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Use alpha.gnu.org for alpha and beta releases.
|
||||
# Use ftp.gnu.org for major releases.
|
||||
gnu_ftp_host-alpha = alpha.gnu.org
|
||||
gnu_ftp_host-beta = alpha.gnu.org
|
||||
gnu_ftp_host-major = ftp.gnu.org
|
||||
gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE))
|
||||
|
||||
url_dir_list = \
|
||||
ftp://$(gnu_rel_host)/gnu/coreutils
|
||||
|
||||
# We use .gnulib, not gnulib.
|
||||
gnulib_dir = $(srcdir)/.gnulib
|
||||
|
||||
# Tests not to run as part of "make distcheck".
|
||||
local-checks-to-skip = \
|
||||
changelog-check \
|
||||
check-AUTHORS \
|
||||
makefile-check \
|
||||
makefile_path_separator_check \
|
||||
patch-check \
|
||||
sc_GPL_version \
|
||||
sc_always_defined_macros \
|
||||
sc_cast_of_alloca_return_value \
|
||||
sc_cross_check_PATH_usage_in_tests \
|
||||
sc_dd_max_sym_length \
|
||||
sc_error_exit_success \
|
||||
sc_file_system \
|
||||
sc_immutable_NEWS \
|
||||
sc_makefile_path_separator_check \
|
||||
sc_obsolete_symbols \
|
||||
sc_prohibit_S_IS_definition \
|
||||
sc_prohibit_atoi_atof \
|
||||
sc_prohibit_hash_without_use \
|
||||
sc_prohibit_jm_in_m4 \
|
||||
sc_prohibit_quote_without_use \
|
||||
sc_prohibit_quotearg_without_use \
|
||||
sc_prohibit_stat_st_blocks \
|
||||
sc_root_tests \
|
||||
sc_space_tab \
|
||||
sc_sun_os_names \
|
||||
sc_system_h_headers \
|
||||
sc_texinfo_acronym \
|
||||
sc_tight_scope \
|
||||
sc_two_space_separator_in_usage \
|
||||
sc_error_message_uppercase \
|
||||
sc_program_name \
|
||||
sc_require_test_exit_idiom \
|
||||
sc_makefile_check \
|
||||
sc_useless_cpp_parens
|
||||
|
||||
useless_free_options = \
|
||||
--name=VIR_FREE \
|
||||
--name=sexpr_free \
|
||||
--name=virBitmapFree \
|
||||
--name=virCPUDefFree \
|
||||
--name=virCapabilitiesFree \
|
||||
--name=virCapabilitiesFreeGuest \
|
||||
--name=virCapabilitiesFreeGuestDomain \
|
||||
--name=virCapabilitiesFreeGuestFeature \
|
||||
--name=virCapabilitiesFreeGuestMachine \
|
||||
--name=virCapabilitiesFreeHostNUMACell \
|
||||
--name=virCapabilitiesFreeMachines \
|
||||
--name=virCgroupFree \
|
||||
--name=virConfFreeList \
|
||||
--name=virConfFreeValue \
|
||||
--name=virDomainChrDefFree \
|
||||
--name=virDomainControllerDefFree \
|
||||
--name=virDomainDefFree \
|
||||
--name=virDomainDeviceDefFree \
|
||||
--name=virDomainDiskDefFree \
|
||||
--name=virDomainEventCallbackListFree \
|
||||
--name=virDomainEventFree \
|
||||
--name=virDomainEventQueueFree \
|
||||
--name=virDomainFSDefFree \
|
||||
--name=virDomainGraphicsDefFree \
|
||||
--name=virDomainHostdevDefFree \
|
||||
--name=virDomainInputDefFree \
|
||||
--name=virDomainNetDefFree \
|
||||
--name=virDomainObjFree \
|
||||
--name=virDomainSnapshotDefFree \
|
||||
--name=virDomainSnapshotObjFree \
|
||||
--name=virDomainSoundDefFree \
|
||||
--name=virDomainVideoDefFree \
|
||||
--name=virDomainWatchdogDefFree \
|
||||
--name=virInterfaceDefFree \
|
||||
--name=virInterfaceIpDefFree \
|
||||
--name=virInterfaceObjFree \
|
||||
--name=virInterfaceProtocolDefFree \
|
||||
--name=virJSONValueFree \
|
||||
--name=virLastErrFreeData \
|
||||
--name=virNWFilterDefFree \
|
||||
--name=virNWFilterEntryFree \
|
||||
--name=virNWFilterHashTableFree \
|
||||
--name=virNWFilterIPAddrLearnReqFree \
|
||||
--name=virNWFilterIncludeDefFree \
|
||||
--name=virNWFilterPoolObjFree \
|
||||
--name=virNWFilterRuleDefFree \
|
||||
--name=virNWFilterRuleInstFree \
|
||||
--name=virNetworkDefFree \
|
||||
--name=virNetworkObjFree \
|
||||
--name=virNodeDeviceDefFree \
|
||||
--name=virNodeDeviceObjFree \
|
||||
--name=virSecretDefFree \
|
||||
--name=virStorageEncryptionFree \
|
||||
--name=virStorageEncryptionSecretFree \
|
||||
--name=virStoragePoolDefFree \
|
||||
--name=virStoragePoolObjFree \
|
||||
--name=virStoragePoolSourceFree \
|
||||
--name=virStorageVolDefFree \
|
||||
--name=xmlFree \
|
||||
--name=xmlXPathFreeContext \
|
||||
--name=xmlXPathFreeObject
|
||||
|
||||
# The following template was generated by this command:
|
||||
# make ID && aid free|grep '^vi'|sed 's/ .*//;s/^/# /'
|
||||
# N virBufferFreeAndReset
|
||||
# y virCPUDefFree
|
||||
# y virCapabilitiesFree
|
||||
# y virCapabilitiesFreeGuest
|
||||
# y virCapabilitiesFreeGuestDomain
|
||||
# y virCapabilitiesFreeGuestFeature
|
||||
# y virCapabilitiesFreeGuestMachine
|
||||
# y virCapabilitiesFreeHostNUMACell
|
||||
# y virCapabilitiesFreeMachines
|
||||
# N virCapabilitiesFreeNUMAInfo FIXME
|
||||
# y virCgroupFree
|
||||
# N virConfFree (diagnoses the "error")
|
||||
# y virConfFreeList
|
||||
# y virConfFreeValue
|
||||
# y virDomainChrDefFree
|
||||
# y virDomainControllerDefFree
|
||||
# y virDomainDefFree
|
||||
# y virDomainDeviceDefFree
|
||||
# y virDomainDiskDefFree
|
||||
# y virDomainEventCallbackListFree
|
||||
# y virDomainEventFree
|
||||
# y virDomainEventQueueFree
|
||||
# y virDomainFSDefFree
|
||||
# n virDomainFree
|
||||
# n virDomainFreeName (can't fix -- returns int)
|
||||
# y virDomainGraphicsDefFree
|
||||
# y virDomainHostdevDefFree
|
||||
# y virDomainInputDefFree
|
||||
# y virDomainNetDefFree
|
||||
# y virDomainObjFree
|
||||
# y virDomainSnapshotDefFree
|
||||
# n virDomainSnapshotFree (returns int)
|
||||
# n virDomainSnapshotFreeName (returns int)
|
||||
# y virDomainSnapshotObjFree
|
||||
# y virDomainSoundDefFree
|
||||
# y virDomainVideoDefFree
|
||||
# y virDomainWatchdogDefFree
|
||||
# n virDrvNodeGetCellsFreeMemory (returns int)
|
||||
# n virDrvNodeGetFreeMemory (returns long long)
|
||||
# n virFree (dereferences param)
|
||||
# n virFreeError
|
||||
# n virHashFree (takes 2 args)
|
||||
# y virInterfaceDefFree
|
||||
# n virInterfaceFree (returns int)
|
||||
# n virInterfaceFreeName
|
||||
# y virInterfaceIpDefFree
|
||||
# y virInterfaceObjFree
|
||||
# n virInterfaceObjListFree
|
||||
# y virInterfaceProtocolDefFree
|
||||
# y virJSONValueFree
|
||||
# y virLastErrFreeData
|
||||
# y virNWFilterDefFree
|
||||
# y virNWFilterEntryFree
|
||||
# n virNWFilterFree (returns int)
|
||||
# y virNWFilterHashTableFree
|
||||
# y virNWFilterIPAddrLearnReqFree
|
||||
# y virNWFilterIncludeDefFree
|
||||
# n virNWFilterPoolFreeName (returns int)
|
||||
# y virNWFilterPoolObjFree
|
||||
# n virNWFilterPoolObjListFree FIXME
|
||||
# y virNWFilterRuleDefFree
|
||||
# n virNWFilterRuleFreeInstanceData (typedef)
|
||||
# y virNWFilterRuleInstFree
|
||||
# y virNetworkDefFree
|
||||
# n virNetworkFree (returns int)
|
||||
# n virNetworkFreeName (returns int)
|
||||
# y virNetworkObjFree
|
||||
# n virNetworkObjListFree FIXME
|
||||
# n virNodeDevCapsDefFree FIXME
|
||||
# y virNodeDeviceDefFree
|
||||
# n virNodeDeviceFree (returns int)
|
||||
# y virNodeDeviceObjFree
|
||||
# n virNodeDeviceObjListFree FIXME
|
||||
# n virNodeGetCellsFreeMemory (returns int)
|
||||
# n virNodeGetFreeMemory (returns non-void)
|
||||
# y virSecretDefFree
|
||||
# n virSecretFree (returns non-void)
|
||||
# n virSecretFreeName (2 args)
|
||||
# n virSecurityLabelDefFree FIXME
|
||||
# n virStorageBackendDiskMakeFreeExtent (returns non-void)
|
||||
# y virStorageEncryptionFree
|
||||
# y virStorageEncryptionSecretFree
|
||||
# n virStorageFreeType (enum)
|
||||
# y virStoragePoolDefFree
|
||||
# n virStoragePoolFree (returns non-void)
|
||||
# n virStoragePoolFreeName (returns non-void)
|
||||
# y virStoragePoolObjFree
|
||||
# n virStoragePoolObjListFree FIXME
|
||||
# y virStoragePoolSourceFree
|
||||
# y virStorageVolDefFree
|
||||
# n virStorageVolFree (returns non-void)
|
||||
# n virStorageVolFreeName (returns non-void)
|
||||
# n virStreamFree
|
||||
|
||||
# Avoid uses of write(2). Either switch to streams (fwrite), or use
|
||||
# the safewrite wrapper.
|
||||
sc_avoid_write:
|
||||
@prohibit='\<write *\(' \
|
||||
in_vc_files='\.c$$' \
|
||||
halt='consider using safewrite instead of write' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Use STREQ rather than comparing strcmp == 0, or != 0.
|
||||
# Similarly, use STREQLEN or STRPREFIX rather than strncmp.
|
||||
sc_prohibit_strcmp_and_strncmp:
|
||||
@prohibit='strn?cmp *\(' \
|
||||
halt='use STREQ() in place of the above uses of str[n]cmp' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Use virAsprintf rather than a'sprintf since *strp is undefined on error.
|
||||
sc_prohibit_asprintf:
|
||||
@prohibit='\<[a]sprintf\>' \
|
||||
halt='use virAsprintf, not a'sprintf \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_strncpy:
|
||||
@prohibit='strncpy *\(' \
|
||||
halt='use virStrncpy, not strncpy' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_readlink:
|
||||
@prohibit='readlink *\(' \
|
||||
halt='use virFileResolveLink, not readlink' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_gethostname:
|
||||
@prohibit='gethostname *\(' \
|
||||
halt='use virGetHostname, not gethostname' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_gettext_noop:
|
||||
@prohibit='gettext_noop *\(' \
|
||||
halt='use N_, not gettext_noop' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_VIR_ERR_NO_MEMORY:
|
||||
@prohibit='\<V''IR_ERR_NO_MEMORY\>' \
|
||||
halt='use virReportOOMError, not V'IR_ERR_NO_MEMORY \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Use a subshell for each function, to give the optimal warning message.
|
||||
include $(srcdir)/Makefile.nonreentrant
|
||||
sc_prohibit_nonreentrant:
|
||||
@fail=0 ; \
|
||||
for i in $(NON_REENTRANT) ; \
|
||||
do \
|
||||
(prohibit="\\<$$i *\\(" \
|
||||
halt="use $${i}_r, not $$i" \
|
||||
$(_sc_search_regexp) \
|
||||
) || fail=1; \
|
||||
done ; \
|
||||
exit $$fail
|
||||
|
||||
# Prohibit the inclusion of <ctype.h>.
|
||||
sc_prohibit_ctype_h:
|
||||
@prohibit='^# *include *<ctype\.h>' \
|
||||
halt="don't use ctype.h; instead, use c-ctype.h" \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Ensure that no C source file or rng schema uses TABs for
|
||||
# indentation. Also match *.h.in files, to get libvirt.h.in. Exclude
|
||||
# files in gnulib, since they're imported.
|
||||
sc_TAB_in_indentation:
|
||||
@prohibit='^ * ' \
|
||||
in_vc_files='(\.(rng|[ch](\.in)?)|(daemon|tools)/.*\.in)$$' \
|
||||
halt='use spaces, not TAB, for indentation in C, sh, and RNG schemas' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
|
||||
|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
|
||||
|
||||
sc_avoid_ctype_macros:
|
||||
@prohibit='\b($(ctype_re)) *\(' \
|
||||
halt="don't use ctype macros (use c-ctype.h)" \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_virBufferAdd_with_string_literal:
|
||||
@prohibit='\<virBufferAdd *\([^,]+, *"[^"]' \
|
||||
halt='use virBufferAddLit, not virBufferAdd, with a string literal' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Not only do they fail to deal well with ipv6, but the gethostby*
|
||||
# functions are also not thread-safe.
|
||||
sc_prohibit_gethostby:
|
||||
@prohibit='\<gethostby(addr|name2?) *\(' \
|
||||
halt='use getaddrinfo, not gethostby*' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Many of the function names below came from this filter:
|
||||
# git grep -B2 '\<_('|grep -E '\.c- *[[:alpha:]_][[:alnum:]_]* ?\(.*[,;]$' \
|
||||
# |sed 's/.*\.c- *//'|perl -pe 's/ ?\(.*//'|sort -u \
|
||||
# |grep -vE '^(qsort|if|close|assert|fputc|free|N_|vir.*GetName|.*Unlock|virNodeListDevices|virHashRemoveEntry|freeaddrinfo|.*[fF]ree|xdrmem_create|xmlXPathFreeObject|virUUIDFormat|openvzSetProgramSentinal|polkit_action_unref)$'
|
||||
|
||||
msg_gen_function =
|
||||
msg_gen_function += ESX_ERROR
|
||||
msg_gen_function += ESX_VI_ERROR
|
||||
msg_gen_function += macvtapError
|
||||
msg_gen_function += remoteError
|
||||
msg_gen_function += lxcError
|
||||
msg_gen_function += networkLog
|
||||
msg_gen_function += networkReportError
|
||||
msg_gen_function += oneError
|
||||
msg_gen_function += openvzError
|
||||
msg_gen_function += qemudDispatchClientFailure
|
||||
msg_gen_function += qemudReportError
|
||||
msg_gen_function += regerror
|
||||
msg_gen_function += remoteDispatchFormatError
|
||||
msg_gen_function += umlReportError
|
||||
msg_gen_function += vboxError
|
||||
msg_gen_function += virConfError
|
||||
msg_gen_function += virDomainReportError
|
||||
msg_gen_function += virSecurityReportError
|
||||
msg_gen_function += virHashError
|
||||
msg_gen_function += virLibConnError
|
||||
msg_gen_function += virLibDomainError
|
||||
msg_gen_function += virNetworkReportError
|
||||
msg_gen_function += virNodeDeviceReportError
|
||||
msg_gen_function += virProxyError
|
||||
msg_gen_function += virRaiseError
|
||||
msg_gen_function += virReportErrorHelper
|
||||
msg_gen_function += virReportSystemError
|
||||
msg_gen_function += virSexprError
|
||||
msg_gen_function += virStorageReportError
|
||||
msg_gen_function += virXMLError
|
||||
msg_gen_function += virXenInotifyError
|
||||
msg_gen_function += virXenStoreError
|
||||
msg_gen_function += virXendError
|
||||
msg_gen_function += xenapiSessionErrorHandler
|
||||
msg_gen_function += xenUnifiedError
|
||||
msg_gen_function += xenXMError
|
||||
msg_gen_function += VIR_ERROR
|
||||
msg_gen_function += VIR_ERROR0
|
||||
|
||||
# Uncomment the following and run "make syntax-check" to see diagnostics
|
||||
# that are not yet marked for translation, but that need to be rewritten
|
||||
# so that they are translatable.
|
||||
# msg_gen_function += fprintf
|
||||
# msg_gen_function += testError
|
||||
# msg_gen_function += virXenError
|
||||
# msg_gen_function += vshPrint
|
||||
# msg_gen_function += vshError
|
||||
|
||||
func_or := $(shell printf '$(msg_gen_function)'|tr -s '[[:space:]]' '|')
|
||||
func_re := ($(func_or))
|
||||
|
||||
# Look for diagnostics that aren't marked for translation.
|
||||
# This won't find any for which error's format string is on a separate line.
|
||||
# The sed filters eliminate false-positives like these:
|
||||
# _("...: "
|
||||
# "%s", _("no storage vol w..."
|
||||
sc_libvirt_unmarked_diagnostics:
|
||||
@grep -nE \
|
||||
'\<$(func_re) *\([^"]*"[^"]*[a-z]{3}' $$($(VC_LIST_EXCEPT)) \
|
||||
| grep -v '_''(' && \
|
||||
{ echo '$(ME): found unmarked diagnostic(s)' 1>&2; \
|
||||
exit 1; } || :
|
||||
@{ grep -nE '\<$(func_re) *\(.*;$$' $$($(VC_LIST_EXCEPT)); \
|
||||
grep -A1 -nE '\<$(func_re) *\(.*,$$' $$($(VC_LIST_EXCEPT)); } \
|
||||
| sed 's/_("[^"][^"]*"//;s/[ ]"%s"//' \
|
||||
| grep '[ ]"' && \
|
||||
{ echo '$(ME): found unmarked diagnostic(s)' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# Like the above, but prohibit a newline at the end of a diagnostic.
|
||||
# This is subject to false positives partly because it naively looks for
|
||||
# `\n"', which may not be the end of the string, and also because it takes
|
||||
# two lines of context (the -A2) after the line with the function name.
|
||||
# FIXME: this rule might benefit from a separate function list, in case
|
||||
# there are functions to which this one applies but that do not get marked
|
||||
# diagnostics.
|
||||
sc_prohibit_newline_at_end_of_diagnostic:
|
||||
@grep -A2 -nE \
|
||||
'\<$(func_re) *\(' $$($(VC_LIST_EXCEPT)) \
|
||||
| grep '\\n"' \
|
||||
&& { echo '$(ME): newline at end of message(s)' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# Disallow trailing blank lines.
|
||||
sc_prohibit_trailing_blank_lines:
|
||||
@$(VC_LIST_EXCEPT) | xargs perl -ln -0777 -e \
|
||||
'/\n\n+$$/ and print $$ARGV' > $@-t
|
||||
@found=0; test -s $@-t && { found=1; cat $@-t 1>&2; \
|
||||
echo '$(ME): found trailing blank line(s)' 1>&2; }; \
|
||||
rm -f $@-t; \
|
||||
test $$found = 0
|
||||
|
||||
# Regex for grep -E that exempts generated files from style rules.
|
||||
preprocessor_exempt = (remote_(driver|protocol)\.h)$$
|
||||
# Enforce recommended preprocessor indentation style.
|
||||
sc_preprocessor_indentation:
|
||||
@if cppi --version >/dev/null 2>&1; then \
|
||||
$(VC_LIST_EXCEPT) | grep '\.[ch]$$' \
|
||||
| grep -vE '$(preprocessor_exempt)' | xargs cppi -a -c \
|
||||
|| { echo '$(ME): incorrect preprocessor indentation' 1>&2; \
|
||||
exit 1; }; \
|
||||
else \
|
||||
echo '$(ME): skipping test $@: cppi not installed' 1>&2; \
|
||||
fi
|
||||
|
||||
sc_copyright_format:
|
||||
@require='Copyright .*Red 'Hat', Inc\.' \
|
||||
containing='Copyright .*Red 'Hat \
|
||||
halt='Red Hat copyright is missing Inc.' \
|
||||
$(_sc_search_regexp)
|
||||
@prohibit='Copyright [^(].*Red 'Hat \
|
||||
halt='consistently use (C) in Red Hat copyright' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Some functions/macros produce messages intended solely for developers
|
||||
# and maintainers. Do not mark them for translation.
|
||||
sc_prohibit_gettext_markup:
|
||||
@prohibit='\<VIR_(WARN|DEBUG)0? *\(_\(' \
|
||||
halt='do not mark these strings for translation' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# We don't use this feature of maint.mk.
|
||||
prev_version_file = /dev/null
|
||||
|
||||
ifeq (0,$(MAKELEVEL))
|
||||
_curr_status = .git-module-status
|
||||
# The sed filter accommodates those who check out on a commit from which
|
||||
# no tag is reachable. In that case, git submodule status prints a "-"
|
||||
# in column 1 and does not print a "git describe"-style string after the
|
||||
# submodule name. Contrast these:
|
||||
# -b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib
|
||||
# b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib (v0.0-2286-gb653eda)
|
||||
# $ cat .git-module-status
|
||||
# b653eda3ac4864de205419d9f41eec267cb89eeb
|
||||
_submodule_hash = sed 's/^[ +-]//;s/ .*//'
|
||||
_update_required := $(shell \
|
||||
cd '$(srcdir)'; \
|
||||
actual=$$(git submodule status | $(_submodule_hash); \
|
||||
git hash-object bootstrap.conf; \
|
||||
git diff .gnulib); \
|
||||
stamp="$$($(_submodule_hash) $(_curr_status) 2>/dev/null)"; \
|
||||
test "$$stamp" = "$$actual"; echo $$?)
|
||||
_clean_requested = $(filter %clean,$(MAKECMDGOALS))
|
||||
ifeq (1,$(_update_required)$(_clean_requested))
|
||||
$(info INFO: gnulib update required; running ./autogen.sh first)
|
||||
Makefile: _autogen
|
||||
endif
|
||||
endif
|
||||
|
||||
# Give credit where due:
|
||||
# Ensure that each commit author email address (possibly mapped via
|
||||
# git log's .mailmap) appears in our AUTHORS file.
|
||||
sc_check_author_list:
|
||||
@fail=0; \
|
||||
for i in $$(git log --pretty=format:%aE%n|sort -u|grep -v '^$$'); do \
|
||||
sanitized=$$(echo "$$i"|LC_ALL=C sed 's/\([^a-zA-Z0-9_@-]\)/\\\1/g'); \
|
||||
grep -iq "<$$sanitized>" $(srcdir)/AUTHORS \
|
||||
|| { printf '%s\n' "$$i" >&2; fail=1; }; \
|
||||
done; \
|
||||
test $$fail = 1 \
|
||||
&& echo '$(ME): committer(s) not listed in AUTHORS' >&2; \
|
||||
test $$fail = 0
|
||||
|
||||
# It is necessary to call autogen any time gnulib changes. Autogen
|
||||
# reruns configure, then we regenerate all Makefiles at once.
|
||||
.PHONY: _autogen
|
||||
_autogen:
|
||||
$(srcdir)/autogen.sh
|
||||
./config.status
|
||||
|
||||
# Exempt @...@ uses of these symbols.
|
||||
_makefile_at_at_check_exceptions = ' && !/(SCHEMA|SYSCONF)DIR/'
|
||||
61
config.h.in
61
config.h.in
@ -1,61 +0,0 @@
|
||||
/* config.h.in. Generated from configure.in by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if the C compiler supports function prototypes. */
|
||||
#undef PROTOTYPES
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define like PROTOTYPES; this can be used by system headers. */
|
||||
#undef __PROTOTYPES
|
||||
2299
configure.ac
Normal file
2299
configure.ac
Normal file
File diff suppressed because it is too large
Load Diff
195
configure.in
195
configure.in
@ -1,195 +0,0 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(src/libvirt.c)
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
LIBVIR_MAJOR_VERSION=0
|
||||
LIBVIR_MINOR_VERSION=0
|
||||
LIBVIR_MICRO_VERSION=3
|
||||
LIBVIR_MICRO_VERSION_SUFFIX=
|
||||
LIBVIR_VERSION=$LIBVIR_MAJOR_VERSION.$LIBVIR_MINOR_VERSION.$LIBVIR_MICRO_VERSION$LIBVIR_MICRO_VERSION_SUFFIX
|
||||
LIBVIR_VERSION_INFO=`expr $LIBVIR_MAJOR_VERSION + $LIBVIR_MINOR_VERSION`:$LIBVIR_MICRO_VERSION:$LIBVIR_MINOR_VERSION
|
||||
|
||||
LIBVIR_VERSION_NUMBER=`expr $LIBVIR_MAJOR_VERSION \* 1000000 + $LIBVIR_MINOR_VERSION \* 1000 + $LIBVIR_MICRO_VERSION`
|
||||
|
||||
if test -f CVS/Entries; then
|
||||
extra=`grep ChangeLog CVS/Entries | grep -v LIBVIR | sed -e s\%/ChangeLog/1\.%% -e s\%/.*$%%`
|
||||
echo extra=$extra
|
||||
if test "$extra" != ""
|
||||
then
|
||||
LIBVIR_VERSION_EXTRA="-CVS$extra"
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(LIBVIR_MAJOR_VERSION)
|
||||
AC_SUBST(LIBVIR_MINOR_VERSION)
|
||||
AC_SUBST(LIBVIR_MICRO_VERSION)
|
||||
AC_SUBST(LIBVIR_VERSION)
|
||||
AC_SUBST(LIBVIR_VERSION_INFO)
|
||||
AC_SUBST(LIBVIR_VERSION_NUMBER)
|
||||
AC_SUBST(LIBVIR_VERSION_EXTRA)
|
||||
|
||||
VERSION=${LIBVIR_VERSION}
|
||||
|
||||
AM_INIT_AUTOMAKE(libvirt, $VERSION)
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_CPP
|
||||
AC_PATH_PROG(RM, rm, /bin/rm)
|
||||
AC_PATH_PROG(MV, mv, /bin/mv)
|
||||
AC_PATH_PROG(TAR, tar, /bin/tar)
|
||||
AC_PATH_PROG(XMLLINT, xmllint, /usr/bin/xmllint)
|
||||
AC_PATH_PROG(XSLTPROC, xsltproc, /usr/bin/xsltproc)
|
||||
|
||||
|
||||
dnl Make sure we have an ANSI compiler
|
||||
AM_C_PROTOTYPES
|
||||
test "x$U" != "x" && AC_MSG_ERROR(Compiler not ANSI compliant)
|
||||
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
dnl Specific dir for HTML output ?
|
||||
AC_ARG_WITH(html-dir, AC_HELP_STRING([--with-html-dir=path],
|
||||
[path to base html directory, default $datadir/doc/html]),
|
||||
[HTML_DIR=$withval], [HTML_DIR='$(datadir)/doc'])
|
||||
|
||||
AC_ARG_WITH(html-subdir, AC_HELP_STRING([--with-html-subdir=path],
|
||||
[directory used under html-dir, default $PACKAGE-$VERSION/html]),
|
||||
[test "x$withval" != "x" && HTML_DIR="$HTML_DIR/$withval"],
|
||||
[HTML_DIR="$HTML_DIR/\$(PACKAGE)-\$(VERSION)/html"])
|
||||
AC_SUBST(HTML_DIR)
|
||||
|
||||
dnl
|
||||
dnl specific tests to setup DV devel environments with debug etc ...
|
||||
dnl
|
||||
if [[ "${LOGNAME}" = "veillard" -a "`pwd`" = "/u/veillard/libvir" ]] ; then
|
||||
STATIC_BINARIES="-static"
|
||||
else
|
||||
STATIC_BINARIES=
|
||||
fi
|
||||
AC_SUBST(STATIC_BINARIES)
|
||||
|
||||
dnl
|
||||
dnl make CFLAGS very pedantic at least during the devel phase for everybody
|
||||
dnl
|
||||
if test "${GCC}" = "yes" ; then
|
||||
CFLAGS="-g -O -W -Wformat -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wall"
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl To be able to make dist on a non-xenified host
|
||||
dnl
|
||||
AC_ARG_WITH(depends,
|
||||
[ --with-depends check for dependancies (on)])
|
||||
|
||||
if test "$with_depends" != "no"
|
||||
then
|
||||
|
||||
dnl search for the Xen store library
|
||||
AC_SEARCH_LIBS(xs_read, [xenstore], [], [AC_MSG_ERROR([Xen store library not found])])
|
||||
|
||||
dnl virsh libraries
|
||||
AC_CHECK_LIB(curses, initscr,
|
||||
[VIRSH_LIBS="$VIRSH_LIBS -lcurses"],
|
||||
[AC_MSG_ERROR([curses library not found])],
|
||||
[$VIRSH_LIBS])
|
||||
AC_CHECK_LIB(readline, main,
|
||||
[VIRSH_LIBS="$VIRSH_LIBS -lreadline"],
|
||||
[AC_MSG_ERROR([readline library not found])],
|
||||
[$VIRSH_LIBS])
|
||||
AC_SUBST(VIRSH_LIBS)
|
||||
|
||||
dnl
|
||||
dnl check for python
|
||||
dnl
|
||||
|
||||
PYTHON_VERSION=
|
||||
PYTHON_INCLUDES=
|
||||
PYTHON_SITE_PACKAGES=
|
||||
PYTHON_TESTS=
|
||||
pythondir=
|
||||
if test "$with_python" != "no" ; then
|
||||
if test -x "$with_python/bin/python"
|
||||
then
|
||||
echo Found python in $with_python/bin/python
|
||||
PYTHON="$with_python/bin/python"
|
||||
else
|
||||
if test -x "$with_python"
|
||||
then
|
||||
echo Found python in $with_python
|
||||
PYTHON="$with_python"
|
||||
else
|
||||
if test -x "$PYTHON"
|
||||
then
|
||||
echo Found python in environment PYTHON=$PYTHON
|
||||
else
|
||||
AC_PATH_PROG(PYTHON, python python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5)
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "$PYTHON" != ""
|
||||
then
|
||||
PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
|
||||
echo Found Python version $PYTHON_VERSION
|
||||
fi
|
||||
if test "$PYTHON_VERSION" != ""
|
||||
then
|
||||
if test -r $with_python/include/python$PYTHON_VERSION/Python.h -a \
|
||||
-d $with_python/lib/python$PYTHON_VERSION/site-packages
|
||||
then
|
||||
PYTHON_INCLUDES=$with_python/include/python$PYTHON_VERSION
|
||||
PYTHON_SITE_PACKAGES=$with_python/lib/python$PYTHON_VERSION/site-packages
|
||||
else
|
||||
if test -r $prefix/include/python$PYTHON_VERSION/Python.h
|
||||
then
|
||||
PYTHON_INCLUDES='$(prefix)/include/python$(PYTHON_VERSION)'
|
||||
PYTHON_SITE_PACKAGES='$(libdir)/python$(PYTHON_VERSION)/site-packages'
|
||||
else
|
||||
if test -r /usr/include/python$PYTHON_VERSION/Python.h
|
||||
then
|
||||
PYTHON_INCLUDES=/usr/include/python$PYTHON_VERSION
|
||||
PYTHON_SITE_PACKAGES='$(libdir)/python$(PYTHON_VERSION)/site-packages'
|
||||
else
|
||||
echo could not find python$PYTHON_VERSION/Python.h
|
||||
fi
|
||||
fi
|
||||
if test ! -d "$PYTHON_SITE_PACKAGES"
|
||||
then
|
||||
PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib()"`
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "$with_python" != ""
|
||||
then
|
||||
pythondir='$(PYTHON_SITE_PACKAGES)'
|
||||
else
|
||||
pythondir='$(libdir)/python${PYTHON_VERSION}/site-packages'
|
||||
fi
|
||||
else
|
||||
PYTHON=
|
||||
fi
|
||||
AM_CONDITIONAL(WITH_PYTHON, test "$PYTHON_INCLUDES" != "")
|
||||
if test "$PYTHON_INCLUDES" != ""
|
||||
then
|
||||
PYTHON_SUBDIR=python
|
||||
else
|
||||
PYTHON_SUBDIR=
|
||||
fi
|
||||
AC_SUBST(pythondir)
|
||||
AC_SUBST(PYTHON)
|
||||
AC_SUBST(PYTHON_VERSION)
|
||||
AC_SUBST(PYTHON_INCLUDES)
|
||||
AC_SUBST(PYTHON_SITE_PACKAGES)
|
||||
AC_SUBST(PYTHON_SUBDIR)
|
||||
|
||||
# end of if with_depends
|
||||
fi
|
||||
|
||||
# very annoying
|
||||
rm -f COPYING
|
||||
|
||||
AC_OUTPUT(Makefile src/Makefile include/Makefile docs/Makefile \
|
||||
docs/examples/Makefile \
|
||||
libvirt.pc libvirt.spec include/libvirt.h python/Makefile)
|
||||
13
daemon/.gitignore
vendored
Normal file
13
daemon/.gitignore
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
*.gcda
|
||||
*.gcno
|
||||
*.la
|
||||
*.lo
|
||||
.deps
|
||||
.libs
|
||||
Makefile
|
||||
Makefile.in
|
||||
libvirt_qemud
|
||||
libvirtd
|
||||
libvirtd.init
|
||||
libvirt-guests.init
|
||||
libvirtd*.logrotate
|
||||
289
daemon/Makefile.am
Normal file
289
daemon/Makefile.am
Normal file
@ -0,0 +1,289 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
DAEMON_SOURCES = \
|
||||
event.c event.h \
|
||||
libvirtd.c libvirtd.h \
|
||||
remote.c remote.h \
|
||||
dispatch.c dispatch.h \
|
||||
stream.c stream.h \
|
||||
remote_dispatch_prototypes.h \
|
||||
remote_dispatch_table.h \
|
||||
remote_dispatch_args.h \
|
||||
remote_dispatch_ret.h \
|
||||
../src/remote/remote_protocol.c
|
||||
|
||||
AVAHI_SOURCES = \
|
||||
mdns.c mdns.h
|
||||
|
||||
DISTCLEANFILES =
|
||||
EXTRA_DIST = \
|
||||
remote_generate_stubs.pl \
|
||||
libvirtd.conf \
|
||||
libvirtd.init.in \
|
||||
libvirtd.policy-0 \
|
||||
libvirtd.policy-1 \
|
||||
libvirtd.sasl \
|
||||
libvirtd.sysconf \
|
||||
libvirtd.aug \
|
||||
libvirtd.qemu.logrotate.in \
|
||||
libvirtd.lxc.logrotate.in \
|
||||
libvirtd.uml.logrotate.in \
|
||||
test_libvirtd.aug \
|
||||
THREADING.txt \
|
||||
libvirt-guests.init.in \
|
||||
libvirt-guests.sysconf \
|
||||
$(AVAHI_SOURCES) \
|
||||
$(DAEMON_SOURCES)
|
||||
|
||||
BUILT_SOURCES =
|
||||
|
||||
if WITH_LIBVIRTD
|
||||
|
||||
sbin_PROGRAMS = libvirtd
|
||||
|
||||
confdir = $(sysconfdir)/libvirt/
|
||||
conf_DATA = libvirtd.conf
|
||||
|
||||
augeasdir = $(datadir)/augeas/lenses
|
||||
augeas_DATA = libvirtd.aug
|
||||
|
||||
augeastestsdir = $(datadir)/augeas/lenses/tests
|
||||
augeastests_DATA = test_libvirtd.aug
|
||||
|
||||
libvirtd_SOURCES = $(DAEMON_SOURCES)
|
||||
|
||||
#-D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_POSIX_C_SOURCE=199506L
|
||||
libvirtd_CFLAGS = \
|
||||
-I$(top_srcdir)/gnulib/lib -I../gnulib/lib \
|
||||
-I$(top_srcdir)/include -I$(top_builddir)/include \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/util \
|
||||
-I$(top_srcdir)/src/conf \
|
||||
-I$(top_srcdir)/src/remote \
|
||||
$(LIBXML_CFLAGS) $(GNUTLS_CFLAGS) $(SASL_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
$(WARN_CFLAGS) -DLOCAL_STATE_DIR="\"$(localstatedir)\"" \
|
||||
$(COVERAGE_CFLAGS) \
|
||||
-DSYSCONF_DIR="\"$(sysconfdir)\"" \
|
||||
-DQEMUD_PID_FILE="\"$(QEMUD_PID_FILE)\"" \
|
||||
-DREMOTE_PID_FILE="\"$(REMOTE_PID_FILE)\"" \
|
||||
-DGETTEXT_PACKAGE=\"$(PACKAGE)\"
|
||||
|
||||
libvirtd_LDFLAGS = \
|
||||
$(WARN_CFLAGS) \
|
||||
$(COVERAGE_LDFLAGS)
|
||||
|
||||
libvirtd_LDADD = \
|
||||
$(LIBXML_LIBS) \
|
||||
$(GNUTLS_LIBS) \
|
||||
$(SASL_LIBS) \
|
||||
$(POLKIT_LIBS)
|
||||
|
||||
libvirtd_LDADD += ../src/libvirt_util.la
|
||||
|
||||
if WITH_DRIVER_MODULES
|
||||
libvirtd_LDADD += ../src/libvirt_driver.la
|
||||
else
|
||||
if WITH_QEMU
|
||||
libvirtd_LDADD += ../src/libvirt_driver_qemu.la
|
||||
endif
|
||||
|
||||
if WITH_LXC
|
||||
libvirtd_LDADD += ../src/libvirt_driver_lxc.la
|
||||
endif
|
||||
|
||||
if WITH_UML
|
||||
libvirtd_LDADD += ../src/libvirt_driver_uml.la
|
||||
endif
|
||||
|
||||
if WITH_ONE
|
||||
libvirtd_LDADD += ../src/libvirt_driver_one.la
|
||||
endif
|
||||
|
||||
if WITH_STORAGE_DIR
|
||||
libvirtd_LDADD += ../src/libvirt_driver_storage.la
|
||||
endif
|
||||
|
||||
if WITH_NETWORK
|
||||
libvirtd_LDADD += ../src/libvirt_driver_network.la
|
||||
endif
|
||||
|
||||
if WITH_NETCF
|
||||
libvirtd_LDADD += ../src/libvirt_driver_interface.la
|
||||
endif
|
||||
|
||||
if WITH_NODE_DEVICES
|
||||
libvirtd_LDADD += ../src/libvirt_driver_nodedev.la
|
||||
endif
|
||||
|
||||
if WITH_SECRETS
|
||||
libvirtd_LDADD += ../src/libvirt_driver_secret.la
|
||||
endif
|
||||
|
||||
if WITH_NWFILTER
|
||||
libvirtd_LDADD += ../src/libvirt_driver_nwfilter.la
|
||||
endif
|
||||
endif
|
||||
|
||||
libvirtd_LDADD += ../src/libvirt.la
|
||||
|
||||
if HAVE_POLKIT
|
||||
if HAVE_POLKIT0
|
||||
policydir = $(datadir)/PolicyKit/policy
|
||||
policyfile = libvirtd.policy-0
|
||||
else
|
||||
policydir = $(datadir)/polkit-1/actions
|
||||
policyfile = libvirtd.policy-1
|
||||
endif
|
||||
endif
|
||||
|
||||
if HAVE_AVAHI
|
||||
libvirtd_SOURCES += $(AVAHI_SOURCES)
|
||||
libvirtd_CFLAGS += $(AVAHI_CFLAGS)
|
||||
libvirtd_LDADD += $(AVAHI_LIBS)
|
||||
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)/run/libvirt || :
|
||||
rmdir $(DESTDIR)$(localstatedir)/lib/libvirt || :
|
||||
|
||||
if HAVE_POLKIT
|
||||
install-data-polkit:: install-init
|
||||
mkdir -p $(DESTDIR)$(policydir)
|
||||
$(INSTALL_DATA) $(srcdir)/$(policyfile) $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||
uninstall-data-polkit:: install-init
|
||||
rm -f $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||
else
|
||||
install-data-polkit::
|
||||
uninstall-data-polkit::
|
||||
endif
|
||||
|
||||
|
||||
remote.c: remote_dispatch_prototypes.h \
|
||||
remote_dispatch_table.h \
|
||||
remote_dispatch_args.h \
|
||||
remote_dispatch_ret.h
|
||||
|
||||
REMOTE_PROTOCOL = $(top_srcdir)/src/remote/remote_protocol.x
|
||||
|
||||
remote_dispatch_prototypes.h: $(srcdir)/remote_generate_stubs.pl $(REMOTE_PROTOCOL)
|
||||
$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -p $(REMOTE_PROTOCOL) > $@
|
||||
|
||||
remote_dispatch_table.h: $(srcdir)/remote_generate_stubs.pl $(REMOTE_PROTOCOL)
|
||||
$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -t $(REMOTE_PROTOCOL) > $@
|
||||
|
||||
remote_dispatch_args.h: $(srcdir)/remote_generate_stubs.pl $(REMOTE_PROTOCOL)
|
||||
$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -a $(REMOTE_PROTOCOL) > $@
|
||||
|
||||
remote_dispatch_ret.h: $(srcdir)/remote_generate_stubs.pl $(REMOTE_PROTOCOL)
|
||||
$(AM_V_GEN)perl -w $(srcdir)/remote_generate_stubs.pl -r $(REMOTE_PROTOCOL) > $@
|
||||
|
||||
LOGROTATE_CONFS = libvirtd.qemu.logrotate libvirtd.lxc.logrotate \
|
||||
libvirtd.uml.logrotate
|
||||
|
||||
BUILT_SOURCES += $(LOGROTATE_CONFS)
|
||||
|
||||
libvirtd.qemu.logrotate: libvirtd.qemu.logrotate.in
|
||||
sed \
|
||||
-e 's![@]localstatedir[@]!$(localstatedir)!g' \
|
||||
< $< > $@-t
|
||||
mv $@-t $@
|
||||
|
||||
libvirtd.lxc.logrotate: libvirtd.lxc.logrotate.in
|
||||
$(AM_V_GEN)sed \
|
||||
-e 's![@]localstatedir[@]!$(localstatedir)!g' \
|
||||
< $< > $@-t && \
|
||||
mv $@-t $@
|
||||
|
||||
libvirtd.uml.logrotate: libvirtd.uml.logrotate.in
|
||||
$(AM_V_GEN)sed \
|
||||
-e 's![@]localstatedir[@]!$(localstatedir)!g' \
|
||||
< $< > $@-t && \
|
||||
mv $@-t $@
|
||||
|
||||
install-logrotate: $(LOGROTATE_CONFS)
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/qemu/
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/lxc/
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/uml/
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/logrotate.d/
|
||||
$(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.uml.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.uml
|
||||
|
||||
if LIBVIRT_INIT_SCRIPT_RED_HAT
|
||||
install-init: libvirtd.init libvirt-guests.init
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/rc.d/init.d
|
||||
$(INSTALL_SCRIPT) libvirtd.init \
|
||||
$(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd
|
||||
$(INSTALL_SCRIPT) libvirt-guests.init \
|
||||
$(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirt-guests
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/sysconfig
|
||||
$(INSTALL_SCRIPT) $(srcdir)/libvirtd.sysconf \
|
||||
$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
|
||||
$(INSTALL_SCRIPT) $(srcdir)/libvirt-guests.sysconf \
|
||||
$(DESTDIR)$(sysconfdir)/sysconfig/libvirt-guests
|
||||
|
||||
uninstall-init:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd \
|
||||
$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd \
|
||||
$(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirt-guests \
|
||||
$(DESTDIR)$(sysconfdir)/sysconfig/libvirt-guests
|
||||
|
||||
BUILT_SOURCES += libvirtd.init libvirt-guests.init
|
||||
|
||||
%.init: %.init.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:
|
||||
test -x '$(AUGPARSE)' \
|
||||
&& '$(AUGPARSE)' -I $(srcdir) $(srcdir)/test_libvirtd.aug || :
|
||||
|
||||
else
|
||||
|
||||
install-init:
|
||||
uninstall-init:
|
||||
libvirtd.init:
|
||||
|
||||
endif # LIBVIRT_INIT_SCRIPT_RED_HAT
|
||||
|
||||
# This must be added last, since functions it provides/replaces
|
||||
# are used by nearly every other library.
|
||||
libvirtd_LDADD += ../gnulib/lib/libgnu.la $(LIBSOCKET)
|
||||
|
||||
else # WITH_LIBVIRTD
|
||||
install-data-local: install-data-sasl
|
||||
uninstall-local:: uninstall-data-sasl
|
||||
endif # WITH_LIBVIRTD
|
||||
|
||||
# This is needed for clients too, so can't wrap in
|
||||
# the WITH_LIBVIRTD conditional
|
||||
if HAVE_SASL
|
||||
install-data-sasl:
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/sasl2/
|
||||
$(INSTALL_DATA) $(srcdir)/libvirtd.sasl $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
|
||||
|
||||
uninstall-data-sasl:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
|
||||
rmdir $(DESTDIR)$(sysconfdir)/sasl2/
|
||||
else
|
||||
install-data-sasl:
|
||||
uninstall-data-sasl:
|
||||
endif
|
||||
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES)
|
||||
CLEANFILES += *.cov *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda
|
||||
52
daemon/THREADING.txt
Normal file
52
daemon/THREADING.txt
Normal file
@ -0,0 +1,52 @@
|
||||
|
||||
Threading in the libvirtd daemon
|
||||
================================
|
||||
|
||||
To allow efficient processing of RPC requests, the libvirtd daemon
|
||||
makes use of threads.
|
||||
|
||||
- The process leader. This is the initial thread of control
|
||||
when the daemon starts running. It is responsible for
|
||||
initializing all the state, and starting the event loop.
|
||||
Once that's all done, this thread does nothing except
|
||||
wait for the event loop to quit, thus indicating an orderly
|
||||
shutdown is required.
|
||||
|
||||
- The event loop. This thread runs the event loop, sitting
|
||||
in poll() on all monitored file handles, and calculating
|
||||
and dispatching any timers that may be registered. When
|
||||
this thread quits, the entire daemon will shutdown.
|
||||
|
||||
- The workers. These 'n' threads all sit around waiting to
|
||||
process incoming RPC requests. Since RPC requests may take
|
||||
a long time to complete, with long idle periods, there will
|
||||
be quite a few workers running.
|
||||
|
||||
The use of threads obviously requires locking to ensure safety when
|
||||
accessing/changing data structures.
|
||||
|
||||
- the top level lock is on 'struct qemud_server'. This must be
|
||||
held before acquiring any other lock
|
||||
|
||||
- Each 'struct qemud_client' object has a lock. The server lock
|
||||
must be held before acquiring it. Once the client lock is acquired
|
||||
the server lock can (optionally) be dropped.
|
||||
|
||||
- The event loop has its own self-contained lock. You can ignore
|
||||
this as a caller of virEvent APIs.
|
||||
|
||||
|
||||
The server lock is used in conjunction with a condition variable
|
||||
to pass jobs from the event loop thread to the workers. The main
|
||||
event loop thread handles I/O from the client socket, and once a
|
||||
complete RPC message has been read off the wire (and optionally
|
||||
decrypted), it will be placed onto the 'dx' job queue for the
|
||||
associated client object. The job condition will be signalled and
|
||||
a worker will wakup and process it.
|
||||
|
||||
The worker thread must quickly drop its locks on the server and
|
||||
client to allow the main event loop thread to continue running
|
||||
with its other work. Critically important, is that now libvirt
|
||||
API call will ever be made with the server or client locks held.
|
||||
|
||||
-- End
|
||||
668
daemon/dispatch.c
Normal file
668
daemon/dispatch.c
Normal file
@ -0,0 +1,668 @@
|
||||
/*
|
||||
* dispatch.h: RPC message dispatching infrastructure
|
||||
*
|
||||
* Copyright (C) 2007, 2008, 2009 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Richard W.M. Jones <rjones@redhat.com>
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "dispatch.h"
|
||||
#include "remote.h"
|
||||
|
||||
#include "memory.h"
|
||||
|
||||
/* Convert a libvirt virError object into wire format */
|
||||
static void
|
||||
remoteDispatchCopyError (remote_error *rerr,
|
||||
virErrorPtr verr)
|
||||
{
|
||||
rerr->code = verr->code;
|
||||
rerr->domain = verr->domain;
|
||||
rerr->message = verr->message ? malloc(sizeof(char*)) : NULL;
|
||||
if (rerr->message) *rerr->message = strdup(verr->message);
|
||||
rerr->level = verr->level;
|
||||
rerr->str1 = verr->str1 ? malloc(sizeof(char*)) : NULL;
|
||||
if (rerr->str1) *rerr->str1 = strdup(verr->str1);
|
||||
rerr->str2 = verr->str2 ? malloc(sizeof(char*)) : NULL;
|
||||
if (rerr->str2) *rerr->str2 = strdup(verr->str2);
|
||||
rerr->str3 = verr->str3 ? malloc(sizeof(char*)) : NULL;
|
||||
if (rerr->str3) *rerr->str3 = strdup(verr->str3);
|
||||
rerr->int1 = verr->int1;
|
||||
rerr->int2 = verr->int2;
|
||||
}
|
||||
|
||||
|
||||
/* A set of helpers for sending back errors to client
|
||||
in various ways .... */
|
||||
|
||||
static void
|
||||
remoteDispatchStringError (remote_error *rerr,
|
||||
int code, const char *msg)
|
||||
{
|
||||
virError verr;
|
||||
|
||||
memset(&verr, 0, sizeof verr);
|
||||
|
||||
/* Construct the dummy libvirt virError. */
|
||||
verr.code = code;
|
||||
verr.domain = VIR_FROM_REMOTE;
|
||||
verr.message = (char *)msg;
|
||||
verr.level = VIR_ERR_ERROR;
|
||||
verr.str1 = (char *)msg;
|
||||
|
||||
remoteDispatchCopyError(rerr, &verr);
|
||||
}
|
||||
|
||||
|
||||
void remoteDispatchAuthError (remote_error *rerr)
|
||||
{
|
||||
remoteDispatchStringError (rerr, VIR_ERR_AUTH_FAILED, "authentication failed");
|
||||
}
|
||||
|
||||
|
||||
void remoteDispatchFormatError (remote_error *rerr,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char msgbuf[1024];
|
||||
char *msg = msgbuf;
|
||||
|
||||
va_start (args, fmt);
|
||||
vsnprintf (msgbuf, sizeof msgbuf, fmt, args);
|
||||
va_end (args);
|
||||
|
||||
remoteDispatchStringError (rerr, VIR_ERR_RPC, msg);
|
||||
}
|
||||
|
||||
|
||||
void remoteDispatchGenericError (remote_error *rerr)
|
||||
{
|
||||
remoteDispatchStringError(rerr,
|
||||
VIR_ERR_INTERNAL_ERROR,
|
||||
"library function returned error but did not set virterror");
|
||||
}
|
||||
|
||||
|
||||
void remoteDispatchOOMError (remote_error *rerr)
|
||||
{
|
||||
remoteDispatchStringError(rerr,
|
||||
VIR_ERR_NO_MEMORY,
|
||||
"out of memory");
|
||||
}
|
||||
|
||||
|
||||
void remoteDispatchConnError (remote_error *rerr,
|
||||
virConnectPtr conn)
|
||||
{
|
||||
virErrorPtr verr;
|
||||
|
||||
if (conn)
|
||||
verr = virConnGetLastError(conn);
|
||||
else
|
||||
verr = virGetLastError();
|
||||
if (verr)
|
||||
remoteDispatchCopyError(rerr, verr);
|
||||
else
|
||||
remoteDispatchGenericError(rerr);
|
||||
}
|
||||
|
||||
static int
|
||||
remoteSerializeError(struct qemud_client *client,
|
||||
remote_error *rerr,
|
||||
int program,
|
||||
int version,
|
||||
int procedure,
|
||||
int type,
|
||||
int serial)
|
||||
{
|
||||
XDR xdr;
|
||||
unsigned int len;
|
||||
struct qemud_client_message *msg = NULL;
|
||||
|
||||
DEBUG("prog=%d ver=%d proc=%d type=%d serial=%d, msg=%s",
|
||||
program, version, procedure, type, serial,
|
||||
rerr->message ? *rerr->message : "(none)");
|
||||
|
||||
if (VIR_ALLOC(msg) < 0)
|
||||
goto fatal_error;
|
||||
|
||||
/* Return header. */
|
||||
msg->hdr.prog = program;
|
||||
msg->hdr.vers = version;
|
||||
msg->hdr.proc = procedure;
|
||||
msg->hdr.type = type;
|
||||
msg->hdr.serial = serial;
|
||||
msg->hdr.status = REMOTE_ERROR;
|
||||
|
||||
msg->bufferLength = sizeof(msg->buffer);
|
||||
|
||||
/* Serialise the return header. */
|
||||
xdrmem_create (&xdr,
|
||||
msg->buffer,
|
||||
msg->bufferLength,
|
||||
XDR_ENCODE);
|
||||
|
||||
len = 0; /* We'll come back and write this later. */
|
||||
if (!xdr_u_int (&xdr, &len))
|
||||
goto xdr_error;
|
||||
|
||||
if (!xdr_remote_message_header (&xdr, &msg->hdr))
|
||||
goto xdr_error;
|
||||
|
||||
/* Error was not set, so synthesize a generic error message. */
|
||||
if (rerr->code == 0)
|
||||
remoteDispatchGenericError(rerr);
|
||||
|
||||
if (!xdr_remote_error (&xdr, rerr))
|
||||
goto xdr_error;
|
||||
|
||||
/* Write the length word. */
|
||||
len = xdr_getpos (&xdr);
|
||||
if (xdr_setpos (&xdr, 0) == 0)
|
||||
goto xdr_error;
|
||||
|
||||
if (!xdr_u_int (&xdr, &len))
|
||||
goto xdr_error;
|
||||
|
||||
xdr_destroy (&xdr);
|
||||
|
||||
msg->bufferLength = len;
|
||||
msg->bufferOffset = 0;
|
||||
|
||||
/* Put reply on end of tx queue to send out */
|
||||
qemudClientMessageQueuePush(&client->tx, msg);
|
||||
qemudUpdateClientEvent(client);
|
||||
xdr_free((xdrproc_t)xdr_remote_error, (char *)rerr);
|
||||
|
||||
return 0;
|
||||
|
||||
xdr_error:
|
||||
xdr_destroy(&xdr);
|
||||
VIR_FREE(msg);
|
||||
fatal_error:
|
||||
xdr_free((xdrproc_t)xdr_remote_error, (char *)rerr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @client: the client to send the error to
|
||||
* @rerr: the error object to send
|
||||
* @req: the message this error is in reply to
|
||||
*
|
||||
* Send an error message to the client
|
||||
*
|
||||
* Returns 0 if the error was sent, -1 upon fatal error
|
||||
*/
|
||||
int
|
||||
remoteSerializeReplyError(struct qemud_client *client,
|
||||
remote_error *rerr,
|
||||
remote_message_header *req) {
|
||||
/*
|
||||
* For data streams, errors are sent back as data streams
|
||||
* For method calls, errors are sent back as method replies
|
||||
*/
|
||||
return remoteSerializeError(client,
|
||||
rerr,
|
||||
req->prog,
|
||||
req->vers,
|
||||
req->proc,
|
||||
req->type == REMOTE_STREAM ? REMOTE_STREAM : REMOTE_REPLY,
|
||||
req->serial);
|
||||
}
|
||||
|
||||
int
|
||||
remoteSerializeStreamError(struct qemud_client *client,
|
||||
remote_error *rerr,
|
||||
int proc,
|
||||
int serial)
|
||||
{
|
||||
return remoteSerializeError(client,
|
||||
rerr,
|
||||
REMOTE_PROGRAM,
|
||||
REMOTE_PROTOCOL_VERSION,
|
||||
proc,
|
||||
REMOTE_STREAM,
|
||||
serial);
|
||||
}
|
||||
|
||||
/*
|
||||
* @msg: the complete incoming message, whose header to decode
|
||||
*
|
||||
* Decodes the header part of the client message, but does not
|
||||
* validate the decoded fields in the header. It expects
|
||||
* bufferLength to refer to length of the data packet. Upon
|
||||
* return bufferOffset will refer to the amount of the packet
|
||||
* consumed by decoding of the header.
|
||||
*
|
||||
* returns 0 if successfully decoded, -1 upon fatal error
|
||||
*/
|
||||
int
|
||||
remoteDecodeClientMessageHeader (struct qemud_client_message *msg)
|
||||
{
|
||||
XDR xdr;
|
||||
int ret = -1;
|
||||
|
||||
msg->bufferOffset = REMOTE_MESSAGE_HEADER_XDR_LEN;
|
||||
|
||||
/* Parse the header. */
|
||||
xdrmem_create (&xdr,
|
||||
msg->buffer + msg->bufferOffset,
|
||||
msg->bufferLength - msg->bufferOffset,
|
||||
XDR_DECODE);
|
||||
|
||||
if (!xdr_remote_message_header (&xdr, &msg->hdr))
|
||||
goto cleanup;
|
||||
|
||||
msg->bufferOffset += xdr_getpos(&xdr);
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
xdr_destroy(&xdr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @msg: the outgoing message, whose header to encode
|
||||
*
|
||||
* Encodes the header part of the client message, setting the
|
||||
* message offset ready to encode the payload. Leaves space
|
||||
* for the length field later. Upon return bufferLength will
|
||||
* refer to the total available space for message, while
|
||||
* bufferOffset will refer to current space used by header
|
||||
*
|
||||
* returns 0 if successfully encoded, -1 upon fatal error
|
||||
*/
|
||||
int
|
||||
remoteEncodeClientMessageHeader (struct qemud_client_message *msg)
|
||||
{
|
||||
XDR xdr;
|
||||
int ret = -1;
|
||||
unsigned int len = 0;
|
||||
|
||||
msg->bufferLength = sizeof(msg->buffer);
|
||||
msg->bufferOffset = 0;
|
||||
|
||||
/* Format the header. */
|
||||
xdrmem_create (&xdr,
|
||||
msg->buffer,
|
||||
msg->bufferLength,
|
||||
XDR_ENCODE);
|
||||
|
||||
/* The real value is filled in shortly */
|
||||
if (!xdr_u_int (&xdr, &len)) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!xdr_remote_message_header (&xdr, &msg->hdr))
|
||||
goto cleanup;
|
||||
|
||||
len = xdr_getpos(&xdr);
|
||||
xdr_setpos(&xdr, 0);
|
||||
|
||||
/* Fill in current length - may be re-written later
|
||||
* if a payload is added
|
||||
*/
|
||||
if (!xdr_u_int (&xdr, &len)) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
msg->bufferOffset += len;
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
xdr_destroy(&xdr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
remoteDispatchClientCall (struct qemud_server *server,
|
||||
struct qemud_client *client,
|
||||
struct qemud_client_message *msg);
|
||||
|
||||
|
||||
/*
|
||||
* @server: the unlocked server object
|
||||
* @client: the locked client object
|
||||
* @msg: the complete incoming message packet, with header already decoded
|
||||
*
|
||||
* This function gets called from qemud when it pulls a incoming
|
||||
* remote protocol message off the dispatch queue for processing.
|
||||
*
|
||||
* The @msg parameter must have had its header decoded already by
|
||||
* calling remoteDecodeClientMessageHeader
|
||||
*
|
||||
* Returns 0 if the message was dispatched, -1 upon fatal error
|
||||
*/
|
||||
int
|
||||
remoteDispatchClientRequest (struct qemud_server *server,
|
||||
struct qemud_client *client,
|
||||
struct qemud_client_message *msg)
|
||||
{
|
||||
int ret;
|
||||
remote_error rerr;
|
||||
|
||||
DEBUG("prog=%d ver=%d type=%d status=%d serial=%d proc=%d",
|
||||
msg->hdr.prog, msg->hdr.vers, msg->hdr.type,
|
||||
msg->hdr.status, msg->hdr.serial, msg->hdr.proc);
|
||||
|
||||
memset(&rerr, 0, sizeof rerr);
|
||||
|
||||
/* Check version, etc. */
|
||||
if (msg->hdr.prog != REMOTE_PROGRAM) {
|
||||
remoteDispatchFormatError (&rerr,
|
||||
_("program mismatch (actual %x, expected %x)"),
|
||||
msg->hdr.prog, REMOTE_PROGRAM);
|
||||
goto error;
|
||||
}
|
||||
if (msg->hdr.vers != REMOTE_PROTOCOL_VERSION) {
|
||||
remoteDispatchFormatError (&rerr,
|
||||
_("version mismatch (actual %x, expected %x)"),
|
||||
msg->hdr.vers, REMOTE_PROTOCOL_VERSION);
|
||||
goto error;
|
||||
}
|
||||
|
||||
switch (msg->hdr.type) {
|
||||
case REMOTE_CALL:
|
||||
return remoteDispatchClientCall(server, client, msg);
|
||||
|
||||
case REMOTE_STREAM:
|
||||
/* Since stream data is non-acked, async, we may continue to received
|
||||
* stream packets after we closed down a stream. Just drop & ignore
|
||||
* these.
|
||||
*/
|
||||
VIR_INFO("Ignoring unexpected stream data serial=%d proc=%d status=%d",
|
||||
msg->hdr.serial, msg->hdr.proc, msg->hdr.status);
|
||||
qemudClientMessageRelease(client, msg);
|
||||
break;
|
||||
|
||||
default:
|
||||
remoteDispatchFormatError (&rerr, _("type (%d) != REMOTE_CALL"),
|
||||
(int) msg->hdr.type);
|
||||
goto error;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
ret = remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
|
||||
if (ret >= 0)
|
||||
VIR_FREE(msg);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @server: the unlocked server object
|
||||
* @client: the locked client object
|
||||
* @msg: the complete incoming method call, with header already decoded
|
||||
*
|
||||
* This method is used to dispatch an message representing an
|
||||
* incoming method call from a client. It decodes the payload
|
||||
* to obtain method call arguments, invokves the method and
|
||||
* then sends a reply packet with the return values
|
||||
*
|
||||
* Returns 0 if the reply was sent, or -1 upon fatal error
|
||||
*/
|
||||
int
|
||||
remoteDispatchClientCall (struct qemud_server *server,
|
||||
struct qemud_client *client,
|
||||
struct qemud_client_message *msg)
|
||||
{
|
||||
XDR xdr;
|
||||
remote_error rerr;
|
||||
dispatch_args args;
|
||||
dispatch_ret ret;
|
||||
const dispatch_data *data = NULL;
|
||||
int rv = -1;
|
||||
unsigned int len;
|
||||
virConnectPtr conn = NULL;
|
||||
|
||||
memset(&args, 0, sizeof args);
|
||||
memset(&ret, 0, sizeof ret);
|
||||
memset(&rerr, 0, sizeof rerr);
|
||||
|
||||
if (msg->hdr.status != REMOTE_OK) {
|
||||
remoteDispatchFormatError (&rerr, _("status (%d) != REMOTE_OK"),
|
||||
(int) msg->hdr.status);
|
||||
goto rpc_error;
|
||||
}
|
||||
|
||||
/* If client is marked as needing auth, don't allow any RPC ops,
|
||||
* except for authentication ones
|
||||
*/
|
||||
if (client->auth) {
|
||||
if (msg->hdr.proc != REMOTE_PROC_AUTH_LIST &&
|
||||
msg->hdr.proc != REMOTE_PROC_AUTH_SASL_INIT &&
|
||||
msg->hdr.proc != REMOTE_PROC_AUTH_SASL_START &&
|
||||
msg->hdr.proc != REMOTE_PROC_AUTH_SASL_STEP &&
|
||||
msg->hdr.proc != REMOTE_PROC_AUTH_POLKIT
|
||||
) {
|
||||
/* Explicitly *NOT* calling remoteDispatchAuthError() because
|
||||
we want back-compatability with libvirt clients which don't
|
||||
support the VIR_ERR_AUTH_FAILED error code */
|
||||
remoteDispatchFormatError (&rerr, "%s", _("authentication required"));
|
||||
goto rpc_error;
|
||||
}
|
||||
}
|
||||
|
||||
data = remoteGetDispatchData(msg->hdr.proc);
|
||||
|
||||
if (!data) {
|
||||
remoteDispatchFormatError (&rerr, _("unknown procedure: %d"),
|
||||
msg->hdr.proc);
|
||||
goto rpc_error;
|
||||
}
|
||||
|
||||
/* De-serialize payload with args from the wire message */
|
||||
xdrmem_create (&xdr,
|
||||
msg->buffer + msg->bufferOffset,
|
||||
msg->bufferLength - msg->bufferOffset,
|
||||
XDR_DECODE);
|
||||
if (!((data->args_filter)(&xdr, &args))) {
|
||||
xdr_destroy (&xdr);
|
||||
remoteDispatchFormatError (&rerr, "%s", _("parse args failed"));
|
||||
goto rpc_error;
|
||||
}
|
||||
xdr_destroy (&xdr);
|
||||
|
||||
/* Call function. */
|
||||
conn = client->conn;
|
||||
virMutexUnlock(&client->lock);
|
||||
|
||||
/*
|
||||
* When the RPC handler is called:
|
||||
*
|
||||
* - Server object is unlocked
|
||||
* - Client object is unlocked
|
||||
*
|
||||
* Without locking, it is safe to use:
|
||||
*
|
||||
* 'conn', 'rerr', 'args and 'ret'
|
||||
*/
|
||||
rv = (data->fn)(server, client, conn, &msg->hdr, &rerr, &args, &ret);
|
||||
|
||||
virMutexLock(&server->lock);
|
||||
virMutexLock(&client->lock);
|
||||
virMutexUnlock(&server->lock);
|
||||
|
||||
xdr_free (data->args_filter, (char*)&args);
|
||||
|
||||
if (rv < 0)
|
||||
goto rpc_error;
|
||||
|
||||
/* Return header. We're re-using same message object, so
|
||||
* only need to tweak type/status fields */
|
||||
/*msg->hdr.prog = msg->hdr.prog;*/
|
||||
/*msg->hdr.vers = msg->hdr.vers;*/
|
||||
/*msg->hdr.proc = msg->hdr.proc;*/
|
||||
msg->hdr.type = REMOTE_REPLY;
|
||||
/*msg->hdr.serial = msg->hdr.serial;*/
|
||||
msg->hdr.status = REMOTE_OK;
|
||||
|
||||
if (remoteEncodeClientMessageHeader(msg) < 0) {
|
||||
xdr_free (data->ret_filter, (char*)&ret);
|
||||
goto fatal_error;
|
||||
}
|
||||
|
||||
|
||||
/* Now for the payload */
|
||||
xdrmem_create (&xdr,
|
||||
msg->buffer,
|
||||
msg->bufferLength,
|
||||
XDR_ENCODE);
|
||||
|
||||
if (xdr_setpos(&xdr, msg->bufferOffset) == 0)
|
||||
goto xdr_error;
|
||||
|
||||
/* If OK, serialise return structure, if error serialise error. */
|
||||
/* Serialise reply data */
|
||||
if (!((data->ret_filter) (&xdr, &ret)))
|
||||
goto xdr_error;
|
||||
|
||||
/* Update the length word. */
|
||||
msg->bufferOffset += xdr_getpos (&xdr);
|
||||
len = msg->bufferOffset;
|
||||
if (xdr_setpos (&xdr, 0) == 0)
|
||||
goto xdr_error;
|
||||
|
||||
if (!xdr_u_int (&xdr, &len))
|
||||
goto xdr_error;
|
||||
|
||||
xdr_destroy (&xdr);
|
||||
xdr_free (data->ret_filter, (char*)&ret);
|
||||
|
||||
/* Reset ready for I/O */
|
||||
msg->bufferLength = len;
|
||||
msg->bufferOffset = 0;
|
||||
|
||||
/* Put reply on end of tx queue to send out */
|
||||
qemudClientMessageQueuePush(&client->tx, msg);
|
||||
qemudUpdateClientEvent(client);
|
||||
|
||||
return 0;
|
||||
|
||||
rpc_error:
|
||||
/* Semi-bad stuff happened, we can still try to send back
|
||||
* an RPC error message to client */
|
||||
rv = remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
|
||||
if (rv >= 0)
|
||||
VIR_FREE(msg);
|
||||
|
||||
return rv;
|
||||
|
||||
xdr_error:
|
||||
/* Seriously bad stuff happened, so we'll kill off this client
|
||||
and not send back any RPC error */
|
||||
xdr_free (data->ret_filter, (char*)&ret);
|
||||
xdr_destroy (&xdr);
|
||||
fatal_error:
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
remoteSendStreamData(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream,
|
||||
const char *data,
|
||||
unsigned int len)
|
||||
{
|
||||
struct qemud_client_message *msg;
|
||||
XDR xdr;
|
||||
|
||||
DEBUG("client=%p stream=%p data=%p len=%d", client, stream, data, len);
|
||||
|
||||
if (VIR_ALLOC(msg) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Return header. We're re-using same message object, so
|
||||
* only need to tweak type/status fields */
|
||||
msg->hdr.prog = REMOTE_PROGRAM;
|
||||
msg->hdr.vers = REMOTE_PROTOCOL_VERSION;
|
||||
msg->hdr.proc = stream->procedure;
|
||||
msg->hdr.type = REMOTE_STREAM;
|
||||
msg->hdr.serial = stream->serial;
|
||||
/*
|
||||
* NB
|
||||
* data != NULL + len > 0 => REMOTE_CONTINUE (Sending back data)
|
||||
* data != NULL + len == 0 => REMOTE_CONTINUE (Sending read EOF)
|
||||
* data == NULL => REMOTE_OK (Sending finish handshake confirmation)
|
||||
*/
|
||||
msg->hdr.status = data ? REMOTE_CONTINUE : REMOTE_OK;
|
||||
|
||||
if (remoteEncodeClientMessageHeader(msg) < 0)
|
||||
goto fatal_error;
|
||||
|
||||
if (data && len) {
|
||||
if ((msg->bufferLength - msg->bufferOffset) < len)
|
||||
goto fatal_error;
|
||||
|
||||
/* Now for the payload */
|
||||
xdrmem_create (&xdr,
|
||||
msg->buffer,
|
||||
msg->bufferLength,
|
||||
XDR_ENCODE);
|
||||
|
||||
/* Skip over existing header already written */
|
||||
if (xdr_setpos(&xdr, msg->bufferOffset) == 0)
|
||||
goto xdr_error;
|
||||
|
||||
memcpy(msg->buffer + msg->bufferOffset, data, len);
|
||||
msg->bufferOffset += len;
|
||||
|
||||
/* Update the length word. */
|
||||
len = msg->bufferOffset;
|
||||
if (xdr_setpos (&xdr, 0) == 0)
|
||||
goto xdr_error;
|
||||
|
||||
if (!xdr_u_int (&xdr, &len))
|
||||
goto xdr_error;
|
||||
|
||||
xdr_destroy (&xdr);
|
||||
|
||||
DEBUG("Total %d", msg->bufferOffset);
|
||||
}
|
||||
if (data)
|
||||
msg->streamTX = 1;
|
||||
|
||||
/* Reset ready for I/O */
|
||||
msg->bufferLength = msg->bufferOffset;
|
||||
msg->bufferOffset = 0;
|
||||
|
||||
/* Put reply on end of tx queue to send out */
|
||||
qemudClientMessageQueuePush(&client->tx, msg);
|
||||
qemudUpdateClientEvent(client);
|
||||
|
||||
return 0;
|
||||
|
||||
xdr_error:
|
||||
xdr_destroy (&xdr);
|
||||
fatal_error:
|
||||
VIR_FREE(msg);
|
||||
return -1;
|
||||
}
|
||||
70
daemon/dispatch.h
Normal file
70
daemon/dispatch.h
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* dispatch.h: RPC message dispatching infrastructure
|
||||
*
|
||||
* Copyright (C) 2007, 2008, 2009 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Richard W.M. Jones <rjones@redhat.com>
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
#ifndef __LIBVIRTD_DISPATCH_H__
|
||||
# define __LIBVIRTD_DISPATCH_H__
|
||||
|
||||
|
||||
# include "libvirtd.h"
|
||||
|
||||
|
||||
int
|
||||
remoteDecodeClientMessageHeader (struct qemud_client_message *req);
|
||||
int
|
||||
remoteEncodeClientMessageHeader (struct qemud_client_message *req);
|
||||
|
||||
int
|
||||
remoteDispatchClientRequest (struct qemud_server *server,
|
||||
struct qemud_client *client,
|
||||
struct qemud_client_message *req);
|
||||
|
||||
|
||||
void remoteDispatchFormatError (remote_error *rerr,
|
||||
const char *fmt, ...)
|
||||
ATTRIBUTE_FMT_PRINTF(2, 3);
|
||||
|
||||
void remoteDispatchAuthError (remote_error *rerr);
|
||||
void remoteDispatchGenericError (remote_error *rerr);
|
||||
void remoteDispatchOOMError (remote_error *rerr);
|
||||
void remoteDispatchConnError (remote_error *rerr,
|
||||
virConnectPtr conn);
|
||||
|
||||
|
||||
int
|
||||
remoteSerializeReplyError(struct qemud_client *client,
|
||||
remote_error *rerr,
|
||||
remote_message_header *req);
|
||||
int
|
||||
remoteSerializeStreamError(struct qemud_client *client,
|
||||
remote_error *rerr,
|
||||
int proc,
|
||||
int serial);
|
||||
|
||||
|
||||
int
|
||||
remoteSendStreamData(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream,
|
||||
const char *data,
|
||||
unsigned int len);
|
||||
|
||||
#endif /* __LIBVIRTD_DISPATCH_H__ */
|
||||
713
daemon/event.c
Normal file
713
daemon/event.c
Normal file
@ -0,0 +1,713 @@
|
||||
/*
|
||||
* event.c: event loop for monitoring file handles
|
||||
*
|
||||
* Copyright (C) 2007, 2010 Red Hat, Inc.
|
||||
* Copyright (C) 2007 Daniel P. Berrange
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <poll.h>
|
||||
#include <sys/time.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "threads.h"
|
||||
#include "logging.h"
|
||||
#include "event.h"
|
||||
#include "memory.h"
|
||||
#include "util.h"
|
||||
#include "ignore-value.h"
|
||||
|
||||
#define EVENT_DEBUG(fmt, ...) DEBUG(fmt, __VA_ARGS__)
|
||||
|
||||
static int virEventInterruptLocked(void);
|
||||
|
||||
/* State for a single file handle being monitored */
|
||||
struct virEventHandle {
|
||||
int watch;
|
||||
int fd;
|
||||
int events;
|
||||
virEventHandleCallback cb;
|
||||
virFreeCallback ff;
|
||||
void *opaque;
|
||||
int deleted;
|
||||
};
|
||||
|
||||
/* State for a single timer being generated */
|
||||
struct virEventTimeout {
|
||||
int timer;
|
||||
int frequency;
|
||||
unsigned long long expiresAt;
|
||||
virEventTimeoutCallback cb;
|
||||
virFreeCallback ff;
|
||||
void *opaque;
|
||||
int deleted;
|
||||
};
|
||||
|
||||
/* Allocate extra slots for virEventHandle/virEventTimeout
|
||||
records in this multiple */
|
||||
#define EVENT_ALLOC_EXTENT 10
|
||||
|
||||
/* State for the main event loop */
|
||||
struct virEventLoop {
|
||||
pthread_mutex_t lock;
|
||||
int running;
|
||||
pthread_t leader;
|
||||
int wakeupfd[2];
|
||||
int handlesCount;
|
||||
int handlesAlloc;
|
||||
struct virEventHandle *handles;
|
||||
int timeoutsCount;
|
||||
int timeoutsAlloc;
|
||||
struct virEventTimeout *timeouts;
|
||||
};
|
||||
|
||||
/* Only have one event loop */
|
||||
static struct virEventLoop eventLoop;
|
||||
|
||||
/* Unique ID for the next FD watch to be registered */
|
||||
static int nextWatch = 1;
|
||||
|
||||
/* Unique ID for the next timer to be registered */
|
||||
static int nextTimer = 1;
|
||||
|
||||
static void virEventLock(void)
|
||||
{
|
||||
pthread_mutex_lock(&eventLoop.lock);
|
||||
}
|
||||
|
||||
static void virEventUnlock(void)
|
||||
{
|
||||
pthread_mutex_unlock(&eventLoop.lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Register a callback for monitoring file handle events.
|
||||
* NB, it *must* be safe to call this from within a callback
|
||||
* For this reason we only ever append to existing list.
|
||||
*/
|
||||
int virEventAddHandleImpl(int fd, int events,
|
||||
virEventHandleCallback cb,
|
||||
void *opaque,
|
||||
virFreeCallback ff) {
|
||||
int watch;
|
||||
EVENT_DEBUG("Add handle fd=%d events=%d cb=%p opaque=%p", fd, events, cb, opaque);
|
||||
virEventLock();
|
||||
if (eventLoop.handlesCount == eventLoop.handlesAlloc) {
|
||||
EVENT_DEBUG("Used %d handle slots, adding %d more",
|
||||
eventLoop.handlesAlloc, EVENT_ALLOC_EXTENT);
|
||||
if (VIR_REALLOC_N(eventLoop.handles,
|
||||
(eventLoop.handlesAlloc + EVENT_ALLOC_EXTENT)) < 0) {
|
||||
virEventUnlock();
|
||||
return -1;
|
||||
}
|
||||
eventLoop.handlesAlloc += EVENT_ALLOC_EXTENT;
|
||||
}
|
||||
|
||||
watch = nextWatch++;
|
||||
|
||||
eventLoop.handles[eventLoop.handlesCount].watch = watch;
|
||||
eventLoop.handles[eventLoop.handlesCount].fd = fd;
|
||||
eventLoop.handles[eventLoop.handlesCount].events =
|
||||
virEventHandleTypeToPollEvent(events);
|
||||
eventLoop.handles[eventLoop.handlesCount].cb = cb;
|
||||
eventLoop.handles[eventLoop.handlesCount].ff = ff;
|
||||
eventLoop.handles[eventLoop.handlesCount].opaque = opaque;
|
||||
eventLoop.handles[eventLoop.handlesCount].deleted = 0;
|
||||
|
||||
eventLoop.handlesCount++;
|
||||
|
||||
virEventInterruptLocked();
|
||||
virEventUnlock();
|
||||
|
||||
return watch;
|
||||
}
|
||||
|
||||
void virEventUpdateHandleImpl(int watch, int events) {
|
||||
int i;
|
||||
EVENT_DEBUG("Update handle w=%d e=%d", watch, events);
|
||||
|
||||
if (watch <= 0) {
|
||||
VIR_WARN("Ignoring invalid update watch %d", watch);
|
||||
return;
|
||||
}
|
||||
|
||||
virEventLock();
|
||||
for (i = 0 ; i < eventLoop.handlesCount ; i++) {
|
||||
if (eventLoop.handles[i].watch == watch) {
|
||||
eventLoop.handles[i].events =
|
||||
virEventHandleTypeToPollEvent(events);
|
||||
virEventInterruptLocked();
|
||||
break;
|
||||
}
|
||||
}
|
||||
virEventUnlock();
|
||||
}
|
||||
|
||||
/*
|
||||
* Unregister a callback from a file handle
|
||||
* NB, it *must* be safe to call this from within a callback
|
||||
* For this reason we only ever set a flag in the existing list.
|
||||
* Actual deletion will be done out-of-band
|
||||
*/
|
||||
int virEventRemoveHandleImpl(int watch) {
|
||||
int i;
|
||||
EVENT_DEBUG("Remove handle w=%d", watch);
|
||||
|
||||
if (watch <= 0) {
|
||||
VIR_WARN("Ignoring invalid remove watch %d", watch);
|
||||
return -1;
|
||||
}
|
||||
|
||||
virEventLock();
|
||||
for (i = 0 ; i < eventLoop.handlesCount ; i++) {
|
||||
if (eventLoop.handles[i].deleted)
|
||||
continue;
|
||||
|
||||
if (eventLoop.handles[i].watch == watch) {
|
||||
EVENT_DEBUG("mark delete %d %d", i, eventLoop.handles[i].fd);
|
||||
eventLoop.handles[i].deleted = 1;
|
||||
virEventInterruptLocked();
|
||||
virEventUnlock();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
virEventUnlock();
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Register a callback for a timer event
|
||||
* NB, it *must* be safe to call this from within a callback
|
||||
* For this reason we only ever append to existing list.
|
||||
*/
|
||||
int virEventAddTimeoutImpl(int frequency,
|
||||
virEventTimeoutCallback cb,
|
||||
void *opaque,
|
||||
virFreeCallback ff) {
|
||||
struct timeval now;
|
||||
int ret;
|
||||
EVENT_DEBUG("Adding timer %d with %d ms freq", nextTimer, frequency);
|
||||
if (gettimeofday(&now, NULL) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
virEventLock();
|
||||
if (eventLoop.timeoutsCount == eventLoop.timeoutsAlloc) {
|
||||
EVENT_DEBUG("Used %d timeout slots, adding %d more",
|
||||
eventLoop.timeoutsAlloc, EVENT_ALLOC_EXTENT);
|
||||
if (VIR_REALLOC_N(eventLoop.timeouts,
|
||||
(eventLoop.timeoutsAlloc + EVENT_ALLOC_EXTENT)) < 0) {
|
||||
virEventUnlock();
|
||||
return -1;
|
||||
}
|
||||
eventLoop.timeoutsAlloc += EVENT_ALLOC_EXTENT;
|
||||
}
|
||||
|
||||
eventLoop.timeouts[eventLoop.timeoutsCount].timer = nextTimer++;
|
||||
eventLoop.timeouts[eventLoop.timeoutsCount].frequency = frequency;
|
||||
eventLoop.timeouts[eventLoop.timeoutsCount].cb = cb;
|
||||
eventLoop.timeouts[eventLoop.timeoutsCount].ff = ff;
|
||||
eventLoop.timeouts[eventLoop.timeoutsCount].opaque = opaque;
|
||||
eventLoop.timeouts[eventLoop.timeoutsCount].deleted = 0;
|
||||
eventLoop.timeouts[eventLoop.timeoutsCount].expiresAt =
|
||||
frequency >= 0 ? frequency +
|
||||
(((unsigned long long)now.tv_sec)*1000) +
|
||||
(((unsigned long long)now.tv_usec)/1000) : 0;
|
||||
|
||||
eventLoop.timeoutsCount++;
|
||||
ret = nextTimer-1;
|
||||
virEventInterruptLocked();
|
||||
virEventUnlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
void virEventUpdateTimeoutImpl(int timer, int frequency) {
|
||||
struct timeval tv;
|
||||
int i;
|
||||
EVENT_DEBUG("Updating timer %d timeout with %d ms freq", timer, frequency);
|
||||
|
||||
if (timer <= 0) {
|
||||
VIR_WARN("Ignoring invalid update timer %d", timer);
|
||||
return;
|
||||
}
|
||||
|
||||
if (gettimeofday(&tv, NULL) < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
virEventLock();
|
||||
for (i = 0 ; i < eventLoop.timeoutsCount ; i++) {
|
||||
if (eventLoop.timeouts[i].timer == timer) {
|
||||
eventLoop.timeouts[i].frequency = frequency;
|
||||
eventLoop.timeouts[i].expiresAt =
|
||||
frequency >= 0 ? frequency +
|
||||
(((unsigned long long)tv.tv_sec)*1000) +
|
||||
(((unsigned long long)tv.tv_usec)/1000) : 0;
|
||||
virEventInterruptLocked();
|
||||
break;
|
||||
}
|
||||
}
|
||||
virEventUnlock();
|
||||
}
|
||||
|
||||
/*
|
||||
* Unregister a callback for a timer
|
||||
* NB, it *must* be safe to call this from within a callback
|
||||
* For this reason we only ever set a flag in the existing list.
|
||||
* Actual deletion will be done out-of-band
|
||||
*/
|
||||
int virEventRemoveTimeoutImpl(int timer) {
|
||||
int i;
|
||||
EVENT_DEBUG("Remove timer %d", timer);
|
||||
|
||||
if (timer <= 0) {
|
||||
VIR_WARN("Ignoring invalid remove timer %d", timer);
|
||||
return -1;
|
||||
}
|
||||
|
||||
virEventLock();
|
||||
for (i = 0 ; i < eventLoop.timeoutsCount ; i++) {
|
||||
if (eventLoop.timeouts[i].deleted)
|
||||
continue;
|
||||
|
||||
if (eventLoop.timeouts[i].timer == timer) {
|
||||
eventLoop.timeouts[i].deleted = 1;
|
||||
virEventInterruptLocked();
|
||||
virEventUnlock();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
virEventUnlock();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Iterates over all registered timeouts and determine which
|
||||
* will be the first to expire.
|
||||
* @timeout: filled with expiry time of soonest timer, or -1 if
|
||||
* no timeout is pending
|
||||
* returns: 0 on success, -1 on error
|
||||
*/
|
||||
static int virEventCalculateTimeout(int *timeout) {
|
||||
unsigned long long then = 0;
|
||||
int i;
|
||||
EVENT_DEBUG("Calculate expiry of %d timers", eventLoop.timeoutsCount);
|
||||
/* Figure out if we need a timeout */
|
||||
for (i = 0 ; i < eventLoop.timeoutsCount ; i++) {
|
||||
if (eventLoop.timeouts[i].frequency < 0)
|
||||
continue;
|
||||
|
||||
EVENT_DEBUG("Got a timeout scheduled for %llu", eventLoop.timeouts[i].expiresAt);
|
||||
if (then == 0 ||
|
||||
eventLoop.timeouts[i].expiresAt < then)
|
||||
then = eventLoop.timeouts[i].expiresAt;
|
||||
}
|
||||
|
||||
/* Calculate how long we should wait for a timeout if needed */
|
||||
if (then > 0) {
|
||||
struct timeval tv;
|
||||
|
||||
if (gettimeofday(&tv, NULL) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
*timeout = then -
|
||||
((((unsigned long long)tv.tv_sec)*1000) +
|
||||
(((unsigned long long)tv.tv_usec)/1000));
|
||||
|
||||
if (*timeout < 0)
|
||||
*timeout = 0;
|
||||
} else {
|
||||
*timeout = -1;
|
||||
}
|
||||
|
||||
EVENT_DEBUG("Timeout at %llu due in %d ms", then, *timeout);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate a pollfd array containing data for all registered
|
||||
* file handles. The caller must free the returned data struct
|
||||
* returns: the pollfd array, or NULL on error
|
||||
*/
|
||||
static struct pollfd *virEventMakePollFDs(int *nfds) {
|
||||
struct pollfd *fds;
|
||||
int i;
|
||||
|
||||
*nfds = 0;
|
||||
for (i = 0 ; i < eventLoop.handlesCount ; i++) {
|
||||
if (eventLoop.handles[i].events)
|
||||
(*nfds)++;
|
||||
}
|
||||
|
||||
/* Setup the poll file handle data structs */
|
||||
if (VIR_ALLOC_N(fds, *nfds) < 0)
|
||||
return NULL;
|
||||
|
||||
*nfds = 0;
|
||||
for (i = 0 ; i < eventLoop.handlesCount ; i++) {
|
||||
EVENT_DEBUG("Prepare n=%d w=%d, f=%d e=%d", i,
|
||||
eventLoop.handles[i].watch,
|
||||
eventLoop.handles[i].fd,
|
||||
eventLoop.handles[i].events);
|
||||
if (!eventLoop.handles[i].events)
|
||||
continue;
|
||||
fds[*nfds].fd = eventLoop.handles[i].fd;
|
||||
fds[*nfds].events = eventLoop.handles[i].events;
|
||||
fds[*nfds].revents = 0;
|
||||
(*nfds)++;
|
||||
//EVENT_DEBUG("Wait for %d %d", eventLoop.handles[i].fd, eventLoop.handles[i].events);
|
||||
}
|
||||
|
||||
return fds;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Iterate over all timers and determine if any have expired.
|
||||
* Invoke the user supplied callback for each timer whose
|
||||
* expiry time is met, and schedule the next timeout. Does
|
||||
* not try to 'catch up' on time if the actual expiry time
|
||||
* was later than the requested time.
|
||||
*
|
||||
* This method must cope with new timers being registered
|
||||
* by a callback, and must skip any timers marked as deleted.
|
||||
*
|
||||
* Returns 0 upon success, -1 if an error occurred
|
||||
*/
|
||||
static int virEventDispatchTimeouts(void) {
|
||||
struct timeval tv;
|
||||
unsigned long long now;
|
||||
int i;
|
||||
/* Save this now - it may be changed during dispatch */
|
||||
int ntimeouts = eventLoop.timeoutsCount;
|
||||
DEBUG("Dispatch %d", ntimeouts);
|
||||
|
||||
if (gettimeofday(&tv, NULL) < 0) {
|
||||
return -1;
|
||||
}
|
||||
now = (((unsigned long long)tv.tv_sec)*1000) +
|
||||
(((unsigned long long)tv.tv_usec)/1000);
|
||||
|
||||
for (i = 0 ; i < ntimeouts ; i++) {
|
||||
if (eventLoop.timeouts[i].deleted || eventLoop.timeouts[i].frequency < 0)
|
||||
continue;
|
||||
|
||||
/* Add 20ms fuzz so we don't pointlessly spin doing
|
||||
* <10ms sleeps, particularly on kernels with low HZ
|
||||
* it is fine that a timer expires 20ms earlier than
|
||||
* requested
|
||||
*/
|
||||
if (eventLoop.timeouts[i].expiresAt <= (now+20)) {
|
||||
virEventTimeoutCallback cb = eventLoop.timeouts[i].cb;
|
||||
int timer = eventLoop.timeouts[i].timer;
|
||||
void *opaque = eventLoop.timeouts[i].opaque;
|
||||
eventLoop.timeouts[i].expiresAt =
|
||||
now + eventLoop.timeouts[i].frequency;
|
||||
|
||||
virEventUnlock();
|
||||
(cb)(timer, opaque);
|
||||
virEventLock();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Iterate over all file handles and dispatch any which
|
||||
* have pending events listed in the poll() data. Invoke
|
||||
* the user supplied callback for each handle which has
|
||||
* pending events
|
||||
*
|
||||
* This method must cope with new handles being registered
|
||||
* by a callback, and must skip any handles marked as deleted.
|
||||
*
|
||||
* Returns 0 upon success, -1 if an error occurred
|
||||
*/
|
||||
static int virEventDispatchHandles(int nfds, struct pollfd *fds) {
|
||||
int i, n;
|
||||
DEBUG("Dispatch %d", nfds);
|
||||
|
||||
/* NB, use nfds not eventLoop.handlesCount, because new
|
||||
* fds might be added on end of list, and they're not
|
||||
* in the fds array we've got */
|
||||
for (i = 0, n = 0 ; n < nfds && i < eventLoop.handlesCount ; n++) {
|
||||
while ((eventLoop.handles[i].fd != fds[n].fd ||
|
||||
eventLoop.handles[i].events == 0) &&
|
||||
i < eventLoop.handlesCount) {
|
||||
i++;
|
||||
}
|
||||
if (i == eventLoop.handlesCount)
|
||||
break;
|
||||
|
||||
DEBUG("i=%d w=%d", i, eventLoop.handles[i].watch);
|
||||
if (eventLoop.handles[i].deleted) {
|
||||
EVENT_DEBUG("Skip deleted n=%d w=%d f=%d", i,
|
||||
eventLoop.handles[i].watch, eventLoop.handles[i].fd);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fds[n].revents) {
|
||||
virEventHandleCallback cb = eventLoop.handles[i].cb;
|
||||
void *opaque = eventLoop.handles[i].opaque;
|
||||
int hEvents = virPollEventToEventHandleType(fds[n].revents);
|
||||
EVENT_DEBUG("Dispatch n=%d f=%d w=%d e=%d %p", i,
|
||||
fds[n].fd, eventLoop.handles[i].watch,
|
||||
fds[n].revents, eventLoop.handles[i].opaque);
|
||||
virEventUnlock();
|
||||
(cb)(eventLoop.handles[i].watch,
|
||||
fds[n].fd, hEvents, opaque);
|
||||
virEventLock();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Used post dispatch to actually remove any timers that
|
||||
* were previously marked as deleted. This asynchronous
|
||||
* cleanup is needed to make dispatch re-entrant safe.
|
||||
*/
|
||||
static int virEventCleanupTimeouts(void) {
|
||||
int i;
|
||||
DEBUG("Cleanup %d", eventLoop.timeoutsCount);
|
||||
|
||||
/* Remove deleted entries, shuffling down remaining
|
||||
* entries as needed to form contiguous series
|
||||
*/
|
||||
for (i = 0 ; i < eventLoop.timeoutsCount ; ) {
|
||||
if (!eventLoop.timeouts[i].deleted) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
EVENT_DEBUG("Purging timeout %d with id %d", i, eventLoop.timeouts[i].timer);
|
||||
if (eventLoop.timeouts[i].ff)
|
||||
(eventLoop.timeouts[i].ff)(eventLoop.timeouts[i].opaque);
|
||||
|
||||
if ((i+1) < eventLoop.timeoutsCount) {
|
||||
memmove(eventLoop.timeouts+i,
|
||||
eventLoop.timeouts+i+1,
|
||||
sizeof(struct virEventTimeout)*(eventLoop.timeoutsCount-(i+1)));
|
||||
}
|
||||
eventLoop.timeoutsCount--;
|
||||
}
|
||||
|
||||
/* Release some memory if we've got a big chunk free */
|
||||
if ((eventLoop.timeoutsAlloc - EVENT_ALLOC_EXTENT) > eventLoop.timeoutsCount) {
|
||||
EVENT_DEBUG("Releasing %d out of %d timeout slots used, releasing %d",
|
||||
eventLoop.timeoutsCount, eventLoop.timeoutsAlloc, EVENT_ALLOC_EXTENT);
|
||||
if (VIR_REALLOC_N(eventLoop.timeouts,
|
||||
(eventLoop.timeoutsAlloc - EVENT_ALLOC_EXTENT)) < 0)
|
||||
return -1;
|
||||
eventLoop.timeoutsAlloc -= EVENT_ALLOC_EXTENT;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Used post dispatch to actually remove any handles that
|
||||
* were previously marked as deleted. This asynchronous
|
||||
* cleanup is needed to make dispatch re-entrant safe.
|
||||
*/
|
||||
static int virEventCleanupHandles(void) {
|
||||
int i;
|
||||
DEBUG("Cleanupo %d", eventLoop.handlesCount);
|
||||
|
||||
/* Remove deleted entries, shuffling down remaining
|
||||
* entries as needed to form contiguous series
|
||||
*/
|
||||
for (i = 0 ; i < eventLoop.handlesCount ; ) {
|
||||
if (!eventLoop.handles[i].deleted) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (eventLoop.handles[i].ff)
|
||||
(eventLoop.handles[i].ff)(eventLoop.handles[i].opaque);
|
||||
|
||||
if ((i+1) < eventLoop.handlesCount) {
|
||||
memmove(eventLoop.handles+i,
|
||||
eventLoop.handles+i+1,
|
||||
sizeof(struct virEventHandle)*(eventLoop.handlesCount-(i+1)));
|
||||
}
|
||||
eventLoop.handlesCount--;
|
||||
}
|
||||
|
||||
/* Release some memory if we've got a big chunk free */
|
||||
if ((eventLoop.handlesAlloc - EVENT_ALLOC_EXTENT) > eventLoop.handlesCount) {
|
||||
EVENT_DEBUG("Releasing %d out of %d handles slots used, releasing %d",
|
||||
eventLoop.handlesCount, eventLoop.handlesAlloc, EVENT_ALLOC_EXTENT);
|
||||
if (VIR_REALLOC_N(eventLoop.handles,
|
||||
(eventLoop.handlesAlloc - EVENT_ALLOC_EXTENT)) < 0)
|
||||
return -1;
|
||||
eventLoop.handlesAlloc -= EVENT_ALLOC_EXTENT;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Run a single iteration of the event loop, blocking until
|
||||
* at least one file handle has an event, or a timer expires
|
||||
*/
|
||||
int virEventRunOnce(void) {
|
||||
struct pollfd *fds = NULL;
|
||||
int ret, timeout, nfds;
|
||||
|
||||
virEventLock();
|
||||
eventLoop.running = 1;
|
||||
eventLoop.leader = pthread_self();
|
||||
|
||||
if (virEventCleanupTimeouts() < 0 ||
|
||||
virEventCleanupHandles() < 0)
|
||||
goto error;
|
||||
|
||||
if (!(fds = virEventMakePollFDs(&nfds)) ||
|
||||
virEventCalculateTimeout(&timeout) < 0)
|
||||
goto error;
|
||||
|
||||
virEventUnlock();
|
||||
|
||||
retry:
|
||||
EVENT_DEBUG("Poll on %d handles %p timeout %d", nfds, fds, timeout);
|
||||
ret = poll(fds, nfds, timeout);
|
||||
EVENT_DEBUG("Poll got %d event", ret);
|
||||
if (ret < 0) {
|
||||
if (errno == EINTR) {
|
||||
goto retry;
|
||||
}
|
||||
goto error_unlocked;
|
||||
}
|
||||
|
||||
virEventLock();
|
||||
if (virEventDispatchTimeouts() < 0)
|
||||
goto error;
|
||||
|
||||
if (ret > 0 &&
|
||||
virEventDispatchHandles(nfds, fds) < 0)
|
||||
goto error;
|
||||
|
||||
if (virEventCleanupTimeouts() < 0 ||
|
||||
virEventCleanupHandles() < 0)
|
||||
goto error;
|
||||
|
||||
eventLoop.running = 0;
|
||||
virEventUnlock();
|
||||
VIR_FREE(fds);
|
||||
return 0;
|
||||
|
||||
error:
|
||||
virEventUnlock();
|
||||
error_unlocked:
|
||||
VIR_FREE(fds);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void virEventHandleWakeup(int watch ATTRIBUTE_UNUSED,
|
||||
int fd,
|
||||
int events ATTRIBUTE_UNUSED,
|
||||
void *opaque ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char c;
|
||||
virEventLock();
|
||||
ignore_value(saferead(fd, &c, sizeof(c)));
|
||||
virEventUnlock();
|
||||
}
|
||||
|
||||
int virEventInit(void)
|
||||
{
|
||||
if (pthread_mutex_init(&eventLoop.lock, NULL) != 0)
|
||||
return -1;
|
||||
|
||||
if (pipe(eventLoop.wakeupfd) < 0 ||
|
||||
virSetNonBlock(eventLoop.wakeupfd[0]) < 0 ||
|
||||
virSetNonBlock(eventLoop.wakeupfd[1]) < 0 ||
|
||||
virSetCloseExec(eventLoop.wakeupfd[0]) < 0 ||
|
||||
virSetCloseExec(eventLoop.wakeupfd[1]) < 0)
|
||||
return -1;
|
||||
|
||||
if (virEventAddHandleImpl(eventLoop.wakeupfd[0],
|
||||
VIR_EVENT_HANDLE_READABLE,
|
||||
virEventHandleWakeup, NULL, NULL) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int virEventInterruptLocked(void)
|
||||
{
|
||||
char c = '\0';
|
||||
|
||||
if (!eventLoop.running ||
|
||||
pthread_self() == eventLoop.leader) {
|
||||
VIR_DEBUG("Skip interrupt, %d %d", eventLoop.running, (int)eventLoop.leader);
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIR_DEBUG0("Interrupting");
|
||||
if (safewrite(eventLoop.wakeupfd[1], &c, sizeof(c)) != sizeof(c))
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int virEventInterrupt(void)
|
||||
{
|
||||
int ret;
|
||||
virEventLock();
|
||||
ret = virEventInterruptLocked();
|
||||
virEventUnlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
virEventHandleTypeToPollEvent(int events)
|
||||
{
|
||||
int ret = 0;
|
||||
if(events & VIR_EVENT_HANDLE_READABLE)
|
||||
ret |= POLLIN;
|
||||
if(events & VIR_EVENT_HANDLE_WRITABLE)
|
||||
ret |= POLLOUT;
|
||||
if(events & VIR_EVENT_HANDLE_ERROR)
|
||||
ret |= POLLERR;
|
||||
if(events & VIR_EVENT_HANDLE_HANGUP)
|
||||
ret |= POLLHUP;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
virPollEventToEventHandleType(int events)
|
||||
{
|
||||
int ret = 0;
|
||||
if(events & POLLIN)
|
||||
ret |= VIR_EVENT_HANDLE_READABLE;
|
||||
if(events & POLLOUT)
|
||||
ret |= VIR_EVENT_HANDLE_WRITABLE;
|
||||
if(events & POLLERR)
|
||||
ret |= VIR_EVENT_HANDLE_ERROR;
|
||||
if(events & POLLNVAL) /* Treat NVAL as error, since libvirt doesn't distinguish */
|
||||
ret |= VIR_EVENT_HANDLE_ERROR;
|
||||
if(events & POLLHUP)
|
||||
ret |= VIR_EVENT_HANDLE_HANGUP;
|
||||
return ret;
|
||||
}
|
||||
134
daemon/event.h
Normal file
134
daemon/event.h
Normal file
@ -0,0 +1,134 @@
|
||||
/*
|
||||
* event.h: event loop for monitoring file handles
|
||||
*
|
||||
* Copyright (C) 2007 Daniel P. Berrange
|
||||
* Copyright (C) 2007 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
#ifndef __VIRTD_EVENT_H__
|
||||
# define __VIRTD_EVENT_H__
|
||||
|
||||
# include "internal.h"
|
||||
|
||||
/**
|
||||
* virEventAddHandleImpl: register a callback for monitoring file handle events
|
||||
*
|
||||
* @fd: file handle to monitor for events
|
||||
* @events: bitset of events to watch from POLLnnn constants
|
||||
* @cb: callback to invoke when an event occurs
|
||||
* @opaque: user data to pass to callback
|
||||
*
|
||||
* returns -1 if the file handle cannot be registered, 0 upon success
|
||||
*/
|
||||
int virEventAddHandleImpl(int fd, int events,
|
||||
virEventHandleCallback cb,
|
||||
void *opaque,
|
||||
virFreeCallback ff);
|
||||
|
||||
/**
|
||||
* virEventUpdateHandleImpl: change event set for a monitored file handle
|
||||
*
|
||||
* @watch: watch whose handle to update
|
||||
* @events: bitset of events to watch from POLLnnn constants
|
||||
*
|
||||
* Will not fail if fd exists
|
||||
*/
|
||||
void virEventUpdateHandleImpl(int watch, int events);
|
||||
|
||||
/**
|
||||
* virEventRemoveHandleImpl: unregister a callback from a file handle
|
||||
*
|
||||
* @watch: watch whose handle to remove
|
||||
*
|
||||
* returns -1 if the file handle was not registered, 0 upon success
|
||||
*/
|
||||
int virEventRemoveHandleImpl(int watch);
|
||||
|
||||
/**
|
||||
* virEventAddTimeoutImpl: register a callback for a timer event
|
||||
*
|
||||
* @frequency: time between events in milliseconds
|
||||
* @cb: callback to invoke when an event occurs
|
||||
* @opaque: user data to pass to callback
|
||||
*
|
||||
* Setting frequency to -1 will disable the timer. Setting the frequency
|
||||
* to zero will cause it to fire on every event loop iteration.
|
||||
*
|
||||
* returns -1 if the file handle cannot be registered, a positive
|
||||
* integer timer id upon success
|
||||
*/
|
||||
int virEventAddTimeoutImpl(int frequency,
|
||||
virEventTimeoutCallback cb,
|
||||
void *opaque,
|
||||
virFreeCallback ff);
|
||||
|
||||
/**
|
||||
* virEventUpdateTimeoutImpl: change frequency for a timer
|
||||
*
|
||||
* @timer: timer id to change
|
||||
* @frequency: time between events in milliseconds
|
||||
*
|
||||
* Setting frequency to -1 will disable the timer. Setting the frequency
|
||||
* to zero will cause it to fire on every event loop iteration.
|
||||
*
|
||||
* Will not fail if timer exists
|
||||
*/
|
||||
void virEventUpdateTimeoutImpl(int timer, int frequency);
|
||||
|
||||
/**
|
||||
* virEventRemoveTimeoutImpl: unregister a callback for a timer
|
||||
*
|
||||
* @timer: the timer id to remove
|
||||
*
|
||||
* returns -1 if the timer was not registered, 0 upon success
|
||||
*/
|
||||
int virEventRemoveTimeoutImpl(int timer);
|
||||
|
||||
/**
|
||||
* virEventInit: Initialize the event loop
|
||||
*
|
||||
* returns -1 if initialization failed
|
||||
*/
|
||||
int virEventInit(void);
|
||||
|
||||
/**
|
||||
* virEventRunOnce: run a single iteration of the event loop.
|
||||
*
|
||||
* Blocks the caller until at least one file handle has an
|
||||
* event or the first timer expires.
|
||||
*
|
||||
* returns -1 if the event monitoring failed
|
||||
*/
|
||||
int virEventRunOnce(void);
|
||||
|
||||
int
|
||||
virEventHandleTypeToPollEvent(int events);
|
||||
int
|
||||
virPollEventToEventHandleType(int events);
|
||||
|
||||
|
||||
/**
|
||||
* virEventInterrupt: wakeup any thread waiting in poll()
|
||||
*
|
||||
* return -1 if wakup failed
|
||||
*/
|
||||
int virEventInterrupt(void);
|
||||
|
||||
|
||||
#endif /* __VIRTD_EVENT_H__ */
|
||||
304
daemon/libvirt-guests.init.in
Normal file
304
daemon/libvirt-guests.init.in
Normal file
@ -0,0 +1,304 @@
|
||||
#!/bin/sh
|
||||
|
||||
# the following is the LSB init header
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: libvirt-guests
|
||||
# Required-Start: libvirtd
|
||||
# Required-Stop: libvirtd
|
||||
# Default-Start: 3 4 5
|
||||
# Short-Description: suspend/resume libvirt guests on shutdown/boot
|
||||
# Description: This is a script for suspending active libvirt guests
|
||||
# on shutdown and resuming them on next boot
|
||||
# See http://libvirt.org
|
||||
### END INIT INFO
|
||||
|
||||
# the following is chkconfig init header
|
||||
#
|
||||
# libvirt-guests: suspend/resume libvirt guests on shutdown/boot
|
||||
#
|
||||
# chkconfig: 345 98 02
|
||||
# description: This is a script for suspending active libvirt guests \
|
||||
# on shutdown and resuming them on next boot \
|
||||
# See http://libvirt.org
|
||||
#
|
||||
|
||||
sysconfdir=@sysconfdir@
|
||||
localstatedir=@localstatedir@
|
||||
|
||||
# Source function library.
|
||||
. "$sysconfdir"/rc.d/init.d/functions
|
||||
|
||||
URIS=default
|
||||
ON_BOOT=start
|
||||
ON_SHUTDOWN=suspend
|
||||
SHUTDOWN_TIMEOUT=0
|
||||
|
||||
test -f "$sysconfdir"/sysconfig/libvirt-guests && . "$sysconfdir"/sysconfig/libvirt-guests
|
||||
|
||||
LISTFILE="$localstatedir"/lib/libvirt/libvirt-guests
|
||||
VAR_SUBSYS_LIBVIRT_GUESTS="$localstatedir"/lock/subsys/libvirt-guests
|
||||
|
||||
RETVAL=0
|
||||
|
||||
retval() {
|
||||
"$@"
|
||||
if [ $? -ne 0 ]; then
|
||||
RETVAL=1
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
run_virsh() {
|
||||
uri=$1
|
||||
shift
|
||||
|
||||
if [ "x$uri" = xdefault ]; then
|
||||
conn=
|
||||
else
|
||||
conn="-c $uri"
|
||||
fi
|
||||
|
||||
virsh $conn "$@" </dev/null
|
||||
}
|
||||
|
||||
run_virsh_c() {
|
||||
( export LC_ALL=C; run_virsh "$@" )
|
||||
}
|
||||
|
||||
list_guests() {
|
||||
uri=$1
|
||||
|
||||
list=$(run_virsh_c $uri list)
|
||||
if [ $? -ne 0 ]; then
|
||||
RETVAL=1
|
||||
return 1
|
||||
fi
|
||||
|
||||
uuids=
|
||||
for id in $(echo "$list" | awk 'NR > 2 {print $1}'); do
|
||||
uuid=$(run_virsh_c $uri dominfo $id | awk '/^UUID:/{print $2}')
|
||||
if [ -z "$uuid" ]; then
|
||||
RETVAL=1
|
||||
return 1
|
||||
fi
|
||||
uuids="$uuids $uuid"
|
||||
done
|
||||
|
||||
echo $uuids
|
||||
}
|
||||
|
||||
guest_name() {
|
||||
uri=$1
|
||||
uuid=$2
|
||||
|
||||
name=$(run_virsh_c $uri dominfo $uuid 2>/dev/null | \
|
||||
awk '/^Name:/{print $2}')
|
||||
[ -n "$name" ] || name=$uuid
|
||||
|
||||
echo "$name"
|
||||
}
|
||||
|
||||
guest_is_on() {
|
||||
uri=$1
|
||||
uuid=$2
|
||||
|
||||
guest_running=false
|
||||
info=$(run_virsh_c $uri dominfo $uuid)
|
||||
if [ $? -ne 0 ]; then
|
||||
RETVAL=1
|
||||
return 1
|
||||
fi
|
||||
|
||||
id=$(echo "$info" | awk '/^Id:/{print $2}')
|
||||
|
||||
[ -n "$id" ] && [ "x$id" != x- ] && guest_running=true
|
||||
return 0
|
||||
}
|
||||
|
||||
started() {
|
||||
touch "$VAR_SUBSYS_LIBVIRT_GUESTS"
|
||||
}
|
||||
|
||||
start() {
|
||||
[ -f "$LISTFILE" ] || { started; return 0; }
|
||||
|
||||
if [ "x$ON_BOOT" != xstart ]; then
|
||||
echo $"libvirt-guests is configured not to start any guests on boot"
|
||||
rm -f "$LISTFILE"
|
||||
started
|
||||
return 0
|
||||
fi
|
||||
|
||||
while read uri list; do
|
||||
configured=false
|
||||
for confuri in $URIS; do
|
||||
if [ $confuri = $uri ]; then
|
||||
configured=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
if ! $configured; then
|
||||
echo $"Ignoring guests on $uri URI"
|
||||
continue
|
||||
fi
|
||||
|
||||
echo $"Resuming guests on $uri URI..."
|
||||
for guest in $list; do
|
||||
name=$(guest_name $uri $guest)
|
||||
echo -n $"Resuming guest $name: "
|
||||
if guest_is_on $uri $guest; then
|
||||
if $guest_running; then
|
||||
echo $"already active"
|
||||
else
|
||||
retval run_virsh $uri start "$name" >/dev/null && \
|
||||
echo $"done"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done <"$LISTFILE"
|
||||
|
||||
rm -f "$LISTFILE"
|
||||
started
|
||||
}
|
||||
|
||||
suspend_guest()
|
||||
{
|
||||
uri=$1
|
||||
guest=$2
|
||||
|
||||
name=$(guest_name $uri $guest)
|
||||
label=$"Suspending $name: "
|
||||
echo -n "$label"
|
||||
run_virsh $uri managedsave $guest >/dev/null &
|
||||
virsh_pid=$!
|
||||
while true; do
|
||||
sleep 1
|
||||
kill -0 $virsh_pid >&/dev/null || break
|
||||
progress=$(run_virsh_c $uri domjobinfo $guest 2>/dev/null | \
|
||||
awk '/^Data processed:/{print $3, $4}')
|
||||
if [ -n "$progress" ]; then
|
||||
printf '\r%s%12s ' "$label" "$progress"
|
||||
else
|
||||
printf '\r%s%-12s ' "$label" "..."
|
||||
fi
|
||||
done
|
||||
retval wait $virsh_pid && printf '\r%s%-12s\n' "$label" $"done"
|
||||
}
|
||||
|
||||
shutdown_guest()
|
||||
{
|
||||
uri=$1
|
||||
guest=$2
|
||||
|
||||
name=$(guest_name $uri $guest)
|
||||
label=$"Shutting down $name: "
|
||||
echo -n "$label"
|
||||
retval run_virsh $uri shutdown $guest >/dev/null || return
|
||||
timeout=$SHUTDOWN_TIMEOUT
|
||||
while [ $timeout -gt 0 ]; do
|
||||
sleep 1
|
||||
timeout=$[timeout - 1]
|
||||
guest_is_on $uri $guest || return
|
||||
$guest_running || break
|
||||
printf '\r%s%-12d ' "$label" $timeout
|
||||
done
|
||||
|
||||
if guest_is_on $uri $guest; then
|
||||
if $guest_running; then
|
||||
printf '\r%s%-12s\n' "$label" $"failed to shutdown in time"
|
||||
else
|
||||
printf '\r%s%-12s\n' "$label" $"done"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
stop() {
|
||||
# last stop was not followed by start
|
||||
[ -f "$LISTFILE" ] && return 0
|
||||
|
||||
suspending=true
|
||||
if [ "x$ON_SHUTDOWN" = xshutdown ]; then
|
||||
suspending=false
|
||||
if [ $SHUTDOWN_TIMEOUT -le 0 ]; then
|
||||
echo $"Shutdown action requested but SHUTDOWN_TIMEOUT was not set"
|
||||
RETVAL=6
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
: >"$LISTFILE"
|
||||
for uri in $URIS; do
|
||||
echo -n $"Running guests on $uri URI: "
|
||||
list=$(list_guests $uri)
|
||||
if [ $? -eq 0 ]; then
|
||||
empty=true
|
||||
for uuid in $list; do
|
||||
$empty || printf ", "
|
||||
echo -n $(guest_name $uri $uuid)
|
||||
empty=false
|
||||
done
|
||||
if $empty; then
|
||||
echo $"no running guests."
|
||||
else
|
||||
echo
|
||||
echo $uri $list >>"$LISTFILE"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
while read uri list; do
|
||||
if $suspending; then
|
||||
echo $"Suspending guests on $uri URI..."
|
||||
else
|
||||
echo $"Shutting down guests on $uri URI..."
|
||||
fi
|
||||
|
||||
for guest in $list; do
|
||||
if $suspending; then
|
||||
suspend_guest $uri $guest
|
||||
else
|
||||
shutdown_guest $uri $guest
|
||||
fi
|
||||
done
|
||||
done <"$LISTFILE"
|
||||
|
||||
rm -f "$VAR_SUBSYS_LIBVIRT_GUESTS"
|
||||
}
|
||||
|
||||
gueststatus() {
|
||||
for uri in $URIS; do
|
||||
echo "* $uri URI:"
|
||||
retval run_virsh $uri list || echo
|
||||
done
|
||||
}
|
||||
|
||||
# See how we were called.
|
||||
case "$1" in
|
||||
start|stop|gueststatus)
|
||||
$1
|
||||
;;
|
||||
restart)
|
||||
stop && start
|
||||
;;
|
||||
force-reload)
|
||||
;;
|
||||
status)
|
||||
if [ -f "$LISTFILE" ]; then
|
||||
RETVAL=3
|
||||
else
|
||||
RETVAL=0
|
||||
fi
|
||||
;;
|
||||
shutdown)
|
||||
ON_SHUTDOWN=shutdown
|
||||
stop
|
||||
;;
|
||||
*)
|
||||
echo $"Usage: $0 {start|stop|restart|force-reload|gueststatus|shutdown}"
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
exit $RETVAL
|
||||
24
daemon/libvirt-guests.sysconf
Normal file
24
daemon/libvirt-guests.sysconf
Normal file
@ -0,0 +1,24 @@
|
||||
# URIs to check for running guests
|
||||
# example: URIS='default xen:/// vbox+tcp://host/system lxc:///'
|
||||
#URIS=default
|
||||
|
||||
# action taken on host boot
|
||||
# - start all guests which were running on shutdown are started on boot
|
||||
# regardless on their autostart settings
|
||||
# - ignore libvirt-guests init script won't start any guest on boot, however,
|
||||
# guests marked as autostart will still be automatically started by
|
||||
# libvirtd
|
||||
#ON_BOOT=start
|
||||
|
||||
# action taken on host shutdown
|
||||
# - suspend all running guests are suspended using virsh managedsave
|
||||
# - shutdown all running guests are asked to shutdown. Please be careful with
|
||||
# this settings since there is no way to distinguish between a
|
||||
# guest which is stuck or ignores shutdown requests and a guest
|
||||
# which just needs a long time to shutdown. When setting
|
||||
# ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a
|
||||
# value suitable for your guests.
|
||||
#ON_SHUTDOWN=suspend
|
||||
|
||||
# number of seconds we're willing to wait for a guest to shut down
|
||||
#SHUTDOWN_TIMEOUT=0
|
||||
82
daemon/libvirtd.aug
Normal file
82
daemon/libvirtd.aug
Normal file
@ -0,0 +1,82 @@
|
||||
(* /etc/libvirt/libvirtd.conf *)
|
||||
|
||||
module Libvirtd =
|
||||
autoload xfm
|
||||
|
||||
let eol = del /[ \t]*\n/ "\n"
|
||||
let value_sep = del /[ \t]*=[ \t]*/ " = "
|
||||
let indent = del /[ \t]*/ ""
|
||||
|
||||
let array_sep = del /,[ \t\n]*/ ", "
|
||||
let array_start = del /\[[ \t\n]*/ "[ "
|
||||
let array_end = del /\]/ "]"
|
||||
|
||||
let str_val = del /\"/ "\"" . store /[^\"]*/ . del /\"/ "\""
|
||||
let bool_val = store /0|1/
|
||||
let int_val = store /[0-9]+/
|
||||
let str_array_element = [ seq "el" . str_val ] . del /[ \t\n]*/ ""
|
||||
let str_array_val = counter "el" . array_start . ( str_array_element . ( array_sep . str_array_element ) * ) ? . array_end
|
||||
|
||||
let str_entry (kw:string) = [ key kw . value_sep . str_val ]
|
||||
let bool_entry (kw:string) = [ key kw . value_sep . bool_val ]
|
||||
let int_entry (kw:string) = [ key kw . value_sep . int_val ]
|
||||
let str_array_entry (kw:string) = [ key kw . value_sep . str_array_val ]
|
||||
|
||||
|
||||
(* Config entry grouped by function - same order as example config *)
|
||||
let network_entry = bool_entry "listen_tls"
|
||||
| bool_entry "listen_tcp"
|
||||
| str_entry "tls_port"
|
||||
| str_entry "tcp_port"
|
||||
| str_entry "listen_addr"
|
||||
| bool_entry "mdns_adv"
|
||||
| str_entry "mdns_name"
|
||||
|
||||
let sock_acl_entry = str_entry "unix_sock_group"
|
||||
| str_entry "unix_sock_ro_perms"
|
||||
| str_entry "unix_sock_rw_perms"
|
||||
| str_entry "unix_sock_dir"
|
||||
|
||||
let authentication_entry = str_entry "auth_unix_ro"
|
||||
| str_entry "auth_unix_rw"
|
||||
| str_entry "auth_tcp"
|
||||
| str_entry "auth_tls"
|
||||
|
||||
let certificate_entry = str_entry "key_file"
|
||||
| str_entry "cert_file"
|
||||
| str_entry "ca_file"
|
||||
| str_entry "crl_file"
|
||||
|
||||
let authorization_entry = bool_entry "tls_no_verify_certificate"
|
||||
| str_array_entry "tls_allowed_dn_list"
|
||||
| str_array_entry "sasl_allowed_username_list"
|
||||
|
||||
let processing_entry = int_entry "min_workers"
|
||||
| int_entry "max_workers"
|
||||
| int_entry "max_clients"
|
||||
| int_entry "max_requests"
|
||||
| int_entry "max_client_requests"
|
||||
|
||||
let logging_entry = int_entry "log_level"
|
||||
| str_entry "log_filters"
|
||||
| str_entry "log_outputs"
|
||||
|
||||
(* Each enty in the config is one of the following three ... *)
|
||||
let entry = network_entry
|
||||
| sock_acl_entry
|
||||
| authentication_entry
|
||||
| certificate_entry
|
||||
| authorization_entry
|
||||
| processing_entry
|
||||
| logging_entry
|
||||
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
|
||||
let empty = [ label "#empty" . eol ]
|
||||
|
||||
let record = indent . entry . eol
|
||||
|
||||
let lns = ( record | comment | empty ) *
|
||||
|
||||
let filter = incl "/etc/libvirt/libvirtd.conf"
|
||||
. Util.stdexcl
|
||||
|
||||
let xfm = transform lns filter
|
||||
3292
daemon/libvirtd.c
Normal file
3292
daemon/libvirtd.c
Normal file
File diff suppressed because it is too large
Load Diff
327
daemon/libvirtd.conf
Normal file
327
daemon/libvirtd.conf
Normal file
@ -0,0 +1,327 @@
|
||||
# Master libvirt daemon configuration file
|
||||
#
|
||||
# For further information consult http://libvirt.org/format.html
|
||||
#
|
||||
# NOTE: the tests/daemon-conf regression test script requires
|
||||
# that each "PARAMETER = VALUE" line in this file have the parameter
|
||||
# name just after a leading "#".
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# Network connectivity controls
|
||||
#
|
||||
|
||||
# Flag listening for secure TLS connections on the public TCP/IP port.
|
||||
# NB, must pass the --listen flag to the libvirtd process for this to
|
||||
# have any effect.
|
||||
#
|
||||
# It is necessary to setup a CA and issue server certificates before
|
||||
# using this capability.
|
||||
#
|
||||
# This is enabled by default, uncomment this to disable it
|
||||
#listen_tls = 0
|
||||
|
||||
# Listen for unencrypted TCP connections on the public TCP/IP port.
|
||||
# NB, must pass the --listen flag to the libvirtd process for this to
|
||||
# have any effect.
|
||||
#
|
||||
# Using the TCP socket requires SASL authentication by default. Only
|
||||
# SASL mechanisms which support data encryption are allowed. This is
|
||||
# DIGEST_MD5 and GSSAPI (Kerberos5)
|
||||
#
|
||||
# This is disabled by default, uncomment this to enable it.
|
||||
#listen_tcp = 1
|
||||
|
||||
|
||||
|
||||
# Override the port for accepting secure TLS connections
|
||||
# This can be a port number, or service name
|
||||
#
|
||||
#tls_port = "16514"
|
||||
|
||||
# Override the port for accepting insecure TCP connections
|
||||
# This can be a port number, or service name
|
||||
#
|
||||
#tcp_port = "16509"
|
||||
|
||||
|
||||
# Override the default configuration which binds to all network
|
||||
# interfaces. This can be a numeric IPv4/6 address, or hostname
|
||||
#
|
||||
#listen_addr = "192.168.0.1"
|
||||
|
||||
|
||||
# Flag toggling mDNS advertizement of the libvirt service.
|
||||
#
|
||||
# Alternatively can disable for all services on a host by
|
||||
# stopping the Avahi daemon
|
||||
#
|
||||
# This is enabled by default, uncomment this to disable it
|
||||
#mdns_adv = 0
|
||||
|
||||
# Override the default mDNS advertizement name. This must be
|
||||
# unique on the immediate broadcast network.
|
||||
#
|
||||
# The default is "Virtualization Host HOSTNAME", where HOSTNAME
|
||||
# is subsituted for the short hostname of the machine (without domain)
|
||||
#
|
||||
#mdns_name = "Virtualization Host Joe Demo"
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# UNIX socket access controls
|
||||
#
|
||||
|
||||
# Set the UNIX domain socket group ownership. This can be used to
|
||||
# allow a 'trusted' set of users access to management capabilities
|
||||
# without becoming root.
|
||||
#
|
||||
# This is restricted to 'root' by default.
|
||||
#unix_sock_group = "libvirt"
|
||||
|
||||
# Set the UNIX socket permissions for the R/O socket. This is used
|
||||
# for monitoring VM status only
|
||||
#
|
||||
# Default allows any user. If setting group ownership may want to
|
||||
# restrict this to:
|
||||
#unix_sock_ro_perms = "0777"
|
||||
|
||||
# Set the UNIX socket permissions for the R/W socket. This is used
|
||||
# for full management of VMs
|
||||
#
|
||||
# Default allows only root. If PolicyKit is enabled on the socket,
|
||||
# the default will change to allow everyone (eg, 0777)
|
||||
#
|
||||
# If not using PolicyKit and setting group ownership for access
|
||||
# control then you may want to relax this to:
|
||||
#unix_sock_rw_perms = "0770"
|
||||
|
||||
# Set the name of the directory in which sockets will be found/created.
|
||||
#unix_sock_dir = "/var/run/libvirt"
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# Authentication.
|
||||
#
|
||||
# - none: do not perform auth checks. If you can connect to the
|
||||
# socket you are allowed. This is suitable if there are
|
||||
# restrictions on connecting to the socket (eg, UNIX
|
||||
# socket permissions), or if there is a lower layer in
|
||||
# the network providing auth (eg, TLS/x509 certificates)
|
||||
#
|
||||
# - sasl: use SASL infrastructure. The actual auth scheme is then
|
||||
# controlled from /etc/sasl2/libvirt.conf. For the TCP
|
||||
# socket only GSSAPI & DIGEST-MD5 mechanisms will be used.
|
||||
# For non-TCP or TLS sockets, any scheme is allowed.
|
||||
#
|
||||
# - polkit: use PolicyKit to authenticate. This is only suitable
|
||||
# for use on the UNIX sockets. The default policy will
|
||||
# require a user to supply their own password to gain
|
||||
# full read/write access (aka sudo like), while anyone
|
||||
# is allowed read/only access.
|
||||
#
|
||||
# Set an authentication scheme for UNIX read-only sockets
|
||||
# By default socket permissions allow anyone to connect
|
||||
#
|
||||
# To restrict monitoring of domains you may wish to enable
|
||||
# an authentication mechanism here
|
||||
#auth_unix_ro = "none"
|
||||
|
||||
# Set an authentication scheme for UNIX read-write sockets
|
||||
# By default socket permissions only allow root. If PolicyKit
|
||||
# support was compiled into libvirt, the default will be to
|
||||
# use 'polkit' auth.
|
||||
#
|
||||
# If the unix_sock_rw_perms are changed you may wish to enable
|
||||
# an authentication mechanism here
|
||||
#auth_unix_rw = "none"
|
||||
|
||||
# Change the authentication scheme for TCP sockets.
|
||||
#
|
||||
# If you don't enable SASL, then all TCP traffic is cleartext.
|
||||
# Don't do this outside of a dev/test scenario. For real world
|
||||
# use, always enable SASL and use the GSSAPI or DIGEST-MD5
|
||||
# mechanism in /etc/sasl2/libvirt.conf
|
||||
#auth_tcp = "sasl"
|
||||
|
||||
# Change the authentication scheme for TLS sockets.
|
||||
#
|
||||
# TLS sockets already have encryption provided by the TLS
|
||||
# layer, and limited authentication is done by certificates
|
||||
#
|
||||
# It is possible to make use of any SASL authentication
|
||||
# mechanism as well, by using 'sasl' for this option
|
||||
#auth_tls = "none"
|
||||
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# TLS x509 certificate configuration
|
||||
#
|
||||
|
||||
|
||||
# Override the default server key file path
|
||||
#
|
||||
#key_file = "/etc/pki/libvirt/private/serverkey.pem"
|
||||
|
||||
# Override the default server certificate file path
|
||||
#
|
||||
#cert_file = "/etc/pki/libvirt/servercert.pem"
|
||||
|
||||
# Override the default CA certificate path
|
||||
#
|
||||
#ca_file = "/etc/pki/CA/cacert.pem"
|
||||
|
||||
# Specify a certificate revocation list.
|
||||
#
|
||||
# Defaults to not using a CRL, uncomment to enable it
|
||||
#crl_file = "/etc/pki/CA/crl.pem"
|
||||
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# Authorization controls
|
||||
#
|
||||
|
||||
|
||||
# Flag to disable verification of client certificates
|
||||
#
|
||||
# Client certificate verification is the primary authentication mechanism.
|
||||
# Any client which does not present a certificate signed by the CA
|
||||
# will be rejected.
|
||||
#
|
||||
# Default is to always verify. Uncommenting this will disable
|
||||
# verification - make sure an IP whitelist is set
|
||||
#tls_no_verify_certificate = 1
|
||||
|
||||
|
||||
# A whitelist of allowed x509 Distinguished Names
|
||||
# This list may contain wildcards such as
|
||||
#
|
||||
# "C=GB,ST=London,L=London,O=Red Hat,CN=*"
|
||||
#
|
||||
# See the POSIX fnmatch function for the format of the wildcards.
|
||||
#
|
||||
# NB If this is an empty list, no client can connect, so comment out
|
||||
# entirely rather than using empty list to disable these checks
|
||||
#
|
||||
# By default, no DN's are checked
|
||||
#tls_allowed_dn_list = ["DN1", "DN2"]
|
||||
|
||||
|
||||
# A whitelist of allowed SASL usernames. The format for usernames
|
||||
# depends on the SASL authentication mechanism. Kerberos usernames
|
||||
# look like username@REALM
|
||||
#
|
||||
# This list may contain wildcards such as
|
||||
#
|
||||
# "*@EXAMPLE.COM"
|
||||
#
|
||||
# See the POSIX fnmatch function for the format of the wildcards.
|
||||
#
|
||||
# NB If this is an empty list, no client can connect, so comment out
|
||||
# entirely rather than using empty list to disable these checks
|
||||
#
|
||||
# By default, no Username's are checked
|
||||
#sasl_allowed_username_list = ["joe@EXAMPLE.COM", "fred@EXAMPLE.COM" ]
|
||||
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# Processing controls
|
||||
#
|
||||
|
||||
# The maximum number of concurrent client connections to allow
|
||||
# over all sockets combined.
|
||||
#max_clients = 20
|
||||
|
||||
|
||||
# The minimum limit sets the number of workers to start up
|
||||
# initially. If the number of active clients exceeds this,
|
||||
# then more threads are spawned, upto max_workers limit.
|
||||
# Typically you'd want max_workers to equal maximum number
|
||||
# of clients allowed
|
||||
#min_workers = 5
|
||||
#max_workers = 20
|
||||
|
||||
# Total global limit on concurrent RPC calls. Should be
|
||||
# at least as large as max_workers. Beyond this, RPC requests
|
||||
# will be read into memory and queued. This directly impact
|
||||
# memory usage, currently each request requires 256 KB of
|
||||
# memory. So by default upto 5 MB of memory is used
|
||||
#
|
||||
# XXX this isn't actually enforced yet, only the per-client
|
||||
# limit is used so far
|
||||
#max_requests = 20
|
||||
|
||||
# Limit on concurrent requests from a single client
|
||||
# connection. To avoid one client monopolizing the server
|
||||
# this should be a small fraction of the global max_requests
|
||||
# and max_workers parameter
|
||||
#max_client_requests = 5
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# Logging controls
|
||||
#
|
||||
|
||||
# Logging level: 4 errors, 3 warnings, 2 informations, 1 debug
|
||||
# basically 1 will log everything possible
|
||||
#log_level = 3
|
||||
|
||||
# Logging filters:
|
||||
# A filter allows to select a different logging level for a given category
|
||||
# of logs
|
||||
# The format for a filter is:
|
||||
# x:name
|
||||
# where name is a match string e.g. remote or qemu
|
||||
# the x prefix is the minimal level where matching messages should be logged
|
||||
# 1: DEBUG
|
||||
# 2: INFO
|
||||
# 3: WARNING
|
||||
# 4: ERROR
|
||||
#
|
||||
# Multiple filter can be defined in a single @filters, they just need to be
|
||||
# separated by spaces.
|
||||
#
|
||||
# e.g:
|
||||
# log_filters="3:remote 4:event"
|
||||
# to only get warning or errors from the remote layer and only errors from
|
||||
# the event layer.
|
||||
|
||||
# Logging outputs:
|
||||
# An output is one of the places to save logging informations
|
||||
# The format for an output can be:
|
||||
# x:stderr
|
||||
# output goes to stderr
|
||||
# x:syslog:name
|
||||
# use syslog for the output and use the given name as the ident
|
||||
# x:file:file_path
|
||||
# output to a file, with the given filepath
|
||||
# In all case the x prefix is the minimal level, acting as a filter
|
||||
# 1: DEBUG
|
||||
# 2: INFO
|
||||
# 3: WARNING
|
||||
# 4: ERROR
|
||||
#
|
||||
# Multiple output can be defined, they just need to be separated by spaces.
|
||||
# e.g.:
|
||||
# log_outputs="3:syslog:libvirtd"
|
||||
# to log all warnings and errors to syslog under the libvirtd ident
|
||||
|
||||
# UUID of the host:
|
||||
# Provide the UUID of the host here in case the command
|
||||
# 'dmidecode -s system-uuid' does not provide a valid uuid. In case
|
||||
# 'dmidecode' does not provide a valid UUID and none is provided here, a
|
||||
# temporary UUID will be generated.
|
||||
# Keep the format of the example UUID below. UUID must not have all digits
|
||||
# be the same.
|
||||
|
||||
# NB This default all-zeros UUID will not work. Replace
|
||||
# it with the output of the 'uuidgen' command and then
|
||||
# uncomment this entry
|
||||
#host_uuid = "00000000-0000-0000-0000-000000000000"
|
||||
314
daemon/libvirtd.h
Normal file
314
daemon/libvirtd.h
Normal file
@ -0,0 +1,314 @@
|
||||
/*
|
||||
* libvirtd.h: daemon data structure definitions
|
||||
*
|
||||
* Copyright (C) 2006-2009 Red Hat, Inc.
|
||||
* Copyright (C) 2006 Daniel P. Berrange
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef QEMUD_INTERNAL_H__
|
||||
# define QEMUD_INTERNAL_H__
|
||||
|
||||
# include <config.h>
|
||||
|
||||
# include <gnutls/gnutls.h>
|
||||
# include <gnutls/x509.h>
|
||||
# include "gnutls_1_0_compat.h"
|
||||
# if HAVE_SASL
|
||||
# include <sasl/sasl.h>
|
||||
# endif
|
||||
|
||||
# if HAVE_POLKIT0
|
||||
# include <dbus/dbus.h>
|
||||
# endif
|
||||
|
||||
# ifdef HAVE_SYS_SYSLIMITS_H
|
||||
# include <sys/syslimits.h>
|
||||
# endif
|
||||
|
||||
# include <rpc/types.h>
|
||||
# include <rpc/xdr.h>
|
||||
# include "remote_protocol.h"
|
||||
# include "logging.h"
|
||||
# include "threads.h"
|
||||
|
||||
# ifdef __GNUC__
|
||||
# ifdef HAVE_ANSIDECL_H
|
||||
# include <ansidecl.h>
|
||||
# endif
|
||||
|
||||
# ifndef __GNUC_PREREQ
|
||||
# if defined __GNUC__ && defined __GNUC_MINOR__
|
||||
# define __GNUC_PREREQ(maj, min) \
|
||||
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||
# else
|
||||
# define __GNUC_PREREQ(maj,min) 0
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/**
|
||||
* ATTRIBUTE_UNUSED:
|
||||
*
|
||||
* Macro to flag conciously unused parameters to functions
|
||||
*/
|
||||
# ifndef ATTRIBUTE_UNUSED
|
||||
# define ATTRIBUTE_UNUSED __attribute__((__unused__))
|
||||
# endif
|
||||
|
||||
/**
|
||||
* ATTRIBUTE_FMT_PRINTF
|
||||
*
|
||||
* Macro used to check printf like functions, if compiling
|
||||
* with gcc.
|
||||
*
|
||||
* We use gnulib which guarentees we always have GNU style
|
||||
* printf format specifiers even on broken Win32 platforms
|
||||
* hence we have to force 'gnu_printf' for new GCC
|
||||
*/
|
||||
# ifndef ATTRIBUTE_FMT_PRINTF
|
||||
# if __GNUC_PREREQ (4, 4)
|
||||
# define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (gnu_printf, fmtpos,argpos)))
|
||||
# else
|
||||
# define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (printf, fmtpos,argpos)))
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifndef ATTRIBUTE_RETURN_CHECK
|
||||
# if __GNUC_PREREQ (3, 4)
|
||||
# define ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__))
|
||||
# else
|
||||
# define ATTRIBUTE_RETURN_CHECK
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# else
|
||||
# ifndef ATTRIBUTE_UNUSED
|
||||
# define ATTRIBUTE_UNUSED
|
||||
# endif
|
||||
# ifndef ATTRIBUTE_FMT_PRINTF
|
||||
# define ATTRIBUTE_FMT_PRINTF(...)
|
||||
# endif
|
||||
# ifndef ATTRIBUTE_RETURN_CHECK
|
||||
# define ATTRIBUTE_RETURN_CHECK
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# define qemudDebug DEBUG
|
||||
|
||||
/* Whether we're passing reads & writes through a sasl SSF */
|
||||
enum qemud_sasl_ssf {
|
||||
QEMUD_SASL_SSF_NONE = 0,
|
||||
QEMUD_SASL_SSF_READ = 1,
|
||||
QEMUD_SASL_SSF_WRITE = 2,
|
||||
};
|
||||
|
||||
enum qemud_sock_type {
|
||||
QEMUD_SOCK_TYPE_UNIX = 0,
|
||||
QEMUD_SOCK_TYPE_TCP = 1,
|
||||
QEMUD_SOCK_TYPE_TLS = 2,
|
||||
};
|
||||
|
||||
struct qemud_client_message {
|
||||
char buffer [REMOTE_MESSAGE_MAX + REMOTE_MESSAGE_HEADER_XDR_LEN];
|
||||
unsigned int bufferLength;
|
||||
unsigned int bufferOffset;
|
||||
|
||||
unsigned int async : 1;
|
||||
unsigned int streamTX : 1;
|
||||
|
||||
remote_message_header hdr;
|
||||
|
||||
struct qemud_client_message *next;
|
||||
};
|
||||
|
||||
struct qemud_client;
|
||||
|
||||
/* Allow for filtering of incoming messages to a custom
|
||||
* dispatch processing queue, instead of client->dx.
|
||||
*/
|
||||
typedef int (*qemud_client_filter_func)(struct qemud_client *client,
|
||||
struct qemud_client_message *msg, void *opaque);
|
||||
struct qemud_client_filter {
|
||||
qemud_client_filter_func query;
|
||||
void *opaque;
|
||||
|
||||
struct qemud_client_filter *next;
|
||||
};
|
||||
|
||||
struct qemud_client_stream {
|
||||
virStreamPtr st;
|
||||
int procedure;
|
||||
int serial;
|
||||
|
||||
unsigned int recvEOF : 1;
|
||||
unsigned int closed : 1;
|
||||
|
||||
struct qemud_client_filter filter;
|
||||
|
||||
struct qemud_client_message *rx;
|
||||
int tx;
|
||||
|
||||
struct qemud_client_stream *next;
|
||||
};
|
||||
|
||||
/* Stores the per-client connection state */
|
||||
struct qemud_client {
|
||||
virMutex lock;
|
||||
|
||||
int magic;
|
||||
|
||||
int fd;
|
||||
int watch;
|
||||
unsigned int readonly :1;
|
||||
unsigned int closing :1;
|
||||
int domainEventCallbackID[VIR_DOMAIN_EVENT_ID_LAST];
|
||||
|
||||
struct sockaddr_storage addr;
|
||||
socklen_t addrlen;
|
||||
|
||||
int type; /* qemud_sock_type */
|
||||
gnutls_session_t tlssession;
|
||||
int auth;
|
||||
unsigned int handshake :1; /* If we're in progress for TLS handshake */
|
||||
# if HAVE_SASL
|
||||
sasl_conn_t *saslconn;
|
||||
int saslSSF;
|
||||
const char *saslDecoded;
|
||||
unsigned int saslDecodedLength;
|
||||
unsigned int saslDecodedOffset;
|
||||
const char *saslEncoded;
|
||||
unsigned int saslEncodedLength;
|
||||
unsigned int saslEncodedOffset;
|
||||
char *saslUsername;
|
||||
# endif
|
||||
|
||||
/* Count of meages in 'dx' or 'tx' queue
|
||||
* ie RPC calls in progress. Does not count
|
||||
* async events which are not used for
|
||||
* throttling calculations */
|
||||
int nrequests;
|
||||
/* Zero or one messages being received. Zero if
|
||||
* nrequests >= max_clients and throttling */
|
||||
struct qemud_client_message *rx;
|
||||
/* Zero or many messages waiting for a worker
|
||||
* to process them */
|
||||
struct qemud_client_message *dx;
|
||||
/* Zero or many messages waiting for transmit
|
||||
* back to client, including async events */
|
||||
struct qemud_client_message *tx;
|
||||
/* Filters to capture messages that would otherwise
|
||||
* end up on the 'dx' queue */
|
||||
struct qemud_client_filter *filters;
|
||||
|
||||
/* Data streams */
|
||||
struct qemud_client_stream *streams;
|
||||
|
||||
|
||||
/* This is only valid if a remote open call has been made on this
|
||||
* connection, otherwise it will be NULL. Also if remote close is
|
||||
* called, it will be set back to NULL if that succeeds.
|
||||
*/
|
||||
virConnectPtr conn;
|
||||
int refs;
|
||||
|
||||
};
|
||||
|
||||
# define QEMUD_CLIENT_MAGIC 0x7788aaee
|
||||
|
||||
|
||||
struct qemud_socket {
|
||||
char *path;
|
||||
int fd;
|
||||
int watch;
|
||||
int readonly;
|
||||
int type; /* qemud_sock_type */
|
||||
int auth;
|
||||
int port;
|
||||
struct qemud_socket *next;
|
||||
};
|
||||
|
||||
struct qemud_worker {
|
||||
pthread_t thread;
|
||||
unsigned int hasThread :1;
|
||||
unsigned int processingCall :1;
|
||||
unsigned int quitRequest :1;
|
||||
|
||||
/* back-pointer to our server */
|
||||
struct qemud_server *server;
|
||||
};
|
||||
|
||||
/* Main server state */
|
||||
struct qemud_server {
|
||||
virMutex lock;
|
||||
virCond job;
|
||||
|
||||
int privileged;
|
||||
|
||||
int nworkers;
|
||||
int nactiveworkers;
|
||||
struct qemud_worker *workers;
|
||||
int nsockets;
|
||||
struct qemud_socket *sockets;
|
||||
int nclients;
|
||||
struct qemud_client **clients;
|
||||
|
||||
int sigread;
|
||||
int sigwrite;
|
||||
char *logDir;
|
||||
pthread_t eventThread;
|
||||
unsigned int hasEventThread :1;
|
||||
unsigned int quitEventThread :1;
|
||||
# ifdef HAVE_AVAHI
|
||||
struct libvirtd_mdns *mdns;
|
||||
# endif
|
||||
# if HAVE_SASL
|
||||
char **saslUsernameWhitelist;
|
||||
# endif
|
||||
# if HAVE_POLKIT0
|
||||
DBusConnection *sysbus;
|
||||
# endif
|
||||
};
|
||||
|
||||
void qemudLog(int priority, const char *fmt, ...)
|
||||
ATTRIBUTE_FMT_PRINTF(2,3);
|
||||
|
||||
|
||||
|
||||
int qemudRegisterClientEvent(struct qemud_server *server,
|
||||
struct qemud_client *client);
|
||||
void qemudUpdateClientEvent(struct qemud_client *client);
|
||||
|
||||
void qemudDispatchClientFailure(struct qemud_client *client);
|
||||
|
||||
void
|
||||
qemudClientMessageQueuePush(struct qemud_client_message **queue,
|
||||
struct qemud_client_message *msg);
|
||||
struct qemud_client_message *
|
||||
qemudClientMessageQueueServe(struct qemud_client_message **queue);
|
||||
|
||||
void
|
||||
qemudClientMessageRelease(struct qemud_client *client,
|
||||
struct qemud_client_message *msg);
|
||||
|
||||
|
||||
# if HAVE_POLKIT
|
||||
int qemudGetSocketIdentity(int fd, uid_t *uid, pid_t *pid);
|
||||
# endif
|
||||
|
||||
#endif
|
||||
116
daemon/libvirtd.init.in
Normal file
116
daemon/libvirtd.init.in
Normal file
@ -0,0 +1,116 @@
|
||||
#!/bin/sh
|
||||
|
||||
# the following is the LSB init header see
|
||||
# http://www.linux-foundation.org/spec//booksets/LSB-Core-generic/LSB-Core-generic.html#INITSCRCOMCONV
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: libvirtd
|
||||
# Required-Start: $network messagebus
|
||||
# Should-Start: $named
|
||||
# Should-Start: xend
|
||||
# Should-Start: hal
|
||||
# Should-Start: avahi-daemon
|
||||
# Required-Stop: $network messagebus
|
||||
# Should-Stop: $named
|
||||
# Default-Start: 3 4 5
|
||||
# Short-Description: daemon for libvirt virtualization API
|
||||
# Description: This is a daemon for managing guest instances
|
||||
# and libvirt virtual networks
|
||||
# See http://libvirt.org
|
||||
### END INIT INFO
|
||||
|
||||
# the following is chkconfig init header
|
||||
#
|
||||
# libvirtd: guest and virtual network management daemon
|
||||
#
|
||||
# chkconfig: 345 97 03
|
||||
# description: This is a daemon for managing guest instances \
|
||||
# and libvirt virtual networks \
|
||||
# See http://libvirt.org
|
||||
#
|
||||
# processname: libvirtd
|
||||
# pidfile: @localstatedir@/run/libvirtd.pid
|
||||
#
|
||||
|
||||
# Source function library.
|
||||
. @sysconfdir@/rc.d/init.d/functions
|
||||
|
||||
SERVICE=libvirtd
|
||||
PROCESS=libvirtd
|
||||
PIDFILE=@localstatedir@/run/$SERVICE.pid
|
||||
|
||||
LIBVIRTD_CONFIG=
|
||||
LIBVIRTD_ARGS=
|
||||
KRB5_KTNAME=/etc/libvirt/krb5.tab
|
||||
|
||||
test -f @sysconfdir@/sysconfig/libvirtd && . @sysconfdir@/sysconfig/libvirtd
|
||||
|
||||
export QEMU_AUDIO_DRV
|
||||
export SDL_AUDIODRIVER
|
||||
|
||||
LIBVIRTD_CONFIG_ARGS=
|
||||
if [ -n "$LIBVIRTD_CONFIG" ]
|
||||
then
|
||||
LIBVIRTD_CONFIG_ARGS="--config $LIBVIRTD_CONFIG"
|
||||
fi
|
||||
|
||||
RETVAL=0
|
||||
|
||||
start() {
|
||||
echo -n $"Starting $SERVICE daemon: "
|
||||
mkdir -p @localstatedir@/cache/libvirt
|
||||
rm -rf @localstatedir@/cache/libvirt/*
|
||||
KRB5_KTNAME=$KRB5_KTNAME daemon --pidfile $PIDFILE --check $SERVICE $PROCESS --daemon $LIBVIRTD_CONFIG_ARGS $LIBVIRTD_ARGS
|
||||
RETVAL=$?
|
||||
echo
|
||||
[ $RETVAL -eq 0 ] && touch @localstatedir@/lock/subsys/$SERVICE
|
||||
}
|
||||
|
||||
stop() {
|
||||
echo -n $"Stopping $SERVICE daemon: "
|
||||
|
||||
killproc -p $PIDFILE $PROCESS
|
||||
RETVAL=$?
|
||||
echo
|
||||
if [ $RETVAL -eq 0 ]; then
|
||||
rm -f @localstatedir@/lock/subsys/$SERVICE
|
||||
rm -f $PIDFILE
|
||||
rm -rf @localstatedir@/cache/libvirt/*
|
||||
fi
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
reload() {
|
||||
echo -n $"Reloading $SERVICE configuration: "
|
||||
|
||||
killproc -p $PIDFILE $PROCESS -HUP
|
||||
RETVAL=$?
|
||||
echo
|
||||
return $RETVAL
|
||||
}
|
||||
|
||||
# See how we were called.
|
||||
case "$1" in
|
||||
start|stop|restart|reload)
|
||||
$1
|
||||
;;
|
||||
status)
|
||||
status -p $PIDFILE $PROCESS
|
||||
RETVAL=$?
|
||||
;;
|
||||
force-reload)
|
||||
reload
|
||||
;;
|
||||
condrestart|try-restart)
|
||||
[ -f @localstatedir@/lock/subsys/$SERVICE ] && restart || :
|
||||
;;
|
||||
*)
|
||||
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|force-reload|try-restart}"
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
exit $RETVAL
|
||||
9
daemon/libvirtd.lxc.logrotate.in
Normal file
9
daemon/libvirtd.lxc.logrotate.in
Normal file
@ -0,0 +1,9 @@
|
||||
@localstatedir@/log/libvirt/lxc/*.log {
|
||||
weekly
|
||||
missingok
|
||||
rotate 4
|
||||
compress
|
||||
delaycompress
|
||||
copytruncate
|
||||
minsize 100k
|
||||
}
|
||||
42
daemon/libvirtd.policy-0
Normal file
42
daemon/libvirtd.policy-0
Normal file
@ -0,0 +1,42 @@
|
||||
<!DOCTYPE policyconfig PUBLIC
|
||||
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
|
||||
|
||||
<!--
|
||||
Policy definitions for libvirt daemon
|
||||
|
||||
Copyright (c) 2007 Daniel P. Berrange <berrange redhat com>
|
||||
|
||||
libvirt is licensed to you under the GNU Lesser General Public License
|
||||
version 2. See COPYING for details.
|
||||
|
||||
NOTE: If you make changes to this file, make sure to validate the file
|
||||
using the polkit-policy-file-validate(1) tool. Changes made to this
|
||||
file are instantly applied.
|
||||
-->
|
||||
|
||||
<policyconfig>
|
||||
<action id="org.libvirt.unix.monitor">
|
||||
<description>Monitor local virtualized systems</description>
|
||||
<message>System policy prevents monitoring of local virtualized systems</message>
|
||||
<defaults>
|
||||
<!-- Any program can use libvirt in read-only mode for monitoring,
|
||||
even if not part of a session -->
|
||||
<allow_any>yes</allow_any>
|
||||
<allow_inactive>yes</allow_inactive>
|
||||
<allow_active>yes</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
|
||||
<action id="org.libvirt.unix.manage">
|
||||
<description>Manage local virtualized systems</description>
|
||||
<message>System policy prevents management of local virtualized systems</message>
|
||||
<defaults>
|
||||
<!-- Only a program in the active host session can use libvirt in
|
||||
read-write mode for management, and we require user password -->
|
||||
<allow_any>no</allow_any>
|
||||
<allow_inactive>no</allow_inactive>
|
||||
<allow_active>auth_admin_keep_session</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
</policyconfig>
|
||||
42
daemon/libvirtd.policy-1
Normal file
42
daemon/libvirtd.policy-1
Normal file
@ -0,0 +1,42 @@
|
||||
<!DOCTYPE policyconfig PUBLIC
|
||||
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
|
||||
|
||||
<!--
|
||||
Policy definitions for libvirt daemon
|
||||
|
||||
Copyright (c) 2007 Daniel P. Berrange <berrange redhat com>
|
||||
|
||||
libvirt is licensed to you under the GNU Lesser General Public License
|
||||
version 2. See COPYING for details.
|
||||
|
||||
NOTE: If you make changes to this file, make sure to validate the file
|
||||
using the polkit-policy-file-validate(1) tool. Changes made to this
|
||||
file are instantly applied.
|
||||
-->
|
||||
|
||||
<policyconfig>
|
||||
<action id="org.libvirt.unix.monitor">
|
||||
<description>Monitor local virtualized systems</description>
|
||||
<message>System policy prevents monitoring of local virtualized systems</message>
|
||||
<defaults>
|
||||
<!-- Any program can use libvirt in read-only mode for monitoring,
|
||||
even if not part of a session -->
|
||||
<allow_any>yes</allow_any>
|
||||
<allow_inactive>yes</allow_inactive>
|
||||
<allow_active>yes</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
|
||||
<action id="org.libvirt.unix.manage">
|
||||
<description>Manage local virtualized systems</description>
|
||||
<message>System policy prevents management of local virtualized systems</message>
|
||||
<defaults>
|
||||
<!-- Only a program in the active host session can use libvirt in
|
||||
read-write mode for management, and we require user password -->
|
||||
<allow_any>no</allow_any>
|
||||
<allow_inactive>no</allow_inactive>
|
||||
<allow_active>auth_admin_keep</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
</policyconfig>
|
||||
9
daemon/libvirtd.qemu.logrotate.in
Normal file
9
daemon/libvirtd.qemu.logrotate.in
Normal file
@ -0,0 +1,9 @@
|
||||
@localstatedir@/log/libvirt/qemu/*.log {
|
||||
weekly
|
||||
missingok
|
||||
rotate 4
|
||||
compress
|
||||
delaycompress
|
||||
copytruncate
|
||||
minsize 100k
|
||||
}
|
||||
28
daemon/libvirtd.sasl
Normal file
28
daemon/libvirtd.sasl
Normal file
@ -0,0 +1,28 @@
|
||||
# If you want to use the non-TLS socket, then you *must* include
|
||||
# the GSSAPI or DIGEST-MD5 mechanisms, because they are the only
|
||||
# ones that can offer session encryption as well as authentication.
|
||||
#
|
||||
# If you're only using TLS, then you can turn on any mechanisms
|
||||
# you like for authentication, because TLS provides the encryption
|
||||
#
|
||||
# Default to a simple username+password mechanism
|
||||
mech_list: digest-md5
|
||||
|
||||
# Before you can use GSSAPI, you need a service principle on the
|
||||
# KDC server for libvirt, and that to be exported to the keytab
|
||||
# file listed below
|
||||
#mech_list: gssapi
|
||||
#
|
||||
# You can also list many mechanisms at once, then the user can choose
|
||||
# by adding '?auth=sasl.gssapi' to their libvirt URI, eg
|
||||
# qemu+tcp://hostname/system?auth=sasl.gssapi
|
||||
#mech_list: digest-md5 gssapi
|
||||
|
||||
# MIT kerberos ignores this option & needs KRB5_KTNAME env var.
|
||||
# May be useful for other non-Linux OS though....
|
||||
keytab: /etc/libvirt/krb5.tab
|
||||
|
||||
# If using digest-md5 for username/passwds, then this is the file
|
||||
# containing the passwds. Use 'saslpasswd2 -a libvirt [username]'
|
||||
# to add entries, and 'sasldblistusers2 -a libvirt' to browse it
|
||||
sasldb_path: /etc/libvirt/passwd.db
|
||||
18
daemon/libvirtd.sysconf
Normal file
18
daemon/libvirtd.sysconf
Normal file
@ -0,0 +1,18 @@
|
||||
# Override the default config file
|
||||
#LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
|
||||
|
||||
# Listen for TCP/IP connections
|
||||
# NB. must setup TLS/SSL keys prior to using this
|
||||
#LIBVIRTD_ARGS="--listen"
|
||||
|
||||
# Override Kerberos service keytab for SASL/GSSAPI
|
||||
#KRB5_KTNAME=/etc/libvirt/krb5.tab
|
||||
|
||||
# Override the QEMU/SDL default audio driver probing when
|
||||
# starting virtual machines using SDL graphics
|
||||
#
|
||||
# NB these have no effect for VMs using VNC, unless vnc_allow_host_audio
|
||||
# is enabled in /etc/libvirt/qemu.conf
|
||||
#QEMU_AUDIO_DRV=sdl
|
||||
#
|
||||
#SDL_AUDIODRIVER=pulse
|
||||
9
daemon/libvirtd.uml.logrotate.in
Normal file
9
daemon/libvirtd.uml.logrotate.in
Normal file
@ -0,0 +1,9 @@
|
||||
@localstatedir@/log/libvirt/uml/*.log {
|
||||
weekly
|
||||
missingok
|
||||
rotate 4
|
||||
compress
|
||||
delaycompress
|
||||
copytruncate
|
||||
minsize 100k
|
||||
}
|
||||
508
daemon/mdns.c
Normal file
508
daemon/mdns.c
Normal file
@ -0,0 +1,508 @@
|
||||
/*
|
||||
* mdns.c: advertise libvirt hypervisor connections
|
||||
*
|
||||
* Copyright (C) 2007 Daniel P. Berrange
|
||||
*
|
||||
* Derived from Avahi example service provider code.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <avahi-client/client.h>
|
||||
#include <avahi-client/publish.h>
|
||||
|
||||
#include <avahi-common/alternative.h>
|
||||
#include <avahi-common/simple-watch.h>
|
||||
#include <avahi-common/malloc.h>
|
||||
#include <avahi-common/error.h>
|
||||
#include <avahi-common/timeval.h>
|
||||
|
||||
#include "libvirtd.h"
|
||||
#include "mdns.h"
|
||||
#include "event.h"
|
||||
#include "memory.h"
|
||||
|
||||
#define AVAHI_DEBUG(fmt, ...) DEBUG(fmt, __VA_ARGS__)
|
||||
|
||||
struct libvirtd_mdns_entry {
|
||||
char *type;
|
||||
int port;
|
||||
struct libvirtd_mdns_entry *next;
|
||||
};
|
||||
|
||||
struct libvirtd_mdns_group {
|
||||
struct libvirtd_mdns *mdns;
|
||||
AvahiEntryGroup *handle;
|
||||
char *name;
|
||||
struct libvirtd_mdns_entry *entry;
|
||||
struct libvirtd_mdns_group *next;
|
||||
};
|
||||
|
||||
struct libvirtd_mdns {
|
||||
AvahiClient *client;
|
||||
AvahiPoll *poller;
|
||||
struct libvirtd_mdns_group *group;
|
||||
};
|
||||
|
||||
/* Avahi API requires this struct names in the app :-( */
|
||||
struct AvahiWatch {
|
||||
int watch;
|
||||
int fd;
|
||||
int revents;
|
||||
AvahiWatchCallback callback;
|
||||
void *userdata;
|
||||
};
|
||||
|
||||
/* Avahi API requires this struct names in the app :-( */
|
||||
struct AvahiTimeout {
|
||||
int timer;
|
||||
AvahiTimeoutCallback callback;
|
||||
void *userdata;
|
||||
};
|
||||
|
||||
|
||||
static void libvirtd_mdns_create_services(struct libvirtd_mdns_group *group);
|
||||
|
||||
/* Called whenever the entry group state changes */
|
||||
static void libvirtd_mdns_group_callback(AvahiEntryGroup *g ATTRIBUTE_UNUSED, AvahiEntryGroupState state, void *userdata) {
|
||||
struct libvirtd_mdns_group *group = (struct libvirtd_mdns_group *)userdata;
|
||||
|
||||
switch (state) {
|
||||
case AVAHI_ENTRY_GROUP_ESTABLISHED:
|
||||
/* The entry group has been established successfully */
|
||||
AVAHI_DEBUG("Group '%s' established", group->name);
|
||||
break;
|
||||
|
||||
case AVAHI_ENTRY_GROUP_COLLISION:
|
||||
{
|
||||
char *n;
|
||||
|
||||
/* A service name collision happened. Let's pick a new name */
|
||||
n = avahi_alternative_service_name(group->name);
|
||||
VIR_FREE(group->name);
|
||||
group->name = n;
|
||||
|
||||
AVAHI_DEBUG("Group name collision, renaming service to '%s'", group->name);
|
||||
|
||||
/* And recreate the services */
|
||||
libvirtd_mdns_create_services(group);
|
||||
}
|
||||
break;
|
||||
|
||||
case AVAHI_ENTRY_GROUP_FAILURE :
|
||||
AVAHI_DEBUG("Group failure: %s", avahi_strerror(avahi_client_errno(group->mdns->client)));
|
||||
|
||||
/* Some kind of failure happened while we were registering our services */
|
||||
//avahi_simple_poll_quit(simple_poll);
|
||||
break;
|
||||
|
||||
case AVAHI_ENTRY_GROUP_UNCOMMITED:
|
||||
case AVAHI_ENTRY_GROUP_REGISTERING:
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
static void libvirtd_mdns_create_services(struct libvirtd_mdns_group *group) {
|
||||
struct libvirtd_mdns *mdns = group->mdns;
|
||||
struct libvirtd_mdns_entry *entry;
|
||||
int ret;
|
||||
AVAHI_DEBUG("Adding services to '%s'", group->name);
|
||||
|
||||
/* If we've no services to advertise, just reset the group to make
|
||||
* sure it is emptied of any previously advertised services */
|
||||
if (!group->entry) {
|
||||
if (group->handle)
|
||||
avahi_entry_group_reset(group->handle);
|
||||
return;
|
||||
}
|
||||
|
||||
/* If this is the first time we're called, let's create a new entry group */
|
||||
if (!group->handle) {
|
||||
AVAHI_DEBUG("Creating initial group %s", group->name);
|
||||
if (!(group->handle = avahi_entry_group_new(mdns->client, libvirtd_mdns_group_callback, group))) {
|
||||
AVAHI_DEBUG("avahi_entry_group_new() failed: %s", avahi_strerror(avahi_client_errno(mdns->client)));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
entry = group->entry;
|
||||
while (entry) {
|
||||
if ((ret = avahi_entry_group_add_service(group->handle,
|
||||
AVAHI_IF_UNSPEC,
|
||||
AVAHI_PROTO_UNSPEC,
|
||||
0,
|
||||
group->name,
|
||||
entry->type,
|
||||
NULL,
|
||||
NULL,
|
||||
entry->port,
|
||||
NULL)) < 0) {
|
||||
AVAHI_DEBUG("Failed to add %s service on port %d: %s",
|
||||
entry->type, entry->port, avahi_strerror(ret));
|
||||
avahi_entry_group_reset(group->handle);
|
||||
return;
|
||||
}
|
||||
entry = entry->next;
|
||||
}
|
||||
|
||||
/* Tell the server to register the service */
|
||||
if ((ret = avahi_entry_group_commit(group->handle)) < 0) {
|
||||
avahi_entry_group_reset(group->handle);
|
||||
AVAHI_DEBUG("Failed to commit entry_group: %s", avahi_strerror(ret));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void libvirtd_mdns_client_callback(AvahiClient *c, AvahiClientState state, void *userdata) {
|
||||
struct libvirtd_mdns *mdns = (struct libvirtd_mdns *)userdata;
|
||||
struct libvirtd_mdns_group *group;
|
||||
if (!mdns->client)
|
||||
mdns->client = c;
|
||||
|
||||
/* Called whenever the client or server state changes */
|
||||
switch (state) {
|
||||
case AVAHI_CLIENT_S_RUNNING:
|
||||
/* The server has startup successfully and registered its host
|
||||
* name on the network, so it's time to create our services */
|
||||
AVAHI_DEBUG("Client running %p", mdns->client);
|
||||
group = mdns->group;
|
||||
while (group) {
|
||||
libvirtd_mdns_create_services(group);
|
||||
group = group->next;
|
||||
}
|
||||
break;
|
||||
|
||||
case AVAHI_CLIENT_FAILURE:
|
||||
AVAHI_DEBUG("Client failure: %s", avahi_strerror(avahi_client_errno(c)));
|
||||
libvirtd_mdns_stop(mdns);
|
||||
libvirtd_mdns_start(mdns);
|
||||
break;
|
||||
|
||||
case AVAHI_CLIENT_S_COLLISION:
|
||||
/* Let's drop our registered services. When the server is back
|
||||
* in AVAHI_SERVER_RUNNING state we will register them
|
||||
* again with the new host name. */
|
||||
|
||||
/* Fallthrough */
|
||||
|
||||
case AVAHI_CLIENT_S_REGISTERING:
|
||||
/* The server records are now being established. This
|
||||
* might be caused by a host name change. We need to wait
|
||||
* for our own records to register until the host name is
|
||||
* properly established. */
|
||||
AVAHI_DEBUG("Client collision/connecting %p", mdns->client);
|
||||
group = mdns->group;
|
||||
while (group) {
|
||||
if (group->handle)
|
||||
avahi_entry_group_reset(group->handle);
|
||||
group = group->next;
|
||||
}
|
||||
break;
|
||||
|
||||
case AVAHI_CLIENT_CONNECTING:
|
||||
AVAHI_DEBUG("Client connecting.... %p", mdns->client);
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void libvirtd_mdns_watch_dispatch(int watch, int fd, int events, void *opaque)
|
||||
{
|
||||
AvahiWatch *w = (AvahiWatch*)opaque;
|
||||
int fd_events = virEventHandleTypeToPollEvent(events);
|
||||
AVAHI_DEBUG("Dispatch watch %d FD %d Event %d", watch, fd, fd_events);
|
||||
w->revents = fd_events;
|
||||
w->callback(w, fd, fd_events, w->userdata);
|
||||
}
|
||||
|
||||
static void libvirtd_mdns_watch_dofree(void *w)
|
||||
{
|
||||
VIR_FREE(w);
|
||||
}
|
||||
|
||||
|
||||
static AvahiWatch *libvirtd_mdns_watch_new(const AvahiPoll *api ATTRIBUTE_UNUSED,
|
||||
int fd, AvahiWatchEvent event,
|
||||
AvahiWatchCallback cb, void *userdata) {
|
||||
AvahiWatch *w;
|
||||
virEventHandleType hEvents;
|
||||
if (VIR_ALLOC(w) < 0)
|
||||
return NULL;
|
||||
|
||||
w->fd = fd;
|
||||
w->revents = 0;
|
||||
w->callback = cb;
|
||||
w->userdata = userdata;
|
||||
|
||||
AVAHI_DEBUG("New handle %p FD %d Event %d", w, w->fd, event);
|
||||
hEvents = virPollEventToEventHandleType(event);
|
||||
if ((w->watch = virEventAddHandleImpl(fd, hEvents,
|
||||
libvirtd_mdns_watch_dispatch,
|
||||
w,
|
||||
libvirtd_mdns_watch_dofree)) < 0) {
|
||||
VIR_FREE(w);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
static void libvirtd_mdns_watch_update(AvahiWatch *w, AvahiWatchEvent event)
|
||||
{
|
||||
AVAHI_DEBUG("Update handle %p FD %d Event %d", w, w->fd, event);
|
||||
virEventUpdateHandleImpl(w->watch, event);
|
||||
}
|
||||
|
||||
static AvahiWatchEvent libvirtd_mdns_watch_get_events(AvahiWatch *w)
|
||||
{
|
||||
AVAHI_DEBUG("Get handle events %p %d", w, w->fd);
|
||||
return w->revents;
|
||||
}
|
||||
|
||||
static void libvirtd_mdns_watch_free(AvahiWatch *w)
|
||||
{
|
||||
AVAHI_DEBUG("Free handle %p %d", w, w->fd);
|
||||
virEventRemoveHandleImpl(w->watch);
|
||||
}
|
||||
|
||||
static void libvirtd_mdns_timeout_dispatch(int timer ATTRIBUTE_UNUSED, void *opaque)
|
||||
{
|
||||
AvahiTimeout *t = (AvahiTimeout*)opaque;
|
||||
AVAHI_DEBUG("Dispatch timeout %p %d", t, timer);
|
||||
virEventUpdateTimeoutImpl(t->timer, -1);
|
||||
t->callback(t, t->userdata);
|
||||
}
|
||||
|
||||
static void libvirtd_mdns_timeout_dofree(void *t)
|
||||
{
|
||||
VIR_FREE(t);
|
||||
}
|
||||
|
||||
static AvahiTimeout *libvirtd_mdns_timeout_new(const AvahiPoll *api ATTRIBUTE_UNUSED,
|
||||
const struct timeval *tv,
|
||||
AvahiTimeoutCallback cb,
|
||||
void *userdata)
|
||||
{
|
||||
AvahiTimeout *t;
|
||||
struct timeval now;
|
||||
long long nowms, thenms, timeout;
|
||||
AVAHI_DEBUG("Add timeout TV %p", tv);
|
||||
if (VIR_ALLOC(t) < 0)
|
||||
return NULL;
|
||||
|
||||
if (gettimeofday(&now, NULL) < 0) {
|
||||
VIR_FREE(t);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
AVAHI_DEBUG("Trigger timed for %d %d %d %d",
|
||||
(int)now.tv_sec, (int)now.tv_usec,
|
||||
(int)(tv ? tv->tv_sec : 0), (int)(tv ? tv->tv_usec : 0));
|
||||
nowms = (now.tv_sec * 1000ll) + (now.tv_usec / 1000ll);
|
||||
if (tv) {
|
||||
thenms = (tv->tv_sec * 1000ll) + (tv->tv_usec/1000ll);
|
||||
timeout = thenms > nowms ? nowms - thenms : 0;
|
||||
if (timeout < 0)
|
||||
timeout = 0;
|
||||
} else {
|
||||
timeout = -1;
|
||||
}
|
||||
|
||||
t->timer = virEventAddTimeoutImpl(timeout,
|
||||
libvirtd_mdns_timeout_dispatch,
|
||||
t,
|
||||
libvirtd_mdns_timeout_dofree);
|
||||
t->callback = cb;
|
||||
t->userdata = userdata;
|
||||
|
||||
if (t->timer < 0) {
|
||||
VIR_FREE(t);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
static void libvirtd_mdns_timeout_update(AvahiTimeout *t, const struct timeval *tv)
|
||||
{
|
||||
struct timeval now;
|
||||
long long nowms, thenms, timeout;
|
||||
AVAHI_DEBUG("Update timeout %p TV %p", t, tv);
|
||||
if (gettimeofday(&now, NULL) < 0) {
|
||||
VIR_FREE(t);
|
||||
return;
|
||||
}
|
||||
|
||||
nowms = (now.tv_sec * 1000ll) + (now.tv_usec / 1000ll);
|
||||
if (tv) {
|
||||
thenms = ((tv->tv_sec * 1000ll) + (tv->tv_usec/1000ll));
|
||||
timeout = thenms > nowms ? nowms - thenms : 0;
|
||||
if (timeout < 0)
|
||||
timeout = 0;
|
||||
} else {
|
||||
timeout = -1;
|
||||
}
|
||||
|
||||
virEventUpdateTimeoutImpl(t->timer, timeout);
|
||||
}
|
||||
|
||||
static void libvirtd_mdns_timeout_free(AvahiTimeout *t)
|
||||
{
|
||||
AVAHI_DEBUG("Free timeout %p", t);
|
||||
virEventRemoveTimeoutImpl(t->timer);
|
||||
}
|
||||
|
||||
|
||||
static AvahiPoll *libvirtd_create_poll(void)
|
||||
{
|
||||
AvahiPoll *p;
|
||||
if (VIR_ALLOC(p) < 0)
|
||||
return NULL;
|
||||
|
||||
p->userdata = NULL;
|
||||
|
||||
p->watch_new = libvirtd_mdns_watch_new;
|
||||
p->watch_update = libvirtd_mdns_watch_update;
|
||||
p->watch_get_events = libvirtd_mdns_watch_get_events;
|
||||
p->watch_free = libvirtd_mdns_watch_free;
|
||||
|
||||
p->timeout_new = libvirtd_mdns_timeout_new;
|
||||
p->timeout_update = libvirtd_mdns_timeout_update;
|
||||
p->timeout_free = libvirtd_mdns_timeout_free;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
struct libvirtd_mdns *libvirtd_mdns_new(void)
|
||||
{
|
||||
struct libvirtd_mdns *mdns;
|
||||
if (VIR_ALLOC(mdns) < 0)
|
||||
return NULL;
|
||||
|
||||
/* Allocate main loop object */
|
||||
if (!(mdns->poller = libvirtd_create_poll())) {
|
||||
VIR_FREE(mdns);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return mdns;
|
||||
}
|
||||
|
||||
int libvirtd_mdns_start(struct libvirtd_mdns *mdns)
|
||||
{
|
||||
int error;
|
||||
AVAHI_DEBUG("Starting client %p", mdns);
|
||||
mdns->client = avahi_client_new(mdns->poller, AVAHI_CLIENT_NO_FAIL, libvirtd_mdns_client_callback, mdns, &error);
|
||||
|
||||
if (!mdns->client) {
|
||||
AVAHI_DEBUG("Failed to create mDNS client: %s", avahi_strerror(error));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct libvirtd_mdns_group *libvirtd_mdns_add_group(struct libvirtd_mdns *mdns, const char *name) {
|
||||
struct libvirtd_mdns_group *group;
|
||||
|
||||
AVAHI_DEBUG("Adding group '%s'", name);
|
||||
if (VIR_ALLOC(group) < 0)
|
||||
return NULL;
|
||||
|
||||
if (!(group->name = strdup(name))) {
|
||||
VIR_FREE(group);
|
||||
return NULL;
|
||||
}
|
||||
group->mdns = mdns;
|
||||
group->next = mdns->group;
|
||||
mdns->group = group;
|
||||
return group;
|
||||
}
|
||||
|
||||
void libvirtd_mdns_remove_group(struct libvirtd_mdns *mdns, struct libvirtd_mdns_group *group) {
|
||||
struct libvirtd_mdns_group *tmp = mdns->group, *prev = NULL;
|
||||
|
||||
while (tmp) {
|
||||
if (tmp == group) {
|
||||
VIR_FREE(group->name);
|
||||
if (prev)
|
||||
prev->next = group->next;
|
||||
else
|
||||
group->mdns->group = group->next;
|
||||
VIR_FREE(group);
|
||||
return;
|
||||
}
|
||||
prev = tmp;
|
||||
tmp = tmp->next;
|
||||
}
|
||||
}
|
||||
|
||||
struct libvirtd_mdns_entry *libvirtd_mdns_add_entry(struct libvirtd_mdns_group *group, const char *type, int port) {
|
||||
struct libvirtd_mdns_entry *entry;
|
||||
|
||||
AVAHI_DEBUG("Adding entry %s %d to group %s", type, port, group->name);
|
||||
if (VIR_ALLOC(entry) < 0)
|
||||
return NULL;
|
||||
|
||||
entry->port = port;
|
||||
if (!(entry->type = strdup(type))) {
|
||||
VIR_FREE(entry);
|
||||
return NULL;
|
||||
}
|
||||
entry->next = group->entry;
|
||||
group->entry = entry;
|
||||
return entry;
|
||||
}
|
||||
|
||||
void libvirtd_mdns_remove_entry(struct libvirtd_mdns_group *group, struct libvirtd_mdns_entry *entry) {
|
||||
struct libvirtd_mdns_entry *tmp = group->entry, *prev = NULL;
|
||||
|
||||
while (tmp) {
|
||||
if (tmp == entry) {
|
||||
VIR_FREE(entry->type);
|
||||
if (prev)
|
||||
prev->next = entry->next;
|
||||
else
|
||||
group->entry = entry->next;
|
||||
return;
|
||||
}
|
||||
prev = tmp;
|
||||
tmp = tmp->next;
|
||||
}
|
||||
}
|
||||
|
||||
void libvirtd_mdns_stop(struct libvirtd_mdns *mdns)
|
||||
{
|
||||
struct libvirtd_mdns_group *group = mdns->group;
|
||||
while (group) {
|
||||
if (group->handle) {
|
||||
avahi_entry_group_free(group->handle);
|
||||
group->handle = NULL;
|
||||
}
|
||||
group = group->next;
|
||||
}
|
||||
if (mdns->client)
|
||||
avahi_client_free(mdns->client);
|
||||
mdns->client = NULL;
|
||||
}
|
||||
96
daemon/mdns.h
Normal file
96
daemon/mdns.h
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* mdns.c: advertise libvirt hypervisor connections
|
||||
*
|
||||
* Copyright (C) 2007 Daniel P. Berrange
|
||||
*
|
||||
* Derived from Avahi example service provider code.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#ifndef __VIRTD_MDNS_H__
|
||||
# define __VIRTD_MDNS_H__
|
||||
|
||||
struct libvirtd_mdns;
|
||||
struct libvirtd_mdns_group;
|
||||
struct libvirtd_mdns_entry;
|
||||
|
||||
/**
|
||||
* Prepares a new mdns manager object for use
|
||||
*/
|
||||
struct libvirtd_mdns *libvirtd_mdns_new(void);
|
||||
|
||||
/**
|
||||
* Starts the mdns client, advertising any groups/entries currently registered
|
||||
*
|
||||
* @mdns: manager to start advertising
|
||||
*
|
||||
* Starts the mdns client. Services may not be immediately visible, since
|
||||
* it may asynchronously wait for the mdns service to startup
|
||||
*
|
||||
* returns -1 upon failure, 0 upon success.
|
||||
*/
|
||||
int libvirtd_mdns_start(struct libvirtd_mdns *mdns);
|
||||
|
||||
/**
|
||||
* Stops the mdns client, removing any advertisements
|
||||
*
|
||||
* @mdns: manager to start advertising
|
||||
*
|
||||
*/
|
||||
void libvirtd_mdns_stop(struct libvirtd_mdns *mdns);
|
||||
|
||||
/**
|
||||
* Adds a group container for advertisement
|
||||
*
|
||||
* @mdns manager to attach the group to
|
||||
* @name unique human readable service name
|
||||
*
|
||||
* returns the group record, or NULL upon failure
|
||||
*/
|
||||
struct libvirtd_mdns_group *libvirtd_mdns_add_group(struct libvirtd_mdns *mdns, const char *name);
|
||||
|
||||
/**
|
||||
* Removes a group container from advertisement
|
||||
*
|
||||
* @mdns amanger to detach group from
|
||||
* @group group to remove
|
||||
*/
|
||||
void libvirtd_mdns_remove_group(struct libvirtd_mdns *mdns, struct libvirtd_mdns_group *group);
|
||||
|
||||
/**
|
||||
* Adds a service entry in a group
|
||||
*
|
||||
* @group group to attach the entry to
|
||||
* @type service type string
|
||||
* @port tcp port number
|
||||
*
|
||||
* returns the service record, or NULL upon failure
|
||||
*/
|
||||
struct libvirtd_mdns_entry *libvirtd_mdns_add_entry(struct libvirtd_mdns_group *group, const char *type, int port);
|
||||
|
||||
/**
|
||||
* Removes a service entry from a group
|
||||
*
|
||||
* @group group to detach service entry from
|
||||
* @entry service entry to remove
|
||||
*/
|
||||
void libvirtd_mdns_remove_entry(struct libvirtd_mdns_group *group, struct libvirtd_mdns_entry *entry);
|
||||
|
||||
#endif /* __VIRTD_MDNS_H__ */
|
||||
6697
daemon/remote.c
Normal file
6697
daemon/remote.c
Normal file
File diff suppressed because it is too large
Load Diff
73
daemon/remote.h
Normal file
73
daemon/remote.h
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* remote.h: handlers for RPC method calls
|
||||
*
|
||||
* Copyright (C) 2007, 2008, 2009 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Richard W.M. Jones <rjones@redhat.com>
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
#ifndef __LIBVIRTD_REMOTE_H__
|
||||
# define __LIBVIRTD_REMOTE_H__
|
||||
|
||||
|
||||
# include "libvirtd.h"
|
||||
|
||||
typedef union {
|
||||
# include "remote_dispatch_args.h"
|
||||
} dispatch_args;
|
||||
|
||||
typedef union {
|
||||
# include "remote_dispatch_ret.h"
|
||||
} dispatch_ret;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* When the RPC handler is called:
|
||||
*
|
||||
* - Server object is unlocked
|
||||
* - Client object is unlocked
|
||||
*
|
||||
* Both must be locked before use. Server lock must
|
||||
* be held before attempting to lock client.
|
||||
*
|
||||
* Without any locking, it is safe to use:
|
||||
*
|
||||
* 'conn', 'rerr', 'args and 'ret'
|
||||
*/
|
||||
typedef int (*dispatch_fn) (struct qemud_server *server,
|
||||
struct qemud_client *client,
|
||||
virConnectPtr conn,
|
||||
remote_message_header *hdr,
|
||||
remote_error *err,
|
||||
dispatch_args *args,
|
||||
dispatch_ret *ret);
|
||||
|
||||
typedef struct {
|
||||
dispatch_fn fn;
|
||||
xdrproc_t args_filter;
|
||||
xdrproc_t ret_filter;
|
||||
} dispatch_data;
|
||||
|
||||
|
||||
const dispatch_data const *remoteGetDispatchData(int proc);
|
||||
|
||||
|
||||
|
||||
#endif /* __LIBVIRTD_REMOTE_H__ */
|
||||
167
daemon/remote_dispatch_args.h
Normal file
167
daemon/remote_dispatch_args.h
Normal file
@ -0,0 +1,167 @@
|
||||
/* Automatically generated by remote_generate_stubs.pl.
|
||||
* Do not edit this file. Any changes you make will be lost.
|
||||
*/
|
||||
|
||||
remote_open_args val_remote_open_args;
|
||||
remote_get_max_vcpus_args val_remote_get_max_vcpus_args;
|
||||
remote_domain_attach_device_args val_remote_domain_attach_device_args;
|
||||
remote_domain_create_args val_remote_domain_create_args;
|
||||
remote_domain_create_xml_args val_remote_domain_create_xml_args;
|
||||
remote_domain_define_xml_args val_remote_domain_define_xml_args;
|
||||
remote_domain_destroy_args val_remote_domain_destroy_args;
|
||||
remote_domain_detach_device_args val_remote_domain_detach_device_args;
|
||||
remote_domain_dump_xml_args val_remote_domain_dump_xml_args;
|
||||
remote_domain_get_autostart_args val_remote_domain_get_autostart_args;
|
||||
remote_domain_get_info_args val_remote_domain_get_info_args;
|
||||
remote_domain_get_max_memory_args val_remote_domain_get_max_memory_args;
|
||||
remote_domain_get_max_vcpus_args val_remote_domain_get_max_vcpus_args;
|
||||
remote_domain_get_os_type_args val_remote_domain_get_os_type_args;
|
||||
remote_domain_get_vcpus_args val_remote_domain_get_vcpus_args;
|
||||
remote_list_defined_domains_args val_remote_list_defined_domains_args;
|
||||
remote_domain_lookup_by_id_args val_remote_domain_lookup_by_id_args;
|
||||
remote_domain_lookup_by_name_args val_remote_domain_lookup_by_name_args;
|
||||
remote_domain_lookup_by_uuid_args val_remote_domain_lookup_by_uuid_args;
|
||||
remote_domain_pin_vcpu_args val_remote_domain_pin_vcpu_args;
|
||||
remote_domain_reboot_args val_remote_domain_reboot_args;
|
||||
remote_domain_resume_args val_remote_domain_resume_args;
|
||||
remote_domain_set_autostart_args val_remote_domain_set_autostart_args;
|
||||
remote_domain_set_max_memory_args val_remote_domain_set_max_memory_args;
|
||||
remote_domain_set_memory_args val_remote_domain_set_memory_args;
|
||||
remote_domain_set_vcpus_args val_remote_domain_set_vcpus_args;
|
||||
remote_domain_shutdown_args val_remote_domain_shutdown_args;
|
||||
remote_domain_suspend_args val_remote_domain_suspend_args;
|
||||
remote_domain_undefine_args val_remote_domain_undefine_args;
|
||||
remote_list_defined_networks_args val_remote_list_defined_networks_args;
|
||||
remote_list_domains_args val_remote_list_domains_args;
|
||||
remote_list_networks_args val_remote_list_networks_args;
|
||||
remote_network_create_args val_remote_network_create_args;
|
||||
remote_network_create_xml_args val_remote_network_create_xml_args;
|
||||
remote_network_define_xml_args val_remote_network_define_xml_args;
|
||||
remote_network_destroy_args val_remote_network_destroy_args;
|
||||
remote_network_dump_xml_args val_remote_network_dump_xml_args;
|
||||
remote_network_get_autostart_args val_remote_network_get_autostart_args;
|
||||
remote_network_get_bridge_name_args val_remote_network_get_bridge_name_args;
|
||||
remote_network_lookup_by_name_args val_remote_network_lookup_by_name_args;
|
||||
remote_network_lookup_by_uuid_args val_remote_network_lookup_by_uuid_args;
|
||||
remote_network_set_autostart_args val_remote_network_set_autostart_args;
|
||||
remote_network_undefine_args val_remote_network_undefine_args;
|
||||
remote_domain_core_dump_args val_remote_domain_core_dump_args;
|
||||
remote_domain_restore_args val_remote_domain_restore_args;
|
||||
remote_domain_save_args val_remote_domain_save_args;
|
||||
remote_domain_get_scheduler_type_args val_remote_domain_get_scheduler_type_args;
|
||||
remote_domain_get_scheduler_parameters_args val_remote_domain_get_scheduler_parameters_args;
|
||||
remote_domain_set_scheduler_parameters_args val_remote_domain_set_scheduler_parameters_args;
|
||||
remote_supports_feature_args val_remote_supports_feature_args;
|
||||
remote_domain_migrate_prepare_args val_remote_domain_migrate_prepare_args;
|
||||
remote_domain_migrate_perform_args val_remote_domain_migrate_perform_args;
|
||||
remote_domain_migrate_finish_args val_remote_domain_migrate_finish_args;
|
||||
remote_domain_block_stats_args val_remote_domain_block_stats_args;
|
||||
remote_domain_interface_stats_args val_remote_domain_interface_stats_args;
|
||||
remote_auth_sasl_start_args val_remote_auth_sasl_start_args;
|
||||
remote_auth_sasl_step_args val_remote_auth_sasl_step_args;
|
||||
remote_list_storage_pools_args val_remote_list_storage_pools_args;
|
||||
remote_list_defined_storage_pools_args val_remote_list_defined_storage_pools_args;
|
||||
remote_find_storage_pool_sources_args val_remote_find_storage_pool_sources_args;
|
||||
remote_storage_pool_create_xml_args val_remote_storage_pool_create_xml_args;
|
||||
remote_storage_pool_define_xml_args val_remote_storage_pool_define_xml_args;
|
||||
remote_storage_pool_create_args val_remote_storage_pool_create_args;
|
||||
remote_storage_pool_build_args val_remote_storage_pool_build_args;
|
||||
remote_storage_pool_destroy_args val_remote_storage_pool_destroy_args;
|
||||
remote_storage_pool_delete_args val_remote_storage_pool_delete_args;
|
||||
remote_storage_pool_undefine_args val_remote_storage_pool_undefine_args;
|
||||
remote_storage_pool_refresh_args val_remote_storage_pool_refresh_args;
|
||||
remote_storage_pool_lookup_by_name_args val_remote_storage_pool_lookup_by_name_args;
|
||||
remote_storage_pool_lookup_by_uuid_args val_remote_storage_pool_lookup_by_uuid_args;
|
||||
remote_storage_pool_lookup_by_volume_args val_remote_storage_pool_lookup_by_volume_args;
|
||||
remote_storage_pool_get_info_args val_remote_storage_pool_get_info_args;
|
||||
remote_storage_pool_dump_xml_args val_remote_storage_pool_dump_xml_args;
|
||||
remote_storage_pool_get_autostart_args val_remote_storage_pool_get_autostart_args;
|
||||
remote_storage_pool_set_autostart_args val_remote_storage_pool_set_autostart_args;
|
||||
remote_storage_pool_num_of_volumes_args val_remote_storage_pool_num_of_volumes_args;
|
||||
remote_storage_pool_list_volumes_args val_remote_storage_pool_list_volumes_args;
|
||||
remote_storage_vol_create_xml_args val_remote_storage_vol_create_xml_args;
|
||||
remote_storage_vol_delete_args val_remote_storage_vol_delete_args;
|
||||
remote_storage_vol_lookup_by_name_args val_remote_storage_vol_lookup_by_name_args;
|
||||
remote_storage_vol_lookup_by_key_args val_remote_storage_vol_lookup_by_key_args;
|
||||
remote_storage_vol_lookup_by_path_args val_remote_storage_vol_lookup_by_path_args;
|
||||
remote_storage_vol_get_info_args val_remote_storage_vol_get_info_args;
|
||||
remote_storage_vol_dump_xml_args val_remote_storage_vol_dump_xml_args;
|
||||
remote_storage_vol_get_path_args val_remote_storage_vol_get_path_args;
|
||||
remote_node_get_cells_free_memory_args val_remote_node_get_cells_free_memory_args;
|
||||
remote_domain_block_peek_args val_remote_domain_block_peek_args;
|
||||
remote_domain_memory_peek_args val_remote_domain_memory_peek_args;
|
||||
remote_domain_migrate_prepare2_args val_remote_domain_migrate_prepare2_args;
|
||||
remote_domain_migrate_finish2_args val_remote_domain_migrate_finish2_args;
|
||||
remote_node_num_of_devices_args val_remote_node_num_of_devices_args;
|
||||
remote_node_list_devices_args val_remote_node_list_devices_args;
|
||||
remote_node_device_lookup_by_name_args val_remote_node_device_lookup_by_name_args;
|
||||
remote_node_device_dump_xml_args val_remote_node_device_dump_xml_args;
|
||||
remote_node_device_get_parent_args val_remote_node_device_get_parent_args;
|
||||
remote_node_device_num_of_caps_args val_remote_node_device_num_of_caps_args;
|
||||
remote_node_device_list_caps_args val_remote_node_device_list_caps_args;
|
||||
remote_node_device_dettach_args val_remote_node_device_dettach_args;
|
||||
remote_node_device_re_attach_args val_remote_node_device_re_attach_args;
|
||||
remote_node_device_reset_args val_remote_node_device_reset_args;
|
||||
remote_domain_get_security_label_args val_remote_domain_get_security_label_args;
|
||||
remote_node_device_create_xml_args val_remote_node_device_create_xml_args;
|
||||
remote_node_device_destroy_args val_remote_node_device_destroy_args;
|
||||
remote_storage_vol_create_xml_from_args val_remote_storage_vol_create_xml_from_args;
|
||||
remote_list_interfaces_args val_remote_list_interfaces_args;
|
||||
remote_interface_lookup_by_name_args val_remote_interface_lookup_by_name_args;
|
||||
remote_interface_lookup_by_mac_string_args val_remote_interface_lookup_by_mac_string_args;
|
||||
remote_interface_get_xml_desc_args val_remote_interface_get_xml_desc_args;
|
||||
remote_interface_define_xml_args val_remote_interface_define_xml_args;
|
||||
remote_interface_undefine_args val_remote_interface_undefine_args;
|
||||
remote_interface_create_args val_remote_interface_create_args;
|
||||
remote_interface_destroy_args val_remote_interface_destroy_args;
|
||||
remote_domain_xml_from_native_args val_remote_domain_xml_from_native_args;
|
||||
remote_domain_xml_to_native_args val_remote_domain_xml_to_native_args;
|
||||
remote_list_defined_interfaces_args val_remote_list_defined_interfaces_args;
|
||||
remote_list_secrets_args val_remote_list_secrets_args;
|
||||
remote_secret_lookup_by_uuid_args val_remote_secret_lookup_by_uuid_args;
|
||||
remote_secret_define_xml_args val_remote_secret_define_xml_args;
|
||||
remote_secret_get_xml_desc_args val_remote_secret_get_xml_desc_args;
|
||||
remote_secret_set_value_args val_remote_secret_set_value_args;
|
||||
remote_secret_get_value_args val_remote_secret_get_value_args;
|
||||
remote_secret_undefine_args val_remote_secret_undefine_args;
|
||||
remote_secret_lookup_by_usage_args val_remote_secret_lookup_by_usage_args;
|
||||
remote_domain_migrate_prepare_tunnel_args val_remote_domain_migrate_prepare_tunnel_args;
|
||||
remote_domain_is_active_args val_remote_domain_is_active_args;
|
||||
remote_domain_is_persistent_args val_remote_domain_is_persistent_args;
|
||||
remote_network_is_active_args val_remote_network_is_active_args;
|
||||
remote_network_is_persistent_args val_remote_network_is_persistent_args;
|
||||
remote_storage_pool_is_active_args val_remote_storage_pool_is_active_args;
|
||||
remote_storage_pool_is_persistent_args val_remote_storage_pool_is_persistent_args;
|
||||
remote_interface_is_active_args val_remote_interface_is_active_args;
|
||||
remote_cpu_compare_args val_remote_cpu_compare_args;
|
||||
remote_domain_memory_stats_args val_remote_domain_memory_stats_args;
|
||||
remote_domain_attach_device_flags_args val_remote_domain_attach_device_flags_args;
|
||||
remote_domain_detach_device_flags_args val_remote_domain_detach_device_flags_args;
|
||||
remote_cpu_baseline_args val_remote_cpu_baseline_args;
|
||||
remote_domain_get_job_info_args val_remote_domain_get_job_info_args;
|
||||
remote_domain_abort_job_args val_remote_domain_abort_job_args;
|
||||
remote_storage_vol_wipe_args val_remote_storage_vol_wipe_args;
|
||||
remote_domain_migrate_set_max_downtime_args val_remote_domain_migrate_set_max_downtime_args;
|
||||
remote_domain_events_register_any_args val_remote_domain_events_register_any_args;
|
||||
remote_domain_events_deregister_any_args val_remote_domain_events_deregister_any_args;
|
||||
remote_domain_update_device_flags_args val_remote_domain_update_device_flags_args;
|
||||
remote_nwfilter_lookup_by_name_args val_remote_nwfilter_lookup_by_name_args;
|
||||
remote_nwfilter_lookup_by_uuid_args val_remote_nwfilter_lookup_by_uuid_args;
|
||||
remote_nwfilter_get_xml_desc_args val_remote_nwfilter_get_xml_desc_args;
|
||||
remote_list_nwfilters_args val_remote_list_nwfilters_args;
|
||||
remote_nwfilter_define_xml_args val_remote_nwfilter_define_xml_args;
|
||||
remote_nwfilter_undefine_args val_remote_nwfilter_undefine_args;
|
||||
remote_domain_managed_save_args val_remote_domain_managed_save_args;
|
||||
remote_domain_has_managed_save_image_args val_remote_domain_has_managed_save_image_args;
|
||||
remote_domain_managed_save_remove_args val_remote_domain_managed_save_remove_args;
|
||||
remote_domain_snapshot_create_xml_args val_remote_domain_snapshot_create_xml_args;
|
||||
remote_domain_snapshot_dump_xml_args val_remote_domain_snapshot_dump_xml_args;
|
||||
remote_domain_snapshot_num_args val_remote_domain_snapshot_num_args;
|
||||
remote_domain_snapshot_list_names_args val_remote_domain_snapshot_list_names_args;
|
||||
remote_domain_snapshot_lookup_by_name_args val_remote_domain_snapshot_lookup_by_name_args;
|
||||
remote_domain_has_current_snapshot_args val_remote_domain_has_current_snapshot_args;
|
||||
remote_domain_snapshot_current_args val_remote_domain_snapshot_current_args;
|
||||
remote_domain_revert_to_snapshot_args val_remote_domain_revert_to_snapshot_args;
|
||||
remote_domain_snapshot_delete_args val_remote_domain_snapshot_delete_args;
|
||||
remote_domain_get_block_info_args val_remote_domain_get_block_info_args;
|
||||
remote_domain_create_with_flags_args val_remote_domain_create_with_flags_args;
|
||||
1516
daemon/remote_dispatch_prototypes.h
Normal file
1516
daemon/remote_dispatch_prototypes.h
Normal file
File diff suppressed because it is too large
Load Diff
137
daemon/remote_dispatch_ret.h
Normal file
137
daemon/remote_dispatch_ret.h
Normal file
@ -0,0 +1,137 @@
|
||||
/* Automatically generated by remote_generate_stubs.pl.
|
||||
* Do not edit this file. Any changes you make will be lost.
|
||||
*/
|
||||
|
||||
remote_get_type_ret val_remote_get_type_ret;
|
||||
remote_get_version_ret val_remote_get_version_ret;
|
||||
remote_get_max_vcpus_ret val_remote_get_max_vcpus_ret;
|
||||
remote_node_get_info_ret val_remote_node_get_info_ret;
|
||||
remote_get_capabilities_ret val_remote_get_capabilities_ret;
|
||||
remote_domain_create_xml_ret val_remote_domain_create_xml_ret;
|
||||
remote_domain_define_xml_ret val_remote_domain_define_xml_ret;
|
||||
remote_domain_dump_xml_ret val_remote_domain_dump_xml_ret;
|
||||
remote_domain_get_autostart_ret val_remote_domain_get_autostart_ret;
|
||||
remote_domain_get_info_ret val_remote_domain_get_info_ret;
|
||||
remote_domain_get_max_memory_ret val_remote_domain_get_max_memory_ret;
|
||||
remote_domain_get_max_vcpus_ret val_remote_domain_get_max_vcpus_ret;
|
||||
remote_domain_get_os_type_ret val_remote_domain_get_os_type_ret;
|
||||
remote_domain_get_vcpus_ret val_remote_domain_get_vcpus_ret;
|
||||
remote_list_defined_domains_ret val_remote_list_defined_domains_ret;
|
||||
remote_domain_lookup_by_id_ret val_remote_domain_lookup_by_id_ret;
|
||||
remote_domain_lookup_by_name_ret val_remote_domain_lookup_by_name_ret;
|
||||
remote_domain_lookup_by_uuid_ret val_remote_domain_lookup_by_uuid_ret;
|
||||
remote_num_of_defined_domains_ret val_remote_num_of_defined_domains_ret;
|
||||
remote_list_defined_networks_ret val_remote_list_defined_networks_ret;
|
||||
remote_list_domains_ret val_remote_list_domains_ret;
|
||||
remote_list_networks_ret val_remote_list_networks_ret;
|
||||
remote_network_create_xml_ret val_remote_network_create_xml_ret;
|
||||
remote_network_define_xml_ret val_remote_network_define_xml_ret;
|
||||
remote_network_dump_xml_ret val_remote_network_dump_xml_ret;
|
||||
remote_network_get_autostart_ret val_remote_network_get_autostart_ret;
|
||||
remote_network_get_bridge_name_ret val_remote_network_get_bridge_name_ret;
|
||||
remote_network_lookup_by_name_ret val_remote_network_lookup_by_name_ret;
|
||||
remote_network_lookup_by_uuid_ret val_remote_network_lookup_by_uuid_ret;
|
||||
remote_num_of_defined_networks_ret val_remote_num_of_defined_networks_ret;
|
||||
remote_num_of_domains_ret val_remote_num_of_domains_ret;
|
||||
remote_num_of_networks_ret val_remote_num_of_networks_ret;
|
||||
remote_domain_get_scheduler_type_ret val_remote_domain_get_scheduler_type_ret;
|
||||
remote_domain_get_scheduler_parameters_ret val_remote_domain_get_scheduler_parameters_ret;
|
||||
remote_get_hostname_ret val_remote_get_hostname_ret;
|
||||
remote_supports_feature_ret val_remote_supports_feature_ret;
|
||||
remote_domain_migrate_prepare_ret val_remote_domain_migrate_prepare_ret;
|
||||
remote_domain_migrate_finish_ret val_remote_domain_migrate_finish_ret;
|
||||
remote_domain_block_stats_ret val_remote_domain_block_stats_ret;
|
||||
remote_domain_interface_stats_ret val_remote_domain_interface_stats_ret;
|
||||
remote_auth_list_ret val_remote_auth_list_ret;
|
||||
remote_auth_sasl_init_ret val_remote_auth_sasl_init_ret;
|
||||
remote_auth_sasl_start_ret val_remote_auth_sasl_start_ret;
|
||||
remote_auth_sasl_step_ret val_remote_auth_sasl_step_ret;
|
||||
remote_auth_polkit_ret val_remote_auth_polkit_ret;
|
||||
remote_num_of_storage_pools_ret val_remote_num_of_storage_pools_ret;
|
||||
remote_list_storage_pools_ret val_remote_list_storage_pools_ret;
|
||||
remote_num_of_defined_storage_pools_ret val_remote_num_of_defined_storage_pools_ret;
|
||||
remote_list_defined_storage_pools_ret val_remote_list_defined_storage_pools_ret;
|
||||
remote_find_storage_pool_sources_ret val_remote_find_storage_pool_sources_ret;
|
||||
remote_storage_pool_create_xml_ret val_remote_storage_pool_create_xml_ret;
|
||||
remote_storage_pool_define_xml_ret val_remote_storage_pool_define_xml_ret;
|
||||
remote_storage_pool_lookup_by_name_ret val_remote_storage_pool_lookup_by_name_ret;
|
||||
remote_storage_pool_lookup_by_uuid_ret val_remote_storage_pool_lookup_by_uuid_ret;
|
||||
remote_storage_pool_lookup_by_volume_ret val_remote_storage_pool_lookup_by_volume_ret;
|
||||
remote_storage_pool_get_info_ret val_remote_storage_pool_get_info_ret;
|
||||
remote_storage_pool_dump_xml_ret val_remote_storage_pool_dump_xml_ret;
|
||||
remote_storage_pool_get_autostart_ret val_remote_storage_pool_get_autostart_ret;
|
||||
remote_storage_pool_num_of_volumes_ret val_remote_storage_pool_num_of_volumes_ret;
|
||||
remote_storage_pool_list_volumes_ret val_remote_storage_pool_list_volumes_ret;
|
||||
remote_storage_vol_create_xml_ret val_remote_storage_vol_create_xml_ret;
|
||||
remote_storage_vol_lookup_by_name_ret val_remote_storage_vol_lookup_by_name_ret;
|
||||
remote_storage_vol_lookup_by_key_ret val_remote_storage_vol_lookup_by_key_ret;
|
||||
remote_storage_vol_lookup_by_path_ret val_remote_storage_vol_lookup_by_path_ret;
|
||||
remote_storage_vol_get_info_ret val_remote_storage_vol_get_info_ret;
|
||||
remote_storage_vol_dump_xml_ret val_remote_storage_vol_dump_xml_ret;
|
||||
remote_storage_vol_get_path_ret val_remote_storage_vol_get_path_ret;
|
||||
remote_node_get_cells_free_memory_ret val_remote_node_get_cells_free_memory_ret;
|
||||
remote_node_get_free_memory_ret val_remote_node_get_free_memory_ret;
|
||||
remote_domain_block_peek_ret val_remote_domain_block_peek_ret;
|
||||
remote_domain_memory_peek_ret val_remote_domain_memory_peek_ret;
|
||||
remote_domain_events_register_ret val_remote_domain_events_register_ret;
|
||||
remote_domain_events_deregister_ret val_remote_domain_events_deregister_ret;
|
||||
remote_domain_migrate_prepare2_ret val_remote_domain_migrate_prepare2_ret;
|
||||
remote_domain_migrate_finish2_ret val_remote_domain_migrate_finish2_ret;
|
||||
remote_get_uri_ret val_remote_get_uri_ret;
|
||||
remote_node_num_of_devices_ret val_remote_node_num_of_devices_ret;
|
||||
remote_node_list_devices_ret val_remote_node_list_devices_ret;
|
||||
remote_node_device_lookup_by_name_ret val_remote_node_device_lookup_by_name_ret;
|
||||
remote_node_device_dump_xml_ret val_remote_node_device_dump_xml_ret;
|
||||
remote_node_device_get_parent_ret val_remote_node_device_get_parent_ret;
|
||||
remote_node_device_num_of_caps_ret val_remote_node_device_num_of_caps_ret;
|
||||
remote_node_device_list_caps_ret val_remote_node_device_list_caps_ret;
|
||||
remote_domain_get_security_label_ret val_remote_domain_get_security_label_ret;
|
||||
remote_node_get_security_model_ret val_remote_node_get_security_model_ret;
|
||||
remote_node_device_create_xml_ret val_remote_node_device_create_xml_ret;
|
||||
remote_storage_vol_create_xml_from_ret val_remote_storage_vol_create_xml_from_ret;
|
||||
remote_num_of_interfaces_ret val_remote_num_of_interfaces_ret;
|
||||
remote_list_interfaces_ret val_remote_list_interfaces_ret;
|
||||
remote_interface_lookup_by_name_ret val_remote_interface_lookup_by_name_ret;
|
||||
remote_interface_lookup_by_mac_string_ret val_remote_interface_lookup_by_mac_string_ret;
|
||||
remote_interface_get_xml_desc_ret val_remote_interface_get_xml_desc_ret;
|
||||
remote_interface_define_xml_ret val_remote_interface_define_xml_ret;
|
||||
remote_domain_xml_from_native_ret val_remote_domain_xml_from_native_ret;
|
||||
remote_domain_xml_to_native_ret val_remote_domain_xml_to_native_ret;
|
||||
remote_num_of_defined_interfaces_ret val_remote_num_of_defined_interfaces_ret;
|
||||
remote_list_defined_interfaces_ret val_remote_list_defined_interfaces_ret;
|
||||
remote_num_of_secrets_ret val_remote_num_of_secrets_ret;
|
||||
remote_list_secrets_ret val_remote_list_secrets_ret;
|
||||
remote_secret_lookup_by_uuid_ret val_remote_secret_lookup_by_uuid_ret;
|
||||
remote_secret_define_xml_ret val_remote_secret_define_xml_ret;
|
||||
remote_secret_get_xml_desc_ret val_remote_secret_get_xml_desc_ret;
|
||||
remote_secret_get_value_ret val_remote_secret_get_value_ret;
|
||||
remote_secret_lookup_by_usage_ret val_remote_secret_lookup_by_usage_ret;
|
||||
remote_is_secure_ret val_remote_is_secure_ret;
|
||||
remote_domain_is_active_ret val_remote_domain_is_active_ret;
|
||||
remote_domain_is_persistent_ret val_remote_domain_is_persistent_ret;
|
||||
remote_network_is_active_ret val_remote_network_is_active_ret;
|
||||
remote_network_is_persistent_ret val_remote_network_is_persistent_ret;
|
||||
remote_storage_pool_is_active_ret val_remote_storage_pool_is_active_ret;
|
||||
remote_storage_pool_is_persistent_ret val_remote_storage_pool_is_persistent_ret;
|
||||
remote_interface_is_active_ret val_remote_interface_is_active_ret;
|
||||
remote_get_lib_version_ret val_remote_get_lib_version_ret;
|
||||
remote_cpu_compare_ret val_remote_cpu_compare_ret;
|
||||
remote_domain_memory_stats_ret val_remote_domain_memory_stats_ret;
|
||||
remote_cpu_baseline_ret val_remote_cpu_baseline_ret;
|
||||
remote_domain_get_job_info_ret val_remote_domain_get_job_info_ret;
|
||||
remote_nwfilter_lookup_by_name_ret val_remote_nwfilter_lookup_by_name_ret;
|
||||
remote_nwfilter_lookup_by_uuid_ret val_remote_nwfilter_lookup_by_uuid_ret;
|
||||
remote_nwfilter_get_xml_desc_ret val_remote_nwfilter_get_xml_desc_ret;
|
||||
remote_num_of_nwfilters_ret val_remote_num_of_nwfilters_ret;
|
||||
remote_list_nwfilters_ret val_remote_list_nwfilters_ret;
|
||||
remote_nwfilter_define_xml_ret val_remote_nwfilter_define_xml_ret;
|
||||
remote_domain_has_managed_save_image_ret val_remote_domain_has_managed_save_image_ret;
|
||||
remote_domain_snapshot_create_xml_ret val_remote_domain_snapshot_create_xml_ret;
|
||||
remote_domain_snapshot_dump_xml_ret val_remote_domain_snapshot_dump_xml_ret;
|
||||
remote_domain_snapshot_num_ret val_remote_domain_snapshot_num_ret;
|
||||
remote_domain_snapshot_list_names_ret val_remote_domain_snapshot_list_names_ret;
|
||||
remote_domain_snapshot_lookup_by_name_ret val_remote_domain_snapshot_lookup_by_name_ret;
|
||||
remote_domain_has_current_snapshot_ret val_remote_domain_has_current_snapshot_ret;
|
||||
remote_domain_snapshot_current_ret val_remote_domain_snapshot_current_ret;
|
||||
remote_domain_get_block_info_ret val_remote_domain_get_block_info_ret;
|
||||
remote_domain_create_with_flags_ret val_remote_domain_create_with_flags_ret;
|
||||
989
daemon/remote_dispatch_table.h
Normal file
989
daemon/remote_dispatch_table.h
Normal file
@ -0,0 +1,989 @@
|
||||
/* Automatically generated by remote_generate_stubs.pl.
|
||||
* Do not edit this file. Any changes you make will be lost.
|
||||
*/
|
||||
|
||||
{ /* (unused) => 0 */
|
||||
.fn = NULL,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* Open => 1 */
|
||||
.fn = (dispatch_fn) remoteDispatchOpen,
|
||||
.args_filter = (xdrproc_t) xdr_remote_open_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* Close => 2 */
|
||||
.fn = (dispatch_fn) remoteDispatchClose,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* GetType => 3 */
|
||||
.fn = (dispatch_fn) remoteDispatchGetType,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_get_type_ret,
|
||||
},
|
||||
{ /* GetVersion => 4 */
|
||||
.fn = (dispatch_fn) remoteDispatchGetVersion,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_get_version_ret,
|
||||
},
|
||||
{ /* GetMaxVcpus => 5 */
|
||||
.fn = (dispatch_fn) remoteDispatchGetMaxVcpus,
|
||||
.args_filter = (xdrproc_t) xdr_remote_get_max_vcpus_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_get_max_vcpus_ret,
|
||||
},
|
||||
{ /* NodeGetInfo => 6 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeGetInfo,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_get_info_ret,
|
||||
},
|
||||
{ /* GetCapabilities => 7 */
|
||||
.fn = (dispatch_fn) remoteDispatchGetCapabilities,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_get_capabilities_ret,
|
||||
},
|
||||
{ /* DomainAttachDevice => 8 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainAttachDevice,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_attach_device_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainCreate => 9 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainCreate,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_create_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainCreateXml => 10 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainCreateXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_create_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_create_xml_ret,
|
||||
},
|
||||
{ /* DomainDefineXml => 11 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainDefineXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_define_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_define_xml_ret,
|
||||
},
|
||||
{ /* DomainDestroy => 12 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainDestroy,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_destroy_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainDetachDevice => 13 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainDetachDevice,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_detach_device_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainDumpXml => 14 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainDumpXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_dump_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_dump_xml_ret,
|
||||
},
|
||||
{ /* DomainGetAutostart => 15 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetAutostart,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_autostart_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_autostart_ret,
|
||||
},
|
||||
{ /* DomainGetInfo => 16 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetInfo,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_info_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_info_ret,
|
||||
},
|
||||
{ /* DomainGetMaxMemory => 17 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetMaxMemory,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_max_memory_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_max_memory_ret,
|
||||
},
|
||||
{ /* DomainGetMaxVcpus => 18 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetMaxVcpus,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_max_vcpus_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_max_vcpus_ret,
|
||||
},
|
||||
{ /* DomainGetOsType => 19 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetOsType,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_os_type_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_os_type_ret,
|
||||
},
|
||||
{ /* DomainGetVcpus => 20 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetVcpus,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_vcpus_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_vcpus_ret,
|
||||
},
|
||||
{ /* ListDefinedDomains => 21 */
|
||||
.fn = (dispatch_fn) remoteDispatchListDefinedDomains,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_defined_domains_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_defined_domains_ret,
|
||||
},
|
||||
{ /* DomainLookupById => 22 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainLookupById,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_lookup_by_id_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_lookup_by_id_ret,
|
||||
},
|
||||
{ /* DomainLookupByName => 23 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainLookupByName,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_lookup_by_name_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_lookup_by_name_ret,
|
||||
},
|
||||
{ /* DomainLookupByUuid => 24 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainLookupByUuid,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_lookup_by_uuid_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_lookup_by_uuid_ret,
|
||||
},
|
||||
{ /* NumOfDefinedDomains => 25 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfDefinedDomains,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_defined_domains_ret,
|
||||
},
|
||||
{ /* DomainPinVcpu => 26 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainPinVcpu,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_pin_vcpu_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainReboot => 27 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainReboot,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_reboot_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainResume => 28 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainResume,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_resume_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainSetAutostart => 29 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSetAutostart,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_set_autostart_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainSetMaxMemory => 30 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSetMaxMemory,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_set_max_memory_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainSetMemory => 31 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSetMemory,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_set_memory_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainSetVcpus => 32 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSetVcpus,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_set_vcpus_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainShutdown => 33 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainShutdown,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_shutdown_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainSuspend => 34 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSuspend,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_suspend_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainUndefine => 35 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainUndefine,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_undefine_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* ListDefinedNetworks => 36 */
|
||||
.fn = (dispatch_fn) remoteDispatchListDefinedNetworks,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_defined_networks_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_defined_networks_ret,
|
||||
},
|
||||
{ /* ListDomains => 37 */
|
||||
.fn = (dispatch_fn) remoteDispatchListDomains,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_domains_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_domains_ret,
|
||||
},
|
||||
{ /* ListNetworks => 38 */
|
||||
.fn = (dispatch_fn) remoteDispatchListNetworks,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_networks_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_networks_ret,
|
||||
},
|
||||
{ /* NetworkCreate => 39 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkCreate,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_create_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* NetworkCreateXml => 40 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkCreateXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_create_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_network_create_xml_ret,
|
||||
},
|
||||
{ /* NetworkDefineXml => 41 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkDefineXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_define_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_network_define_xml_ret,
|
||||
},
|
||||
{ /* NetworkDestroy => 42 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkDestroy,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_destroy_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* NetworkDumpXml => 43 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkDumpXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_dump_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_network_dump_xml_ret,
|
||||
},
|
||||
{ /* NetworkGetAutostart => 44 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkGetAutostart,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_get_autostart_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_network_get_autostart_ret,
|
||||
},
|
||||
{ /* NetworkGetBridgeName => 45 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkGetBridgeName,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_get_bridge_name_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_network_get_bridge_name_ret,
|
||||
},
|
||||
{ /* NetworkLookupByName => 46 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkLookupByName,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_lookup_by_name_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_network_lookup_by_name_ret,
|
||||
},
|
||||
{ /* NetworkLookupByUuid => 47 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkLookupByUuid,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_lookup_by_uuid_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_network_lookup_by_uuid_ret,
|
||||
},
|
||||
{ /* NetworkSetAutostart => 48 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkSetAutostart,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_set_autostart_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* NetworkUndefine => 49 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkUndefine,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_undefine_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* NumOfDefinedNetworks => 50 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfDefinedNetworks,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_defined_networks_ret,
|
||||
},
|
||||
{ /* NumOfDomains => 51 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfDomains,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_domains_ret,
|
||||
},
|
||||
{ /* NumOfNetworks => 52 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfNetworks,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_networks_ret,
|
||||
},
|
||||
{ /* DomainCoreDump => 53 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainCoreDump,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_core_dump_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainRestore => 54 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainRestore,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_restore_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainSave => 55 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSave,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_save_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainGetSchedulerType => 56 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetSchedulerType,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_scheduler_type_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_scheduler_type_ret,
|
||||
},
|
||||
{ /* DomainGetSchedulerParameters => 57 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetSchedulerParameters,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_scheduler_parameters_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_scheduler_parameters_ret,
|
||||
},
|
||||
{ /* DomainSetSchedulerParameters => 58 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSetSchedulerParameters,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_set_scheduler_parameters_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* GetHostname => 59 */
|
||||
.fn = (dispatch_fn) remoteDispatchGetHostname,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_get_hostname_ret,
|
||||
},
|
||||
{ /* SupportsFeature => 60 */
|
||||
.fn = (dispatch_fn) remoteDispatchSupportsFeature,
|
||||
.args_filter = (xdrproc_t) xdr_remote_supports_feature_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_supports_feature_ret,
|
||||
},
|
||||
{ /* DomainMigratePrepare => 61 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainMigratePrepare,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_migrate_prepare_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_migrate_prepare_ret,
|
||||
},
|
||||
{ /* DomainMigratePerform => 62 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainMigratePerform,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_migrate_perform_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainMigrateFinish => 63 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainMigrateFinish,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_migrate_finish_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_migrate_finish_ret,
|
||||
},
|
||||
{ /* DomainBlockStats => 64 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainBlockStats,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_block_stats_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_block_stats_ret,
|
||||
},
|
||||
{ /* DomainInterfaceStats => 65 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainInterfaceStats,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_interface_stats_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_interface_stats_ret,
|
||||
},
|
||||
{ /* AuthList => 66 */
|
||||
.fn = (dispatch_fn) remoteDispatchAuthList,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_auth_list_ret,
|
||||
},
|
||||
{ /* AuthSaslInit => 67 */
|
||||
.fn = (dispatch_fn) remoteDispatchAuthSaslInit,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_auth_sasl_init_ret,
|
||||
},
|
||||
{ /* AuthSaslStart => 68 */
|
||||
.fn = (dispatch_fn) remoteDispatchAuthSaslStart,
|
||||
.args_filter = (xdrproc_t) xdr_remote_auth_sasl_start_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_auth_sasl_start_ret,
|
||||
},
|
||||
{ /* AuthSaslStep => 69 */
|
||||
.fn = (dispatch_fn) remoteDispatchAuthSaslStep,
|
||||
.args_filter = (xdrproc_t) xdr_remote_auth_sasl_step_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_auth_sasl_step_ret,
|
||||
},
|
||||
{ /* AuthPolkit => 70 */
|
||||
.fn = (dispatch_fn) remoteDispatchAuthPolkit,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_auth_polkit_ret,
|
||||
},
|
||||
{ /* NumOfStoragePools => 71 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfStoragePools,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_storage_pools_ret,
|
||||
},
|
||||
{ /* ListStoragePools => 72 */
|
||||
.fn = (dispatch_fn) remoteDispatchListStoragePools,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_storage_pools_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_storage_pools_ret,
|
||||
},
|
||||
{ /* NumOfDefinedStoragePools => 73 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfDefinedStoragePools,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_defined_storage_pools_ret,
|
||||
},
|
||||
{ /* ListDefinedStoragePools => 74 */
|
||||
.fn = (dispatch_fn) remoteDispatchListDefinedStoragePools,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_defined_storage_pools_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_defined_storage_pools_ret,
|
||||
},
|
||||
{ /* FindStoragePoolSources => 75 */
|
||||
.fn = (dispatch_fn) remoteDispatchFindStoragePoolSources,
|
||||
.args_filter = (xdrproc_t) xdr_remote_find_storage_pool_sources_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_find_storage_pool_sources_ret,
|
||||
},
|
||||
{ /* StoragePoolCreateXml => 76 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolCreateXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_create_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_create_xml_ret,
|
||||
},
|
||||
{ /* StoragePoolDefineXml => 77 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolDefineXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_define_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_define_xml_ret,
|
||||
},
|
||||
{ /* StoragePoolCreate => 78 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolCreate,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_create_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StoragePoolBuild => 79 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolBuild,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_build_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StoragePoolDestroy => 80 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolDestroy,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_destroy_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StoragePoolDelete => 81 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolDelete,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_delete_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StoragePoolUndefine => 82 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolUndefine,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_undefine_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StoragePoolRefresh => 83 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolRefresh,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_refresh_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StoragePoolLookupByName => 84 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolLookupByName,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_lookup_by_name_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_lookup_by_name_ret,
|
||||
},
|
||||
{ /* StoragePoolLookupByUuid => 85 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolLookupByUuid,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_lookup_by_uuid_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_lookup_by_uuid_ret,
|
||||
},
|
||||
{ /* StoragePoolLookupByVolume => 86 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolLookupByVolume,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_lookup_by_volume_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_lookup_by_volume_ret,
|
||||
},
|
||||
{ /* StoragePoolGetInfo => 87 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolGetInfo,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_get_info_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_get_info_ret,
|
||||
},
|
||||
{ /* StoragePoolDumpXml => 88 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolDumpXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_dump_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_dump_xml_ret,
|
||||
},
|
||||
{ /* StoragePoolGetAutostart => 89 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolGetAutostart,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_get_autostart_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_get_autostart_ret,
|
||||
},
|
||||
{ /* StoragePoolSetAutostart => 90 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolSetAutostart,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_set_autostart_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StoragePoolNumOfVolumes => 91 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolNumOfVolumes,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_num_of_volumes_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_num_of_volumes_ret,
|
||||
},
|
||||
{ /* StoragePoolListVolumes => 92 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolListVolumes,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_list_volumes_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_list_volumes_ret,
|
||||
},
|
||||
{ /* StorageVolCreateXml => 93 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolCreateXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_create_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_vol_create_xml_ret,
|
||||
},
|
||||
{ /* StorageVolDelete => 94 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolDelete,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_delete_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StorageVolLookupByName => 95 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolLookupByName,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_lookup_by_name_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_vol_lookup_by_name_ret,
|
||||
},
|
||||
{ /* StorageVolLookupByKey => 96 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolLookupByKey,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_lookup_by_key_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_vol_lookup_by_key_ret,
|
||||
},
|
||||
{ /* StorageVolLookupByPath => 97 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolLookupByPath,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_lookup_by_path_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_vol_lookup_by_path_ret,
|
||||
},
|
||||
{ /* StorageVolGetInfo => 98 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolGetInfo,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_get_info_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_vol_get_info_ret,
|
||||
},
|
||||
{ /* StorageVolDumpXml => 99 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolDumpXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_dump_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_vol_dump_xml_ret,
|
||||
},
|
||||
{ /* StorageVolGetPath => 100 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolGetPath,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_get_path_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_vol_get_path_ret,
|
||||
},
|
||||
{ /* NodeGetCellsFreeMemory => 101 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeGetCellsFreeMemory,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_get_cells_free_memory_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_get_cells_free_memory_ret,
|
||||
},
|
||||
{ /* NodeGetFreeMemory => 102 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeGetFreeMemory,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_get_free_memory_ret,
|
||||
},
|
||||
{ /* DomainBlockPeek => 103 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainBlockPeek,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_block_peek_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_block_peek_ret,
|
||||
},
|
||||
{ /* DomainMemoryPeek => 104 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainMemoryPeek,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_memory_peek_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_memory_peek_ret,
|
||||
},
|
||||
{ /* DomainEventsRegister => 105 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainEventsRegister,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_events_register_ret,
|
||||
},
|
||||
{ /* DomainEventsDeregister => 106 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainEventsDeregister,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_events_deregister_ret,
|
||||
},
|
||||
{ /* Async event DomainEventLifecycle => 107 */
|
||||
.fn = NULL,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainMigratePrepare2 => 108 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainMigratePrepare2,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_migrate_prepare2_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_migrate_prepare2_ret,
|
||||
},
|
||||
{ /* DomainMigrateFinish2 => 109 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainMigrateFinish2,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_migrate_finish2_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_migrate_finish2_ret,
|
||||
},
|
||||
{ /* GetUri => 110 */
|
||||
.fn = (dispatch_fn) remoteDispatchGetUri,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_get_uri_ret,
|
||||
},
|
||||
{ /* NodeNumOfDevices => 111 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeNumOfDevices,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_num_of_devices_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_num_of_devices_ret,
|
||||
},
|
||||
{ /* NodeListDevices => 112 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeListDevices,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_list_devices_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_list_devices_ret,
|
||||
},
|
||||
{ /* NodeDeviceLookupByName => 113 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceLookupByName,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_lookup_by_name_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_device_lookup_by_name_ret,
|
||||
},
|
||||
{ /* NodeDeviceDumpXml => 114 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceDumpXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_dump_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_device_dump_xml_ret,
|
||||
},
|
||||
{ /* NodeDeviceGetParent => 115 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceGetParent,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_get_parent_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_device_get_parent_ret,
|
||||
},
|
||||
{ /* NodeDeviceNumOfCaps => 116 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceNumOfCaps,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_num_of_caps_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_device_num_of_caps_ret,
|
||||
},
|
||||
{ /* NodeDeviceListCaps => 117 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceListCaps,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_list_caps_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_device_list_caps_ret,
|
||||
},
|
||||
{ /* NodeDeviceDettach => 118 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceDettach,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_dettach_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* NodeDeviceReAttach => 119 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceReAttach,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_re_attach_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* NodeDeviceReset => 120 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceReset,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_reset_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainGetSecurityLabel => 121 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetSecurityLabel,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_security_label_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_security_label_ret,
|
||||
},
|
||||
{ /* NodeGetSecurityModel => 122 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeGetSecurityModel,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_get_security_model_ret,
|
||||
},
|
||||
{ /* NodeDeviceCreateXml => 123 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceCreateXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_create_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_node_device_create_xml_ret,
|
||||
},
|
||||
{ /* NodeDeviceDestroy => 124 */
|
||||
.fn = (dispatch_fn) remoteDispatchNodeDeviceDestroy,
|
||||
.args_filter = (xdrproc_t) xdr_remote_node_device_destroy_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StorageVolCreateXmlFrom => 125 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolCreateXmlFrom,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_create_xml_from_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_vol_create_xml_from_ret,
|
||||
},
|
||||
{ /* NumOfInterfaces => 126 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfInterfaces,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_interfaces_ret,
|
||||
},
|
||||
{ /* ListInterfaces => 127 */
|
||||
.fn = (dispatch_fn) remoteDispatchListInterfaces,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_interfaces_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_interfaces_ret,
|
||||
},
|
||||
{ /* InterfaceLookupByName => 128 */
|
||||
.fn = (dispatch_fn) remoteDispatchInterfaceLookupByName,
|
||||
.args_filter = (xdrproc_t) xdr_remote_interface_lookup_by_name_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_interface_lookup_by_name_ret,
|
||||
},
|
||||
{ /* InterfaceLookupByMacString => 129 */
|
||||
.fn = (dispatch_fn) remoteDispatchInterfaceLookupByMacString,
|
||||
.args_filter = (xdrproc_t) xdr_remote_interface_lookup_by_mac_string_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_interface_lookup_by_mac_string_ret,
|
||||
},
|
||||
{ /* InterfaceGetXmlDesc => 130 */
|
||||
.fn = (dispatch_fn) remoteDispatchInterfaceGetXmlDesc,
|
||||
.args_filter = (xdrproc_t) xdr_remote_interface_get_xml_desc_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_interface_get_xml_desc_ret,
|
||||
},
|
||||
{ /* InterfaceDefineXml => 131 */
|
||||
.fn = (dispatch_fn) remoteDispatchInterfaceDefineXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_interface_define_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_interface_define_xml_ret,
|
||||
},
|
||||
{ /* InterfaceUndefine => 132 */
|
||||
.fn = (dispatch_fn) remoteDispatchInterfaceUndefine,
|
||||
.args_filter = (xdrproc_t) xdr_remote_interface_undefine_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* InterfaceCreate => 133 */
|
||||
.fn = (dispatch_fn) remoteDispatchInterfaceCreate,
|
||||
.args_filter = (xdrproc_t) xdr_remote_interface_create_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* InterfaceDestroy => 134 */
|
||||
.fn = (dispatch_fn) remoteDispatchInterfaceDestroy,
|
||||
.args_filter = (xdrproc_t) xdr_remote_interface_destroy_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainXmlFromNative => 135 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainXmlFromNative,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_xml_from_native_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_xml_from_native_ret,
|
||||
},
|
||||
{ /* DomainXmlToNative => 136 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainXmlToNative,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_xml_to_native_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_xml_to_native_ret,
|
||||
},
|
||||
{ /* NumOfDefinedInterfaces => 137 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfDefinedInterfaces,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_defined_interfaces_ret,
|
||||
},
|
||||
{ /* ListDefinedInterfaces => 138 */
|
||||
.fn = (dispatch_fn) remoteDispatchListDefinedInterfaces,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_defined_interfaces_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_defined_interfaces_ret,
|
||||
},
|
||||
{ /* NumOfSecrets => 139 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfSecrets,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_secrets_ret,
|
||||
},
|
||||
{ /* ListSecrets => 140 */
|
||||
.fn = (dispatch_fn) remoteDispatchListSecrets,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_secrets_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_secrets_ret,
|
||||
},
|
||||
{ /* SecretLookupByUuid => 141 */
|
||||
.fn = (dispatch_fn) remoteDispatchSecretLookupByUuid,
|
||||
.args_filter = (xdrproc_t) xdr_remote_secret_lookup_by_uuid_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_secret_lookup_by_uuid_ret,
|
||||
},
|
||||
{ /* SecretDefineXml => 142 */
|
||||
.fn = (dispatch_fn) remoteDispatchSecretDefineXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_secret_define_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_secret_define_xml_ret,
|
||||
},
|
||||
{ /* SecretGetXmlDesc => 143 */
|
||||
.fn = (dispatch_fn) remoteDispatchSecretGetXmlDesc,
|
||||
.args_filter = (xdrproc_t) xdr_remote_secret_get_xml_desc_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_secret_get_xml_desc_ret,
|
||||
},
|
||||
{ /* SecretSetValue => 144 */
|
||||
.fn = (dispatch_fn) remoteDispatchSecretSetValue,
|
||||
.args_filter = (xdrproc_t) xdr_remote_secret_set_value_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* SecretGetValue => 145 */
|
||||
.fn = (dispatch_fn) remoteDispatchSecretGetValue,
|
||||
.args_filter = (xdrproc_t) xdr_remote_secret_get_value_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_secret_get_value_ret,
|
||||
},
|
||||
{ /* SecretUndefine => 146 */
|
||||
.fn = (dispatch_fn) remoteDispatchSecretUndefine,
|
||||
.args_filter = (xdrproc_t) xdr_remote_secret_undefine_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* SecretLookupByUsage => 147 */
|
||||
.fn = (dispatch_fn) remoteDispatchSecretLookupByUsage,
|
||||
.args_filter = (xdrproc_t) xdr_remote_secret_lookup_by_usage_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_secret_lookup_by_usage_ret,
|
||||
},
|
||||
{ /* DomainMigratePrepareTunnel => 148 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainMigratePrepareTunnel,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_migrate_prepare_tunnel_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* IsSecure => 149 */
|
||||
.fn = (dispatch_fn) remoteDispatchIsSecure,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_is_secure_ret,
|
||||
},
|
||||
{ /* DomainIsActive => 150 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainIsActive,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_is_active_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_is_active_ret,
|
||||
},
|
||||
{ /* DomainIsPersistent => 151 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainIsPersistent,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_is_persistent_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_is_persistent_ret,
|
||||
},
|
||||
{ /* NetworkIsActive => 152 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkIsActive,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_is_active_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_network_is_active_ret,
|
||||
},
|
||||
{ /* NetworkIsPersistent => 153 */
|
||||
.fn = (dispatch_fn) remoteDispatchNetworkIsPersistent,
|
||||
.args_filter = (xdrproc_t) xdr_remote_network_is_persistent_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_network_is_persistent_ret,
|
||||
},
|
||||
{ /* StoragePoolIsActive => 154 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolIsActive,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_is_active_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_is_active_ret,
|
||||
},
|
||||
{ /* StoragePoolIsPersistent => 155 */
|
||||
.fn = (dispatch_fn) remoteDispatchStoragePoolIsPersistent,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_pool_is_persistent_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_storage_pool_is_persistent_ret,
|
||||
},
|
||||
{ /* InterfaceIsActive => 156 */
|
||||
.fn = (dispatch_fn) remoteDispatchInterfaceIsActive,
|
||||
.args_filter = (xdrproc_t) xdr_remote_interface_is_active_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_interface_is_active_ret,
|
||||
},
|
||||
{ /* GetLibVersion => 157 */
|
||||
.fn = (dispatch_fn) remoteDispatchGetLibVersion,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_get_lib_version_ret,
|
||||
},
|
||||
{ /* CpuCompare => 158 */
|
||||
.fn = (dispatch_fn) remoteDispatchCpuCompare,
|
||||
.args_filter = (xdrproc_t) xdr_remote_cpu_compare_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_cpu_compare_ret,
|
||||
},
|
||||
{ /* DomainMemoryStats => 159 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainMemoryStats,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_memory_stats_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_memory_stats_ret,
|
||||
},
|
||||
{ /* DomainAttachDeviceFlags => 160 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainAttachDeviceFlags,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_attach_device_flags_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainDetachDeviceFlags => 161 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainDetachDeviceFlags,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_detach_device_flags_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* CpuBaseline => 162 */
|
||||
.fn = (dispatch_fn) remoteDispatchCpuBaseline,
|
||||
.args_filter = (xdrproc_t) xdr_remote_cpu_baseline_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_cpu_baseline_ret,
|
||||
},
|
||||
{ /* DomainGetJobInfo => 163 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetJobInfo,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_job_info_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_job_info_ret,
|
||||
},
|
||||
{ /* DomainAbortJob => 164 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainAbortJob,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_abort_job_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* StorageVolWipe => 165 */
|
||||
.fn = (dispatch_fn) remoteDispatchStorageVolWipe,
|
||||
.args_filter = (xdrproc_t) xdr_remote_storage_vol_wipe_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainMigrateSetMaxDowntime => 166 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainMigrateSetMaxDowntime,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_migrate_set_max_downtime_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainEventsRegisterAny => 167 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainEventsRegisterAny,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_events_register_any_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainEventsDeregisterAny => 168 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainEventsDeregisterAny,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_events_deregister_any_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* Async event DomainEventReboot => 169 */
|
||||
.fn = NULL,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* Async event DomainEventRtcChange => 170 */
|
||||
.fn = NULL,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* Async event DomainEventWatchdog => 171 */
|
||||
.fn = NULL,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* Async event DomainEventIoError => 172 */
|
||||
.fn = NULL,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* Async event DomainEventGraphics => 173 */
|
||||
.fn = NULL,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainUpdateDeviceFlags => 174 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainUpdateDeviceFlags,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_update_device_flags_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* NwfilterLookupByName => 175 */
|
||||
.fn = (dispatch_fn) remoteDispatchNwfilterLookupByName,
|
||||
.args_filter = (xdrproc_t) xdr_remote_nwfilter_lookup_by_name_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_nwfilter_lookup_by_name_ret,
|
||||
},
|
||||
{ /* NwfilterLookupByUuid => 176 */
|
||||
.fn = (dispatch_fn) remoteDispatchNwfilterLookupByUuid,
|
||||
.args_filter = (xdrproc_t) xdr_remote_nwfilter_lookup_by_uuid_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_nwfilter_lookup_by_uuid_ret,
|
||||
},
|
||||
{ /* NwfilterGetXmlDesc => 177 */
|
||||
.fn = (dispatch_fn) remoteDispatchNwfilterGetXmlDesc,
|
||||
.args_filter = (xdrproc_t) xdr_remote_nwfilter_get_xml_desc_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_nwfilter_get_xml_desc_ret,
|
||||
},
|
||||
{ /* NumOfNwfilters => 178 */
|
||||
.fn = (dispatch_fn) remoteDispatchNumOfNwfilters,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_num_of_nwfilters_ret,
|
||||
},
|
||||
{ /* ListNwfilters => 179 */
|
||||
.fn = (dispatch_fn) remoteDispatchListNwfilters,
|
||||
.args_filter = (xdrproc_t) xdr_remote_list_nwfilters_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_list_nwfilters_ret,
|
||||
},
|
||||
{ /* NwfilterDefineXml => 180 */
|
||||
.fn = (dispatch_fn) remoteDispatchNwfilterDefineXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_nwfilter_define_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_nwfilter_define_xml_ret,
|
||||
},
|
||||
{ /* NwfilterUndefine => 181 */
|
||||
.fn = (dispatch_fn) remoteDispatchNwfilterUndefine,
|
||||
.args_filter = (xdrproc_t) xdr_remote_nwfilter_undefine_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainManagedSave => 182 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainManagedSave,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_managed_save_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainHasManagedSaveImage => 183 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainHasManagedSaveImage,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_has_managed_save_image_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_has_managed_save_image_ret,
|
||||
},
|
||||
{ /* DomainManagedSaveRemove => 184 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainManagedSaveRemove,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_managed_save_remove_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainSnapshotCreateXml => 185 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSnapshotCreateXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_snapshot_create_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_snapshot_create_xml_ret,
|
||||
},
|
||||
{ /* DomainSnapshotDumpXml => 186 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSnapshotDumpXml,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_snapshot_dump_xml_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_snapshot_dump_xml_ret,
|
||||
},
|
||||
{ /* DomainSnapshotNum => 187 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSnapshotNum,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_snapshot_num_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_snapshot_num_ret,
|
||||
},
|
||||
{ /* DomainSnapshotListNames => 188 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSnapshotListNames,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_snapshot_list_names_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_snapshot_list_names_ret,
|
||||
},
|
||||
{ /* DomainSnapshotLookupByName => 189 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSnapshotLookupByName,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_snapshot_lookup_by_name_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_snapshot_lookup_by_name_ret,
|
||||
},
|
||||
{ /* DomainHasCurrentSnapshot => 190 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainHasCurrentSnapshot,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_has_current_snapshot_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_has_current_snapshot_ret,
|
||||
},
|
||||
{ /* DomainSnapshotCurrent => 191 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSnapshotCurrent,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_snapshot_current_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_snapshot_current_ret,
|
||||
},
|
||||
{ /* DomainRevertToSnapshot => 192 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainRevertToSnapshot,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_revert_to_snapshot_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainSnapshotDelete => 193 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainSnapshotDelete,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_snapshot_delete_args,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainGetBlockInfo => 194 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainGetBlockInfo,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_block_info_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_block_info_ret,
|
||||
},
|
||||
{ /* Async event DomainEventIoErrorReason => 195 */
|
||||
.fn = NULL,
|
||||
.args_filter = (xdrproc_t) xdr_void,
|
||||
.ret_filter = (xdrproc_t) xdr_void,
|
||||
},
|
||||
{ /* DomainCreateWithFlags => 196 */
|
||||
.fn = (dispatch_fn) remoteDispatchDomainCreateWithFlags,
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_create_with_flags_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_create_with_flags_ret,
|
||||
},
|
||||
179
daemon/remote_generate_stubs.pl
Executable file
179
daemon/remote_generate_stubs.pl
Executable file
@ -0,0 +1,179 @@
|
||||
#!/usr/bin/perl -w
|
||||
#
|
||||
# This script parses remote_protocol.x and produces lots of boilerplate
|
||||
# code for both ends of the remote connection.
|
||||
#
|
||||
# By Richard Jones <rjones@redhat.com>
|
||||
|
||||
use strict;
|
||||
|
||||
use Getopt::Std;
|
||||
|
||||
# Command line options.
|
||||
our ($opt_p, $opt_t, $opt_a, $opt_r, $opt_d);
|
||||
getopts ('ptard');
|
||||
|
||||
# Convert name_of_call to NameOfCall.
|
||||
sub name_to_ProcName {
|
||||
my $name = shift;
|
||||
my @elems = split /_/, $name;
|
||||
@elems = map ucfirst, @elems;
|
||||
join "", @elems
|
||||
}
|
||||
|
||||
# Read the input file (usually remote_protocol.x) and form an
|
||||
# opinion about the name, args and return type of each RPC.
|
||||
my ($name, $ProcName, $id, %calls, @calls);
|
||||
|
||||
# REMOTE_PROC_CLOSE has no args or ret.
|
||||
$calls{close} = {
|
||||
name => "close",
|
||||
ProcName => "Close",
|
||||
UC_NAME => "CLOSE",
|
||||
args => "void",
|
||||
ret => "void",
|
||||
};
|
||||
|
||||
while (<>) {
|
||||
if (/^struct remote_(.*)_args/) {
|
||||
$name = $1;
|
||||
$ProcName = name_to_ProcName ($name);
|
||||
|
||||
die "duplicate definition of remote_${name}_args"
|
||||
if exists $calls{$name};
|
||||
|
||||
$calls{$name} = {
|
||||
name => $name,
|
||||
ProcName => $ProcName,
|
||||
UC_NAME => uc $name,
|
||||
args => "remote_${name}_args",
|
||||
ret => "void",
|
||||
};
|
||||
|
||||
} elsif (/^struct remote_(.*)_ret/) {
|
||||
$name = $1;
|
||||
$ProcName = name_to_ProcName ($name);
|
||||
|
||||
if (exists $calls{$name}) {
|
||||
$calls{$name}->{ret} = "remote_${name}_ret";
|
||||
} else {
|
||||
$calls{$name} = {
|
||||
name => $name,
|
||||
ProcName => $ProcName,
|
||||
UC_NAME => uc $name,
|
||||
args => "void",
|
||||
ret => "remote_${name}_ret"
|
||||
}
|
||||
}
|
||||
} elsif (/^struct remote_(.*)_msg/) {
|
||||
$name = $1;
|
||||
$ProcName = name_to_ProcName ($name);
|
||||
|
||||
$calls{$name} = {
|
||||
name => $name,
|
||||
ProcName => $ProcName,
|
||||
UC_NAME => uc $name,
|
||||
msg => "remote_${name}_msg"
|
||||
}
|
||||
} elsif (/^\s*REMOTE_PROC_(.*?)\s+=\s+(\d+),?$/) {
|
||||
$name = lc $1;
|
||||
$id = $2;
|
||||
$ProcName = name_to_ProcName ($name);
|
||||
|
||||
$calls[$id] = $calls{$name};
|
||||
}
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Output
|
||||
|
||||
print <<__EOF__;
|
||||
/* Automatically generated by remote_generate_stubs.pl.
|
||||
* Do not edit this file. Any changes you make will be lost.
|
||||
*/
|
||||
|
||||
__EOF__
|
||||
|
||||
# Debugging.
|
||||
if ($opt_d) {
|
||||
my @keys = sort (keys %calls);
|
||||
foreach (@keys) {
|
||||
print "$_:\n";
|
||||
print " name $calls{$_}->{name} ($calls{$_}->{ProcName})\n";
|
||||
print " $calls{$_}->{args} -> $calls{$_}->{ret}\n";
|
||||
}
|
||||
}
|
||||
|
||||
# Prototypes for dispatch functions ("remote_dispatch_prototypes.h").
|
||||
elsif ($opt_p) {
|
||||
my @keys = sort (keys %calls);
|
||||
foreach (@keys) {
|
||||
# Skip things which are REMOTE_MESSAGE
|
||||
next if $calls{$_}->{msg};
|
||||
|
||||
print "static int remoteDispatch$calls{$_}->{ProcName}(\n";
|
||||
print " struct qemud_server *server,\n";
|
||||
print " struct qemud_client *client,\n";
|
||||
print " virConnectPtr conn,\n";
|
||||
print " remote_message_header *hdr,\n";
|
||||
print " remote_error *err,\n";
|
||||
print " $calls{$_}->{args} *args,\n";
|
||||
print " $calls{$_}->{ret} *ret);\n";
|
||||
}
|
||||
}
|
||||
|
||||
# Union of all arg types
|
||||
# ("remote_dispatch_args.h").
|
||||
elsif ($opt_a) {
|
||||
for ($id = 0 ; $id <= $#calls ; $id++) {
|
||||
if (defined $calls[$id] &&
|
||||
!$calls[$id]->{msg} &&
|
||||
$calls[$id]->{args} ne "void") {
|
||||
print " $calls[$id]->{args} val_$calls[$id]->{args};\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Union of all arg types
|
||||
# ("remote_dispatch_ret.h").
|
||||
elsif ($opt_r) {
|
||||
for ($id = 0 ; $id <= $#calls ; $id++) {
|
||||
if (defined $calls[$id] &&
|
||||
!$calls[$id]->{msg} &&
|
||||
$calls[$id]->{ret} ne "void") {
|
||||
print " $calls[$id]->{ret} val_$calls[$id]->{ret};\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Inside the switch statement, prepare the 'fn', 'args_filter', etc
|
||||
# ("remote_dispatch_table.h").
|
||||
elsif ($opt_t) {
|
||||
for ($id = 0 ; $id <= $#calls ; $id++) {
|
||||
if (defined $calls[$id] && !$calls[$id]->{msg}) {
|
||||
print "{ /* $calls[$id]->{ProcName} => $id */\n";
|
||||
print " .fn = (dispatch_fn) remoteDispatch$calls[$id]->{ProcName},\n";
|
||||
if ($calls[$id]->{args} ne "void") {
|
||||
print " .args_filter = (xdrproc_t) xdr_$calls[$id]->{args},\n";
|
||||
} else {
|
||||
print " .args_filter = (xdrproc_t) xdr_void,\n";
|
||||
}
|
||||
if ($calls[$id]->{ret} ne "void") {
|
||||
print " .ret_filter = (xdrproc_t) xdr_$calls[$id]->{ret},\n";
|
||||
} else {
|
||||
print " .ret_filter = (xdrproc_t) xdr_void,\n";
|
||||
}
|
||||
print "},\n";
|
||||
} else {
|
||||
if ($calls[$id]->{msg}) {
|
||||
print "{ /* Async event $calls[$id]->{ProcName} => $id */\n";
|
||||
} else {
|
||||
print "{ /* (unused) => $id */\n";
|
||||
}
|
||||
print " .fn = NULL,\n";
|
||||
print " .args_filter = (xdrproc_t) xdr_void,\n";
|
||||
print " .ret_filter = (xdrproc_t) xdr_void,\n";
|
||||
print "},\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
607
daemon/stream.c
Normal file
607
daemon/stream.c
Normal file
@ -0,0 +1,607 @@
|
||||
/*
|
||||
* stream.c: APIs for managing client streams
|
||||
*
|
||||
* Copyright (C) 2009 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "stream.h"
|
||||
#include "memory.h"
|
||||
#include "dispatch.h"
|
||||
#include "logging.h"
|
||||
|
||||
static int
|
||||
remoteStreamHandleWrite(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream);
|
||||
static int
|
||||
remoteStreamHandleRead(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream);
|
||||
static int
|
||||
remoteStreamHandleFinish(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream,
|
||||
struct qemud_client_message *msg);
|
||||
static int
|
||||
remoteStreamHandleAbort(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream,
|
||||
struct qemud_client_message *msg);
|
||||
|
||||
|
||||
|
||||
static void
|
||||
remoteStreamUpdateEvents(struct qemud_client_stream *stream)
|
||||
{
|
||||
int newEvents = 0;
|
||||
if (stream->rx)
|
||||
newEvents |= VIR_STREAM_EVENT_WRITABLE;
|
||||
if (stream->tx && !stream->recvEOF)
|
||||
newEvents |= VIR_STREAM_EVENT_READABLE;
|
||||
|
||||
virStreamEventUpdateCallback(stream->st, newEvents);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Callback that gets invoked when a stream becomes writable/readable
|
||||
*/
|
||||
static void
|
||||
remoteStreamEvent(virStreamPtr st, int events, void *opaque)
|
||||
{
|
||||
struct qemud_client *client = opaque;
|
||||
struct qemud_client_stream *stream;
|
||||
|
||||
/* XXX sub-optimal - we really should be taking the server lock
|
||||
* first, but we have no handle to the server object
|
||||
* We're lucky to get away with it for now, due to this callback
|
||||
* executing in the main thread, but this should really be fixed
|
||||
*/
|
||||
virMutexLock(&client->lock);
|
||||
|
||||
stream = remoteFindClientStream(client, st);
|
||||
|
||||
if (!stream) {
|
||||
VIR_WARN("event for client=%p stream st=%p, but missing stream state", client, st);
|
||||
virStreamEventRemoveCallback(st);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
DEBUG("st=%p events=%d", st, events);
|
||||
|
||||
if (events & VIR_STREAM_EVENT_WRITABLE) {
|
||||
if (remoteStreamHandleWrite(client, stream) < 0) {
|
||||
remoteRemoveClientStream(client, stream);
|
||||
qemudDispatchClientFailure(client);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
if (!stream->recvEOF &&
|
||||
(events & (VIR_STREAM_EVENT_READABLE | VIR_STREAM_EVENT_HANGUP))) {
|
||||
events = events & ~(VIR_STREAM_EVENT_READABLE | VIR_STREAM_EVENT_HANGUP);
|
||||
if (remoteStreamHandleRead(client, stream) < 0) {
|
||||
remoteRemoveClientStream(client, stream);
|
||||
qemudDispatchClientFailure(client);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
if (!stream->closed &&
|
||||
(events & (VIR_STREAM_EVENT_ERROR | VIR_STREAM_EVENT_HANGUP))) {
|
||||
int ret;
|
||||
remote_error rerr;
|
||||
memset(&rerr, 0, sizeof rerr);
|
||||
stream->closed = 1;
|
||||
virStreamAbort(stream->st);
|
||||
if (events & VIR_STREAM_EVENT_HANGUP)
|
||||
remoteDispatchFormatError(&rerr, "%s", _("stream had unexpected termination"));
|
||||
else
|
||||
remoteDispatchFormatError(&rerr, "%s", _("stream had I/O failure"));
|
||||
ret = remoteSerializeStreamError(client, &rerr, stream->procedure, stream->serial);
|
||||
remoteRemoveClientStream(client, stream);
|
||||
if (ret < 0)
|
||||
qemudDispatchClientFailure(client);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (stream->closed) {
|
||||
remoteRemoveClientStream(client, stream);
|
||||
} else {
|
||||
remoteStreamUpdateEvents(stream);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
virMutexUnlock(&client->lock);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @client: a locked client object
|
||||
*
|
||||
* Invoked by the main loop when filtering incoming messages.
|
||||
*
|
||||
* Returns 1 if the message was processed, 0 if skipped,
|
||||
* -1 on fatal client error
|
||||
*/
|
||||
static int
|
||||
remoteStreamFilter(struct qemud_client *client,
|
||||
struct qemud_client_message *msg, void *opaque)
|
||||
{
|
||||
struct qemud_client_stream *stream = opaque;
|
||||
|
||||
if (msg->hdr.serial == stream->serial &&
|
||||
msg->hdr.proc == stream->procedure &&
|
||||
msg->hdr.type == REMOTE_STREAM) {
|
||||
DEBUG("Incoming rx=%p serial=%d proc=%d status=%d",
|
||||
stream->rx, msg->hdr.proc, msg->hdr.serial, msg->hdr.status);
|
||||
|
||||
/* If there are queued packets, we need to queue all further
|
||||
* messages, since they must be processed strictly in order.
|
||||
* If there are no queued packets, then OK/ERROR messages
|
||||
* should be processed immediately. Data packets are still
|
||||
* queued to only be processed when the stream is marked as
|
||||
* writable.
|
||||
*/
|
||||
if (stream->rx) {
|
||||
qemudClientMessageQueuePush(&stream->rx, msg);
|
||||
remoteStreamUpdateEvents(stream);
|
||||
} else {
|
||||
int ret = 0;
|
||||
switch (msg->hdr.status) {
|
||||
case REMOTE_OK:
|
||||
ret = remoteStreamHandleFinish(client, stream, msg);
|
||||
if (ret == 0)
|
||||
qemudClientMessageRelease(client, msg);
|
||||
break;
|
||||
|
||||
case REMOTE_CONTINUE:
|
||||
qemudClientMessageQueuePush(&stream->rx, msg);
|
||||
remoteStreamUpdateEvents(stream);
|
||||
break;
|
||||
|
||||
case REMOTE_ERROR:
|
||||
default:
|
||||
ret = remoteStreamHandleAbort(client, stream, msg);
|
||||
if (ret == 0)
|
||||
qemudClientMessageRelease(client, msg);
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret < 0)
|
||||
return -1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @conn: a connection object to associate the stream with
|
||||
* @hdr: the method call to associate with the stram
|
||||
*
|
||||
* Creates a new stream for this conn
|
||||
*
|
||||
* Returns a new stream object, or NULL upon OOM
|
||||
*/
|
||||
struct qemud_client_stream *
|
||||
remoteCreateClientStream(virConnectPtr conn,
|
||||
remote_message_header *hdr)
|
||||
{
|
||||
struct qemud_client_stream *stream;
|
||||
|
||||
DEBUG("proc=%d serial=%d", hdr->proc, hdr->serial);
|
||||
|
||||
if (VIR_ALLOC(stream) < 0)
|
||||
return NULL;
|
||||
|
||||
stream->procedure = hdr->proc;
|
||||
stream->serial = hdr->serial;
|
||||
|
||||
stream->st = virStreamNew(conn, VIR_STREAM_NONBLOCK);
|
||||
if (!stream->st) {
|
||||
VIR_FREE(stream);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
stream->filter.query = remoteStreamFilter;
|
||||
stream->filter.opaque = stream;
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
/*
|
||||
* @stream: an unused client stream
|
||||
*
|
||||
* Frees the memory associated with this inactive client
|
||||
* stream
|
||||
*/
|
||||
void remoteFreeClientStream(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream)
|
||||
{
|
||||
struct qemud_client_message *msg;
|
||||
|
||||
if (!stream)
|
||||
return;
|
||||
|
||||
DEBUG("proc=%d serial=%d", stream->procedure, stream->serial);
|
||||
|
||||
msg = stream->rx;
|
||||
while (msg) {
|
||||
struct qemud_client_message *tmp = msg->next;
|
||||
qemudClientMessageRelease(client, msg);
|
||||
msg = tmp;
|
||||
}
|
||||
|
||||
virStreamFree(stream->st);
|
||||
VIR_FREE(stream);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @client: a locked client to add the stream to
|
||||
* @stream: a stream to add
|
||||
*/
|
||||
int remoteAddClientStream(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream,
|
||||
int transmit)
|
||||
{
|
||||
struct qemud_client_stream *tmp = client->streams;
|
||||
|
||||
DEBUG("client=%p proc=%d serial=%d", client, stream->procedure, stream->serial);
|
||||
|
||||
if (virStreamEventAddCallback(stream->st, 0,
|
||||
remoteStreamEvent, client, NULL) < 0)
|
||||
return -1;
|
||||
|
||||
if (tmp) {
|
||||
while (tmp->next)
|
||||
tmp = tmp->next;
|
||||
tmp->next = stream;
|
||||
} else {
|
||||
client->streams = stream;
|
||||
}
|
||||
|
||||
stream->filter.next = client->filters;
|
||||
client->filters = &stream->filter;
|
||||
|
||||
if (transmit)
|
||||
stream->tx = 1;
|
||||
|
||||
remoteStreamUpdateEvents(stream);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @client: a locked client object
|
||||
* @procedure: procedure associated with the stream
|
||||
* @serial: serial number associated with the stream
|
||||
*
|
||||
* Finds a existing active stream
|
||||
*
|
||||
* Returns a stream object matching the procedure+serial number, or NULL
|
||||
*/
|
||||
struct qemud_client_stream *
|
||||
remoteFindClientStream(struct qemud_client *client,
|
||||
virStreamPtr st)
|
||||
{
|
||||
struct qemud_client_stream *stream = client->streams;
|
||||
|
||||
while (stream) {
|
||||
if (stream->st == st)
|
||||
return stream;
|
||||
stream = stream->next;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @client: a locked client object
|
||||
* @stream: an inactive, closed stream object
|
||||
*
|
||||
* Removes a stream from the list of active streams for the client
|
||||
*
|
||||
* Returns 0 if the stream was removd, -1 if it doesn't exist
|
||||
*/
|
||||
int
|
||||
remoteRemoveClientStream(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream)
|
||||
{
|
||||
DEBUG("client=%p proc=%d serial=%d", client, stream->procedure, stream->serial);
|
||||
|
||||
struct qemud_client_stream *curr = client->streams;
|
||||
struct qemud_client_stream *prev = NULL;
|
||||
struct qemud_client_filter *filter = NULL;
|
||||
|
||||
if (client->filters == &stream->filter) {
|
||||
client->filters = client->filters->next;
|
||||
} else {
|
||||
filter = client->filters;
|
||||
while (filter) {
|
||||
if (filter->next == &stream->filter) {
|
||||
filter->next = filter->next->next;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!stream->closed)
|
||||
virStreamAbort(stream->st);
|
||||
|
||||
while (curr) {
|
||||
if (curr == stream) {
|
||||
if (prev)
|
||||
prev->next = curr->next;
|
||||
else
|
||||
client->streams = curr->next;
|
||||
remoteFreeClientStream(client, stream);
|
||||
return 0;
|
||||
}
|
||||
prev = curr;
|
||||
curr = curr->next;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Returns:
|
||||
* -1 if fatal error occurred
|
||||
* 0 if message was fully processed
|
||||
* 1 if message is still being processed
|
||||
*/
|
||||
static int
|
||||
remoteStreamHandleWriteData(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream,
|
||||
struct qemud_client_message *msg)
|
||||
{
|
||||
remote_error rerr;
|
||||
int ret;
|
||||
|
||||
DEBUG("stream=%p proc=%d serial=%d len=%d offset=%d",
|
||||
stream, msg->hdr.proc, msg->hdr.serial, msg->bufferLength, msg->bufferOffset);
|
||||
|
||||
memset(&rerr, 0, sizeof rerr);
|
||||
|
||||
ret = virStreamSend(stream->st,
|
||||
msg->buffer + msg->bufferOffset,
|
||||
msg->bufferLength - msg->bufferOffset);
|
||||
|
||||
if (ret > 0) {
|
||||
msg->bufferOffset += ret;
|
||||
|
||||
/* Partial write, so indicate we have more todo later */
|
||||
if (msg->bufferOffset < msg->bufferLength)
|
||||
return 1;
|
||||
} else if (ret == -2) {
|
||||
/* Blocking, so indicate we have more todo later */
|
||||
return 1;
|
||||
} else {
|
||||
VIR_INFO0("Stream send failed");
|
||||
stream->closed = 1;
|
||||
remoteDispatchConnError(&rerr, client->conn);
|
||||
return remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Process an finish handshake from the client.
|
||||
*
|
||||
* Returns a REMOTE_OK confirmation if successful, or a REMOTE_ERROR
|
||||
* if there was a stream error
|
||||
*
|
||||
* Returns 0 if successfully sent RPC reply, -1 upon fatal error
|
||||
*/
|
||||
static int
|
||||
remoteStreamHandleFinish(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream,
|
||||
struct qemud_client_message *msg)
|
||||
{
|
||||
remote_error rerr;
|
||||
int ret;
|
||||
|
||||
DEBUG("stream=%p proc=%d serial=%d",
|
||||
stream, msg->hdr.proc, msg->hdr.serial);
|
||||
|
||||
memset(&rerr, 0, sizeof rerr);
|
||||
|
||||
stream->closed = 1;
|
||||
ret = virStreamFinish(stream->st);
|
||||
|
||||
if (ret < 0) {
|
||||
remoteDispatchConnError(&rerr, client->conn);
|
||||
return remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
} else {
|
||||
/* Send zero-length confirm */
|
||||
if (remoteSendStreamData(client, stream, NULL, 0) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Process an abort request from the client.
|
||||
*
|
||||
* Returns 0 if successfully aborted, -1 upon error
|
||||
*/
|
||||
static int
|
||||
remoteStreamHandleAbort(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream,
|
||||
struct qemud_client_message *msg)
|
||||
{
|
||||
remote_error rerr;
|
||||
|
||||
DEBUG("stream=%p proc=%d serial=%d",
|
||||
stream, msg->hdr.proc, msg->hdr.serial);
|
||||
|
||||
memset(&rerr, 0, sizeof rerr);
|
||||
|
||||
stream->closed = 1;
|
||||
virStreamAbort(stream->st);
|
||||
|
||||
if (msg->hdr.status == REMOTE_ERROR)
|
||||
remoteDispatchFormatError(&rerr, "%s", _("stream aborted at client request"));
|
||||
else {
|
||||
VIR_WARN("unexpected stream status %d", msg->hdr.status);
|
||||
remoteDispatchFormatError(&rerr, _("stream aborted with unexpected status %d"),
|
||||
msg->hdr.status);
|
||||
}
|
||||
|
||||
return remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Called when the stream is signalled has being able to accept
|
||||
* data writes. Will process all pending incoming messages
|
||||
* until they're all gone, or I/O blocks
|
||||
*
|
||||
* Returns 0 on success, or -1 upon fatal error
|
||||
*/
|
||||
static int
|
||||
remoteStreamHandleWrite(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream)
|
||||
{
|
||||
struct qemud_client_message *msg, *tmp;
|
||||
|
||||
DEBUG("stream=%p", stream);
|
||||
|
||||
msg = stream->rx;
|
||||
while (msg && !stream->closed) {
|
||||
int ret;
|
||||
switch (msg->hdr.status) {
|
||||
case REMOTE_OK:
|
||||
ret = remoteStreamHandleFinish(client, stream, msg);
|
||||
break;
|
||||
|
||||
case REMOTE_CONTINUE:
|
||||
ret = remoteStreamHandleWriteData(client, stream, msg);
|
||||
break;
|
||||
|
||||
case REMOTE_ERROR:
|
||||
default:
|
||||
ret = remoteStreamHandleAbort(client, stream, msg);
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret == 0)
|
||||
qemudClientMessageQueueServe(&stream->rx);
|
||||
else if (ret < 0)
|
||||
return -1;
|
||||
else
|
||||
break; /* still processing data */
|
||||
|
||||
tmp = msg->next;
|
||||
qemudClientMessageRelease(client, msg);
|
||||
msg = tmp;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Invoked when a stream is signalled as having data
|
||||
* available to read. This reads upto one message
|
||||
* worth of data, and then queues that for transmission
|
||||
* to the client.
|
||||
*
|
||||
* Returns 0 if data was queued for TX, or a error RPC
|
||||
* was sent, or -1 on fatal error, indicating client should
|
||||
* be killed
|
||||
*/
|
||||
static int
|
||||
remoteStreamHandleRead(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream)
|
||||
{
|
||||
char *buffer;
|
||||
size_t bufferLen = REMOTE_MESSAGE_PAYLOAD_MAX;
|
||||
int ret;
|
||||
|
||||
DEBUG("stream=%p", stream);
|
||||
|
||||
/* Shouldn't ever be called unless we're marked able to
|
||||
* transmit, but doesn't hurt to check */
|
||||
if (!stream->tx)
|
||||
return 0;
|
||||
|
||||
if (VIR_ALLOC_N(buffer, bufferLen) < 0)
|
||||
return -1;
|
||||
|
||||
ret = virStreamRecv(stream->st, buffer, bufferLen);
|
||||
if (ret == -2) {
|
||||
/* Should never get this, since we're only called when we know
|
||||
* we're readable, but hey things change... */
|
||||
ret = 0;
|
||||
} else if (ret < 0) {
|
||||
remote_error rerr;
|
||||
memset(&rerr, 0, sizeof rerr);
|
||||
remoteDispatchConnError(&rerr, NULL);
|
||||
|
||||
ret = remoteSerializeStreamError(client, &rerr, stream->procedure, stream->serial);
|
||||
} else {
|
||||
stream->tx = 0;
|
||||
if (ret == 0)
|
||||
stream->recvEOF = 1;
|
||||
ret = remoteSendStreamData(client, stream, buffer, ret);
|
||||
}
|
||||
|
||||
VIR_FREE(buffer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Invoked when an outgoing data packet message has been fully sent.
|
||||
* This simply re-enables TX of further data.
|
||||
*
|
||||
* The idea is to stop the daemon growing without bound due to
|
||||
* fast stream, but slow client
|
||||
*/
|
||||
void
|
||||
remoteStreamMessageFinished(struct qemud_client *client,
|
||||
struct qemud_client_message *msg)
|
||||
{
|
||||
struct qemud_client_stream *stream = client->streams;
|
||||
|
||||
while (stream) {
|
||||
if (msg->hdr.proc == stream->procedure &&
|
||||
msg->hdr.serial == stream->serial)
|
||||
break;
|
||||
stream = stream->next;
|
||||
}
|
||||
|
||||
DEBUG("Message client=%p stream=%p proc=%d serial=%d", client, stream, msg->hdr.proc, msg->hdr.serial);
|
||||
|
||||
if (stream) {
|
||||
stream->tx = 1;
|
||||
remoteStreamUpdateEvents(stream);
|
||||
}
|
||||
}
|
||||
54
daemon/stream.h
Normal file
54
daemon/stream.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* stream.h: APIs for managing client streams
|
||||
*
|
||||
* Copyright (C) 2009 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __LIBVIRTD_STREAM_H__
|
||||
# define __LIBVIRTD_STREAM_H__
|
||||
|
||||
# include "libvirtd.h"
|
||||
|
||||
|
||||
|
||||
struct qemud_client_stream *
|
||||
remoteCreateClientStream(virConnectPtr conn,
|
||||
remote_message_header *hdr);
|
||||
|
||||
void remoteFreeClientStream(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream);
|
||||
|
||||
int remoteAddClientStream(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream,
|
||||
int transmit);
|
||||
|
||||
struct qemud_client_stream *
|
||||
remoteFindClientStream(struct qemud_client *client,
|
||||
virStreamPtr stream);
|
||||
|
||||
int
|
||||
remoteRemoveClientStream(struct qemud_client *client,
|
||||
struct qemud_client_stream *stream);
|
||||
|
||||
void
|
||||
remoteStreamMessageFinished(struct qemud_client *client,
|
||||
struct qemud_client_message *msg);
|
||||
|
||||
#endif /* __LIBVIRTD_STREAM_H__ */
|
||||
545
daemon/test_libvirtd.aug
Normal file
545
daemon/test_libvirtd.aug
Normal file
@ -0,0 +1,545 @@
|
||||
module Test_libvirtd =
|
||||
let conf = "# Master libvirt daemon configuration file
|
||||
#
|
||||
# For further information consult http://libvirt.org/format.html
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# Network connectivity controls
|
||||
#
|
||||
|
||||
# Flag listening for secure TLS connections on the public TCP/IP port.
|
||||
# NB, must pass the --listen flag to the libvirtd process for this to
|
||||
# have any effect.
|
||||
#
|
||||
# It is necessary to setup a CA and issue server certificates before
|
||||
# using this capability.
|
||||
#
|
||||
# This is enabled by default, uncomment this to disable it
|
||||
listen_tls = 0
|
||||
|
||||
# Listen for unencrypted TCP connections on the public TCP/IP port.
|
||||
# NB, must pass the --listen flag to the libvirtd process for this to
|
||||
# have any effect.
|
||||
#
|
||||
# Using the TCP socket requires SASL authentication by default. Only
|
||||
# SASL mechanisms which support data encryption are allowed. This is
|
||||
# DIGEST_MD5 and GSSAPI (Kerberos5)
|
||||
#
|
||||
# This is disabled by default, uncomment this to enable it.
|
||||
listen_tcp = 1
|
||||
|
||||
|
||||
|
||||
# Override the port for accepting secure TLS connections
|
||||
# This can be a port number, or service name
|
||||
#
|
||||
tls_port = \"16514\"
|
||||
|
||||
# Override the port for accepting insecure TCP connections
|
||||
# This can be a port number, or service name
|
||||
#
|
||||
tcp_port = \"16509\"
|
||||
|
||||
|
||||
# Override the default configuration which binds to all network
|
||||
# interfaces. This can be a numeric IPv4/6 address, or hostname
|
||||
#
|
||||
listen_addr = \"192.168.0.1\"
|
||||
|
||||
|
||||
# Flag toggling mDNS advertizement of the libvirt service.
|
||||
#
|
||||
# Alternatively can disable for all services on a host by
|
||||
# stopping the Avahi daemon
|
||||
#
|
||||
# This is enabled by default, uncomment this to disable it
|
||||
mdns_adv = 0
|
||||
|
||||
# Override the default mDNS advertizement name. This must be
|
||||
# unique on the immediate broadcast network.
|
||||
#
|
||||
# The default is \"Virtualization Host HOSTNAME\", where HOSTNAME
|
||||
# is subsituted for the short hostname of the machine (without domain)
|
||||
#
|
||||
mdns_name = \"Virtualization Host Joe Demo\"
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# UNIX socket access controls
|
||||
#
|
||||
|
||||
# Set the UNIX domain socket group ownership. This can be used to
|
||||
# allow a 'trusted' set of users access to management capabilities
|
||||
# without becoming root.
|
||||
#
|
||||
# This is restricted to 'root' by default.
|
||||
unix_sock_group = \"libvirt\"
|
||||
|
||||
# Set the UNIX socket permissions for the R/O socket. This is used
|
||||
# for monitoring VM status only
|
||||
#
|
||||
# Default allows any user. If setting group ownership may want to
|
||||
# restrict this to:
|
||||
unix_sock_ro_perms = \"0777\"
|
||||
|
||||
# Set the UNIX socket permissions for the R/W socket. This is used
|
||||
# for full management of VMs
|
||||
#
|
||||
# Default allows only root. If PolicyKit is enabled on the socket,
|
||||
# the default will change to allow everyone (eg, 0777)
|
||||
#
|
||||
# If not using PolicyKit and setting group ownership for access
|
||||
# control then you may want to relax this to:
|
||||
unix_sock_rw_perms = \"0770\"
|
||||
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# Authentication.
|
||||
#
|
||||
# - none: do not perform auth checks. If you can connect to the
|
||||
# socket you are allowed. This is suitable if there are
|
||||
# restrictions on connecting to the socket (eg, UNIX
|
||||
# socket permissions), or if there is a lower layer in
|
||||
# the network providing auth (eg, TLS/x509 certificates)
|
||||
#
|
||||
# - sasl: use SASL infrastructure. The actual auth scheme is then
|
||||
# controlled from /etc/sasl2/libvirt.conf. For the TCP
|
||||
# socket only GSSAPI & DIGEST-MD5 mechanisms will be used.
|
||||
# For non-TCP or TLS sockets, any scheme is allowed.
|
||||
#
|
||||
# - polkit: use PolicyKit to authenticate. This is only suitable
|
||||
# for use on the UNIX sockets. The default policy will
|
||||
# require a user to supply their own password to gain
|
||||
# full read/write access (aka sudo like), while anyone
|
||||
# is allowed read/only access.
|
||||
#
|
||||
# Set an authentication scheme for UNIX read-only sockets
|
||||
# By default socket permissions allow anyone to connect
|
||||
#
|
||||
# To restrict monitoring of domains you may wish to enable
|
||||
# an authentication mechanism here
|
||||
auth_unix_ro = \"none\"
|
||||
|
||||
# Set an authentication scheme for UNIX read-write sockets
|
||||
# By default socket permissions only allow root. If PolicyKit
|
||||
# support was compiled into libvirt, the default will be to
|
||||
# use 'polkit' auth.
|
||||
#
|
||||
# If the unix_sock_rw_perms are changed you may wish to enable
|
||||
# an authentication mechanism here
|
||||
auth_unix_rw = \"none\"
|
||||
|
||||
# Change the authentication scheme for TCP sockets.
|
||||
#
|
||||
# If you don't enable SASL, then all TCP traffic is cleartext.
|
||||
# Don't do this outside of a dev/test scenario. For real world
|
||||
# use, always enable SASL and use the GSSAPI or DIGEST-MD5
|
||||
# mechanism in /etc/sasl2/libvirt.conf
|
||||
auth_tcp = \"sasl\"
|
||||
|
||||
# Change the authentication scheme for TLS sockets.
|
||||
#
|
||||
# TLS sockets already have encryption provided by the TLS
|
||||
# layer, and limited authentication is done by certificates
|
||||
#
|
||||
# It is possible to make use of any SASL authentication
|
||||
# mechanism as well, by using 'sasl' for this option
|
||||
auth_tls = \"none\"
|
||||
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# TLS x509 certificate configuration
|
||||
#
|
||||
|
||||
|
||||
# Override the default server key file path
|
||||
#
|
||||
key_file = \"/etc/pki/libvirt/private/serverkey.pem\"
|
||||
|
||||
# Override the default server certificate file path
|
||||
#
|
||||
cert_file = \"/etc/pki/libvirt/servercert.pem\"
|
||||
|
||||
# Override the default CA certificate path
|
||||
#
|
||||
ca_file = \"/etc/pki/CA/cacert.pem\"
|
||||
|
||||
# Specify a certificate revocation list.
|
||||
#
|
||||
# Defaults to not using a CRL, uncomment to enable it
|
||||
crl_file = \"/etc/pki/CA/crl.pem\"
|
||||
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# Authorization controls
|
||||
#
|
||||
|
||||
|
||||
# Flag to disable verification of client certificates
|
||||
#
|
||||
# Client certificate verification is the primary authentication mechanism.
|
||||
# Any client which does not present a certificate signed by the CA
|
||||
# will be rejected.
|
||||
#
|
||||
# Default is to always verify. Uncommenting this will disable
|
||||
# verification - make sure an IP whitelist is set
|
||||
tls_no_verify_certificate = 1
|
||||
|
||||
|
||||
# A whitelist of allowed x509 Distinguished Names
|
||||
# This list may contain wildcards such as
|
||||
#
|
||||
# \"C=GB,ST=London,L=London,O=Red Hat,CN=*\"
|
||||
#
|
||||
# See the POSIX fnmatch function for the format of the wildcards.
|
||||
#
|
||||
# NB If this is an empty list, no client can connect, so comment out
|
||||
# entirely rather than using empty list to disable these checks
|
||||
#
|
||||
# By default, no DN's are checked
|
||||
tls_allowed_dn_list = [\"DN1\", \"DN2\"]
|
||||
|
||||
|
||||
# A whitelist of allowed SASL usernames. The format for usernames
|
||||
# depends on the SASL authentication mechanism. Kerberos usernames
|
||||
# look like username@REALM
|
||||
#
|
||||
# This list may contain wildcards such as
|
||||
#
|
||||
# \"*@EXAMPLE.COM\"
|
||||
#
|
||||
# See the POSIX fnmatch function for the format of the wildcards.
|
||||
#
|
||||
# NB If this is an empty list, no client can connect, so comment out
|
||||
# entirely rather than using empty list to disable these checks
|
||||
#
|
||||
# By default, no Username's are checked
|
||||
sasl_allowed_username_list = [
|
||||
\"joe@EXAMPLE.COM\",
|
||||
\"fred@EXAMPLE.COM\"
|
||||
]
|
||||
|
||||
|
||||
#################################################################
|
||||
#
|
||||
# Processing controls
|
||||
#
|
||||
|
||||
# The maximum number of concurrent client connections to allow
|
||||
# over all sockets combined.
|
||||
max_clients = 20
|
||||
|
||||
|
||||
# The minimum limit sets the number of workers to start up
|
||||
# initially. If the number of active clients exceeds this,
|
||||
# then more threads are spawned, upto max_workers limit.
|
||||
# Typically you'd want max_workers to equal maximum number
|
||||
# of clients allowed
|
||||
min_workers = 5
|
||||
max_workers = 20
|
||||
|
||||
# Total global limit on concurrent RPC calls. Should be
|
||||
# at least as large as max_workers. Beyond this, RPC requests
|
||||
# will be read into memory and queued. This directly impact
|
||||
# memory usage, currently each request requires 256 KB of
|
||||
# memory. So by default upto 5 MB of memory is used
|
||||
max_requests = 20
|
||||
|
||||
# Limit on concurrent requests from a single client
|
||||
# connection. To avoid one client monopolizing the server
|
||||
# this should be a small fraction of the global max_requests
|
||||
# and max_workers parameter
|
||||
max_client_requests = 5
|
||||
|
||||
# Logging level:
|
||||
log_level = 4
|
||||
|
||||
# Logging outputs:
|
||||
log_outputs=\"4:stderr\"
|
||||
|
||||
# Logging filters:
|
||||
log_filters=\"a\"
|
||||
"
|
||||
|
||||
test Libvirtd.lns get conf =
|
||||
{ "#comment" = "Master libvirt daemon configuration file" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "For further information consult http://libvirt.org/format.html" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "################################################################" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Network connectivity controls" }
|
||||
{ "#comment" = "" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Flag listening for secure TLS connections on the public TCP/IP port." }
|
||||
{ "#comment" = "NB, must pass the --listen flag to the libvirtd process for this to" }
|
||||
{ "#comment" = "have any effect." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "It is necessary to setup a CA and issue server certificates before" }
|
||||
{ "#comment" = "using this capability." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "This is enabled by default, uncomment this to disable it" }
|
||||
{ "listen_tls" = "0" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Listen for unencrypted TCP connections on the public TCP/IP port." }
|
||||
{ "#comment" = "NB, must pass the --listen flag to the libvirtd process for this to" }
|
||||
{ "#comment" = "have any effect." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Using the TCP socket requires SASL authentication by default. Only" }
|
||||
{ "#comment" = "SASL mechanisms which support data encryption are allowed. This is" }
|
||||
{ "#comment" = "DIGEST_MD5 and GSSAPI (Kerberos5)" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "This is disabled by default, uncomment this to enable it." }
|
||||
{ "listen_tcp" = "1" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Override the port for accepting secure TLS connections" }
|
||||
{ "#comment" = "This can be a port number, or service name" }
|
||||
{ "#comment" = "" }
|
||||
{ "tls_port" = "16514" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Override the port for accepting insecure TCP connections" }
|
||||
{ "#comment" = "This can be a port number, or service name" }
|
||||
{ "#comment" = "" }
|
||||
{ "tcp_port" = "16509" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Override the default configuration which binds to all network" }
|
||||
{ "#comment" = "interfaces. This can be a numeric IPv4/6 address, or hostname" }
|
||||
{ "#comment" = "" }
|
||||
{ "listen_addr" = "192.168.0.1" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Flag toggling mDNS advertizement of the libvirt service." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Alternatively can disable for all services on a host by" }
|
||||
{ "#comment" = "stopping the Avahi daemon" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "This is enabled by default, uncomment this to disable it" }
|
||||
{ "mdns_adv" = "0" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Override the default mDNS advertizement name. This must be" }
|
||||
{ "#comment" = "unique on the immediate broadcast network." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "The default is \"Virtualization Host HOSTNAME\", where HOSTNAME" }
|
||||
{ "#comment" = "is subsituted for the short hostname of the machine (without domain)" }
|
||||
{ "#comment" = "" }
|
||||
{ "mdns_name" = "Virtualization Host Joe Demo" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "################################################################" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "UNIX socket access controls" }
|
||||
{ "#comment" = "" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Set the UNIX domain socket group ownership. This can be used to" }
|
||||
{ "#comment" = "allow a 'trusted' set of users access to management capabilities" }
|
||||
{ "#comment" = "without becoming root." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "This is restricted to 'root' by default." }
|
||||
{ "unix_sock_group" = "libvirt" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Set the UNIX socket permissions for the R/O socket. This is used" }
|
||||
{ "#comment" = "for monitoring VM status only" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Default allows any user. If setting group ownership may want to" }
|
||||
{ "#comment" = "restrict this to:" }
|
||||
{ "unix_sock_ro_perms" = "0777" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Set the UNIX socket permissions for the R/W socket. This is used" }
|
||||
{ "#comment" = "for full management of VMs" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Default allows only root. If PolicyKit is enabled on the socket," }
|
||||
{ "#comment" = "the default will change to allow everyone (eg, 0777)" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "If not using PolicyKit and setting group ownership for access" }
|
||||
{ "#comment" = "control then you may want to relax this to:" }
|
||||
{ "unix_sock_rw_perms" = "0770" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "################################################################" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Authentication." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "- none: do not perform auth checks. If you can connect to the" }
|
||||
{ "#comment" = "socket you are allowed. This is suitable if there are" }
|
||||
{ "#comment" = "restrictions on connecting to the socket (eg, UNIX" }
|
||||
{ "#comment" = "socket permissions), or if there is a lower layer in" }
|
||||
{ "#comment" = "the network providing auth (eg, TLS/x509 certificates)" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "- sasl: use SASL infrastructure. The actual auth scheme is then" }
|
||||
{ "#comment" = "controlled from /etc/sasl2/libvirt.conf. For the TCP" }
|
||||
{ "#comment" = "socket only GSSAPI & DIGEST-MD5 mechanisms will be used." }
|
||||
{ "#comment" = "For non-TCP or TLS sockets, any scheme is allowed." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "- polkit: use PolicyKit to authenticate. This is only suitable" }
|
||||
{ "#comment" = "for use on the UNIX sockets. The default policy will" }
|
||||
{ "#comment" = "require a user to supply their own password to gain" }
|
||||
{ "#comment" = "full read/write access (aka sudo like), while anyone" }
|
||||
{ "#comment" = "is allowed read/only access." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Set an authentication scheme for UNIX read-only sockets" }
|
||||
{ "#comment" = "By default socket permissions allow anyone to connect" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "To restrict monitoring of domains you may wish to enable" }
|
||||
{ "#comment" = "an authentication mechanism here" }
|
||||
{ "auth_unix_ro" = "none" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Set an authentication scheme for UNIX read-write sockets" }
|
||||
{ "#comment" = "By default socket permissions only allow root. If PolicyKit" }
|
||||
{ "#comment" = "support was compiled into libvirt, the default will be to" }
|
||||
{ "#comment" = "use 'polkit' auth." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "If the unix_sock_rw_perms are changed you may wish to enable" }
|
||||
{ "#comment" = "an authentication mechanism here" }
|
||||
{ "auth_unix_rw" = "none" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Change the authentication scheme for TCP sockets." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "If you don't enable SASL, then all TCP traffic is cleartext." }
|
||||
{ "#comment" = "Don't do this outside of a dev/test scenario. For real world" }
|
||||
{ "#comment" = "use, always enable SASL and use the GSSAPI or DIGEST-MD5" }
|
||||
{ "#comment" = "mechanism in /etc/sasl2/libvirt.conf" }
|
||||
{ "auth_tcp" = "sasl" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Change the authentication scheme for TLS sockets." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "TLS sockets already have encryption provided by the TLS" }
|
||||
{ "#comment" = "layer, and limited authentication is done by certificates" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "It is possible to make use of any SASL authentication" }
|
||||
{ "#comment" = "mechanism as well, by using 'sasl' for this option" }
|
||||
{ "auth_tls" = "none" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "################################################################" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "TLS x509 certificate configuration" }
|
||||
{ "#comment" = "" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Override the default server key file path" }
|
||||
{ "#comment" = "" }
|
||||
{ "key_file" = "/etc/pki/libvirt/private/serverkey.pem" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Override the default server certificate file path" }
|
||||
{ "#comment" = "" }
|
||||
{ "cert_file" = "/etc/pki/libvirt/servercert.pem" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Override the default CA certificate path" }
|
||||
{ "#comment" = "" }
|
||||
{ "ca_file" = "/etc/pki/CA/cacert.pem" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Specify a certificate revocation list." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Defaults to not using a CRL, uncomment to enable it" }
|
||||
{ "crl_file" = "/etc/pki/CA/crl.pem" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "################################################################" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Authorization controls" }
|
||||
{ "#comment" = "" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Flag to disable verification of client certificates" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Client certificate verification is the primary authentication mechanism." }
|
||||
{ "#comment" = "Any client which does not present a certificate signed by the CA" }
|
||||
{ "#comment" = "will be rejected." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "Default is to always verify. Uncommenting this will disable" }
|
||||
{ "#comment" = "verification - make sure an IP whitelist is set" }
|
||||
{ "tls_no_verify_certificate" = "1" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "A whitelist of allowed x509 Distinguished Names" }
|
||||
{ "#comment" = "This list may contain wildcards such as" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "\"C=GB,ST=London,L=London,O=Red Hat,CN=*\"" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "See the POSIX fnmatch function for the format of the wildcards." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "NB If this is an empty list, no client can connect, so comment out" }
|
||||
{ "#comment" = "entirely rather than using empty list to disable these checks" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "By default, no DN's are checked" }
|
||||
{ "tls_allowed_dn_list"
|
||||
{ "1" = "DN1"}
|
||||
{ "2" = "DN2"}
|
||||
}
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "A whitelist of allowed SASL usernames. The format for usernames" }
|
||||
{ "#comment" = "depends on the SASL authentication mechanism. Kerberos usernames" }
|
||||
{ "#comment" = "look like username@REALM" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "This list may contain wildcards such as" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "\"*@EXAMPLE.COM\"" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "See the POSIX fnmatch function for the format of the wildcards." }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "NB If this is an empty list, no client can connect, so comment out" }
|
||||
{ "#comment" = "entirely rather than using empty list to disable these checks" }
|
||||
{ "#comment" = "" }
|
||||
{ "#comment" = "By default, no Username's are checked" }
|
||||
{ "sasl_allowed_username_list"
|
||||
{ "1" = "joe@EXAMPLE.COM" }
|
||||
{ "2" = "fred@EXAMPLE.COM" }
|
||||
}
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "################################################################"}
|
||||
{ "#comment" = ""}
|
||||
{ "#comment" = "Processing controls"}
|
||||
{ "#comment" = ""}
|
||||
{ "#empty" }
|
||||
{ "#comment" = "The maximum number of concurrent client connections to allow"}
|
||||
{ "#comment" = "over all sockets combined."}
|
||||
{ "max_clients" = "20" }
|
||||
{ "#empty" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "The minimum limit sets the number of workers to start up"}
|
||||
{ "#comment" = "initially. If the number of active clients exceeds this,"}
|
||||
{ "#comment" = "then more threads are spawned, upto max_workers limit."}
|
||||
{ "#comment" = "Typically you'd want max_workers to equal maximum number"}
|
||||
{ "#comment" = "of clients allowed"}
|
||||
{ "min_workers" = "5" }
|
||||
{ "max_workers" = "20" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Total global limit on concurrent RPC calls. Should be" }
|
||||
{ "#comment" = "at least as large as max_workers. Beyond this, RPC requests" }
|
||||
{ "#comment" = "will be read into memory and queued. This directly impact" }
|
||||
{ "#comment" = "memory usage, currently each request requires 256 KB of" }
|
||||
{ "#comment" = "memory. So by default upto 5 MB of memory is used" }
|
||||
{ "max_requests" = "20" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Limit on concurrent requests from a single client" }
|
||||
{ "#comment" = "connection. To avoid one client monopolizing the server" }
|
||||
{ "#comment" = "this should be a small fraction of the global max_requests" }
|
||||
{ "#comment" = "and max_workers parameter" }
|
||||
{ "max_client_requests" = "5" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Logging level:" }
|
||||
{ "log_level" = "4" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Logging outputs:" }
|
||||
{ "log_outputs" = "4:stderr" }
|
||||
{ "#empty" }
|
||||
{ "#comment" = "Logging filters:" }
|
||||
{ "log_filters" = "a" }
|
||||
@ -1 +0,0 @@
|
||||
.memdump
|
||||
7
docs/.gitignore
vendored
Normal file
7
docs/.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
.memdump
|
||||
apibuild.pyc
|
||||
*.html
|
||||
libvirt-api.xml
|
||||
libvirt-refs.xml
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 495 B |
@ -1,256 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="libvirt.css" /><link rel="SHORTCUT ICON" href="/32favicon.png" /><title>API Alphabetic Index A-f for libvirt</title></head><body><div id="container"><div id="intro"><div id="adjustments"></div><div id="pageHeader"></div><div id="content2"><h1 class="style1">API Alphabetic Index A-f for libvirt</h1><h2 align="center"><a href="APIchunk0.html">A-f</a>
|
||||
<a href="APIchunk1.html">g-r</a>
|
||||
<a href="APIchunk2.html">s-z</a>
|
||||
</h2><h2>Letter A:</h2><dl><dt>ABI</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>API</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>APIs</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>After</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd></dl><h2>Letter C:</h2><dl><dt>CPU</dt><dd><a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>Collect</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
</dd></dl><h2>Letter D:</h2><dl><dt>Destroy</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
</dd><dt>Domain0</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>Dynamically</dt><dd><a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd></dl><h2>Letter E:</h2><dl><dt>Extract</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd></dl><h2>Letter F:</h2><dl><dt>Free</dt><dd><a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
</dd></dl><h2>Letter G:</h2><dl><dt>Get</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
</dd></dl><h2>Letter H:</h2><dl><dt>Hypervisor</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
</dd></dl><h2>Letter I:</h2><dl><dt>IDs</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
</dd><dt>Informations</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd></dl><h2>Letter K:</h2><dl><dt>KBytes</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd></dl><h2>Letter L:</h2><dl><dt>Launch</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>Linux</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd></dl><h2>Letter M:</h2><dl><dt>Macro</dt><dd><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
|
||||
</dd></dl><h2>Letter N:</h2><dl><dt>NOTE:</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>NULL</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>Note</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd></dl><h2>Letter O:</h2><dl><dt>OUT</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd></dl><h2>Letter P:</h2><dl><dt>Provide</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>Provides</dt><dd><a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd></dl><h2>Letter R:</h2><dl><dt>Read-Only</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
</dd><dt>Resume</dt><dd><a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
</dd><dt>Retrieve</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
</dd></dl><h2>Letter S:</h2><dl><dt>Shutdown</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>Suspends</dt><dd><a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd></dl><h2>Letter T:</h2><dl><dt>TODO:</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>This</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>Try</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
</dd></dl><h2>Letter U:</h2><dl><dt>UTF-8</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>Use</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd></dl><h2>Letter X:</h2><dl><dt>XML</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>Xen</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd></dl><h2>Letter a:</h2><dl><dt>about</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd><dt>access</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>active</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>add</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>after</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>against</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>alive</dt><dd><a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
</dd><dt>all</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
</dd><dt>allocated</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>allowed</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>already</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
</dd><dt>amount</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>anymore</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>application</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>are</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
</dd><dt>argument</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>array</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
</dd><dt>assumed</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>available</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>availble</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd></dl><h2>Letter b:</h2><dl><dt>back</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>based</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
</dd><dt>being</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>below</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>block</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
</dd><dt>but</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd></dl><h2>Letter c:</h2><dl><dt>call</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>called</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>caller</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>calling</dt><dd><a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
</dd><dt>can</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd><dt>capacities</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
</dd><dt>change</dt><dd><a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>changes</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>check</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>clients</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>closes</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
</dd><dt>code</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>collect</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
</dd><dt>command</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>compiled</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>connection</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
</dd><dt>contents</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>control</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>currently</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd></dl><h2>Letter d:</h2><dl><dt>data</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
</dd><dt>deallocated</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
</dd><dt>defined</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>description</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>device</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
</dd><dt>disk</dt><dd><a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>doable</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>does</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
</dd><dt>domains</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>down</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
</dd></dl><h2>Letter e:</h2><dl><dt>encoded</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>error</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>especially</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
</dd><dt>extracted</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd><dt>extraction</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd></dl><h2>Letter f:</h2><dl><dt>failure</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>file</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>filename</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
</dd><dt>find</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
</dd><dt>first</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>flags</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>for</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>format</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>found</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
</dd><dt>free</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>freed</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
</dd><dt>from</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
</dd><dt>frozen</dt><dd><a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>full</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>function</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>functionalities</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>further</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd></dl><h2 align="center"><a href="APIchunk0.html">A-f</a>
|
||||
<a href="APIchunk1.html">g-r</a>
|
||||
<a href="APIchunk2.html">s-z</a>
|
||||
</h2></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="index.html">Home</a></li><li><a style="font-weight:bold" href="html/index.html">API Menu</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
|
||||
@ -1,226 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="libvirt.css" /><link rel="SHORTCUT ICON" href="/32favicon.png" /><title>API Alphabetic Index g-r for libvirt</title></head><body><div id="container"><div id="intro"><div id="adjustments"></div><div id="pageHeader"></div><div id="content2"><h1 class="style1">API Alphabetic Index g-r for libvirt</h1><h2 align="center"><a href="APIchunk0.html">A-f</a>
|
||||
<a href="APIchunk1.html">g-r</a>
|
||||
<a href="APIchunk2.html">s-z</a>
|
||||
</h2><h2>Letter g:</h2><dl><dt>general</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>get</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
</dd><dt>given</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
</dd><dt>guest</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd></dl><h2>Letter h:</h2><dl><dt>have</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>hypervisor</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd></dl><h2>Letter i:</h2><dl><dt>ignore</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>image</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>information</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>informations</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd><dt>init</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
</dd><dt>initrd</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>instance</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>int</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
</dd><dt>interaction</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
</dd><dt>its</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd></dl><h2>Letter k:</h2><dl><dt>kept</dt><dd><a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
</dd><dt>kernel</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>kilobytes</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>knowing</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd></dl><h2>Letter l:</h2><dl><dt>lack</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
</dd><dt>level</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>libbrary</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>library</dt><dd><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>lifetime</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
</dd><dt>limited</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd><dt>line</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>list</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
</dd><dt>listed</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>long</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>lookup</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
</dd></dl><h2>Letter m:</h2><dl><dt>major</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>maximum</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>may</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>memory</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>method</dt><dd><a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>methods</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>micro</dt><dd><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
|
||||
</dd><dt>minor</dt><dd><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>monitoring</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
</dd><dt>must</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd></dl><h2>Letter n:</h2><dl><dt>name</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
</dd><dt>need</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
</dd><dt>needed</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
</dd><dt>new</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
</dd><dt>not</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>number</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
</dd></dl><h2>Letter o:</h2><dl><dt>object</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>one</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>only</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd><dt>operation</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
</dd><dt>option</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>optional</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>otherwise</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>output</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd></dl><h2>Letter p:</h2><dl><dt>padding</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>parameters</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>partial</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd><dt>pass</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>path</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>physical</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>pointer</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
</dd><dt>pointing</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
</dd><dt>private</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>priviledged</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>problem</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>process</dt><dd><a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>protection</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>providing</dt><dd><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
|
||||
</dd><dt>public</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
</dd><dt>publicly</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd></dl><h2>Letter r:</h2><dl><dt>ramdisk</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
</dd><dt>reactivate</dt><dd><a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>reboot</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>release</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>request</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>requires</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>reserved</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>resources</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>restarted</dt><dd><a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
</dd><dt>restore</dt><dd><a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>restricted</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>return</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>returned</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>returns</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
</dd><dt>root</dt><dd><a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
</dd><dt>running</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>runs</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd></dl><h2 align="center"><a href="APIchunk0.html">A-f</a>
|
||||
<a href="APIchunk1.html">g-r</a>
|
||||
<a href="APIchunk2.html">s-z</a>
|
||||
</h2></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="index.html">Home</a></li><li><a style="font-weight:bold" href="html/index.html">API Menu</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
|
||||
@ -1,135 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="libvirt.css" /><link rel="SHORTCUT ICON" href="/32favicon.png" /><title>API Alphabetic Index s-z for libvirt</title></head><body><div id="container"><div id="intro"><div id="adjustments"></div><div id="pageHeader"></div><div id="content2"><h1 class="style1">API Alphabetic Index s-z for libvirt</h1><h2 align="center"><a href="APIchunk0.html">A-f</a>
|
||||
<a href="APIchunk1.html">g-r</a>
|
||||
<a href="APIchunk2.html">s-z</a>
|
||||
</h2><h2>Letter s:</h2><dl><dt>same</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
</dd><dt>save</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>saved</dt><dd><a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
</dd><dt>saving</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>set</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>should</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>shutdown</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
</dd><dt>size</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>software</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
</dd><dt>state</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
</dd><dt>static</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
</dd><dt>stay</dt><dd><a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>still</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>stopped</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>store</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
</dd><dt>string</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
</dd><dt>structure</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd><dt>subject</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>success</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>successful</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>suspend</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>suspended</dt><dd><a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
</dd><dt>system</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
</dd></dl><h2>Letter t:</h2><dl><dt>term</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>terminated</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd><dt>that</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>their</dt><dd><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
</dd><dt>then</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>there</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>thereafter</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
</dd><dt>this</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>two</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>type</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd></dl><h2>Letter u:</h2><dl><dt>unimplemented</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>unknown</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>unsigned</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
</dd><dt>unused</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</dd><dt>usable</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
</dd><dt>used</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>user</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd></dl><h2>Letter v:</h2><dl><dt>value</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>values</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>version</dt><dd><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>virDomainFlags</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd><dt>virDomainInfo</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</dd><dt>virDomainRestore</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
</dd><dt>virDomainResume</dt><dd><a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>virDomainSave</dt><dd><a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
</dd><dt>virSuspendDomain</dt><dd><a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
</dd></dl><h2>Letter w:</h2><dl><dt>was</dt><dd><a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>what</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd><dt>where</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</dd><dt>which</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>while</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>will</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</dd><dt>with</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
</dd><dt>without</dt><dd><a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</dd><dt>work</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
</dd><dt>would</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</dd></dl><h2>Letter x:</h2><dl><dt>xen</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
</dd><dt>xenstore</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
</dd></dl><h2>Letter y:</h2><dl><dt>yet</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
</dd></dl><h2>Letter z:</h2><dl><dt>zero</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
</dd></dl><h2 align="center"><a href="APIchunk0.html">A-f</a>
|
||||
<a href="APIchunk1.html">g-r</a>
|
||||
<a href="APIchunk2.html">s-z</a>
|
||||
</h2></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="index.html">Home</a></li><li><a style="font-weight:bold" href="html/index.html">API Menu</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
|
||||
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="libvirt.css" /><link rel="SHORTCUT ICON" href="/32favicon.png" /><title>List of constructors for libvirt</title></head><body><div id="container"><div id="intro"><div id="adjustments"></div><div id="pageHeader"></div><div id="content2"><h1 class="style1">List of constructors for libvirt</h1><h2>Type unsigned int:</h2><p><a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
</p><h2>Type unsigned long:</h2><p><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
</p><h2>Type virConnectPtr:</h2><p><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
</p><h2>Type virDomainPtr:</h2><p><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
</p></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="index.html">Home</a></li><li><a style="font-weight:bold" href="html/index.html">API Menu</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
|
||||
@ -1,59 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="libvirt.css" /><link rel="SHORTCUT ICON" href="/32favicon.png" /><title>List of Symbols per Module for libvirt</title></head><body><div id="container"><div id="intro"><div id="adjustments"></div><div id="pageHeader"></div><div id="content2"><h1 class="style1">List of Symbols per Module for libvirt</h1><h2><a name="libvirt" id="libvirt">Module libvirt</a>:</h2><p><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DEVICE_DEFAULT">VIR_DEVICE_DEFAULT</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DEVICE_RO">VIR_DEVICE_RO</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DEVICE_RW">VIR_DEVICE_RW</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DEVICE_RW_FORCE">VIR_DEVICE_RW_FORCE</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_BLOCKED">VIR_DOMAIN_BLOCKED</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_CRASHED">VIR_DOMAIN_CRASHED</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_DESTROY">VIR_DOMAIN_DESTROY</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_NONE">VIR_DOMAIN_NONE</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_NOSTATE">VIR_DOMAIN_NOSTATE</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_PAUSED">VIR_DOMAIN_PAUSED</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_PRESERVE">VIR_DOMAIN_PRESERVE</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_RENAME_RESTART">VIR_DOMAIN_RENAME_RESTART</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_RESTART">VIR_DOMAIN_RESTART</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_RUNNING">VIR_DOMAIN_RUNNING</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_SHUTDOWN">VIR_DOMAIN_SHUTDOWN</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_SHUTOFF">VIR_DOMAIN_SHUTOFF</a><br />
|
||||
<a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnect">virConnect</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectPtr">virConnectPtr</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDeviceMode">virDeviceMode</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomain">virDomain</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateFlags">virDomainCreateFlags</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainInfo">virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainInfoPtr">virDomainInfoPtr</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainKernel">virDomainKernel</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainKernelPtr">virDomainKernelPtr</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainPtr">virDomainPtr</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestart">virDomainRestart</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainState">virDomainState</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</p></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="index.html">Home</a></li><li><a style="font-weight:bold" href="html/index.html">API Menu</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
|
||||
@ -1,32 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="libvirt.css" /><link rel="SHORTCUT ICON" href="/32favicon.png" /><title>List of function manipulating types in libvirt</title></head><body><div id="container"><div id="intro"><div id="adjustments"></div><div id="pageHeader"></div><div id="content2"><h1 class="style1">List of function manipulating types in libvirt</h1><h2>Type int *:</h2><p><a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
</p><h2>Type unsigned int:</h2><p><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
</p><h2>Type unsigned long:</h2><p><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
</p><h2>Type unsigned long *:</h2><p><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</p><h2>Type virConnectPtr:</h2><p><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
</p><h2>Type virDomainInfoPtr:</h2><p><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
</p><h2>Type virDomainPtr:</h2><p><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
</p></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="index.html">Home</a></li><li><a style="font-weight:bold" href="html/index.html">API Menu</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
|
||||
@ -1,59 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="libvirt.css" /><link rel="SHORTCUT ICON" href="/32favicon.png" /><title>Alphabetic List of Symbols in libvirt</title></head><body><div id="container"><div id="intro"><div id="adjustments"></div><div id="pageHeader"></div><div id="content2"><h1 class="style1">Alphabetic List of Symbols in libvirt</h1><h2>Letter L:</h2><p><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
|
||||
</p><h2>Letter V:</h2><p><a href="html/libvirt-libvirt.html#VIR_DEVICE_DEFAULT">VIR_DEVICE_DEFAULT</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DEVICE_RO">VIR_DEVICE_RO</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DEVICE_RW">VIR_DEVICE_RW</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DEVICE_RW_FORCE">VIR_DEVICE_RW_FORCE</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_BLOCKED">VIR_DOMAIN_BLOCKED</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_CRASHED">VIR_DOMAIN_CRASHED</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_DESTROY">VIR_DOMAIN_DESTROY</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_NONE">VIR_DOMAIN_NONE</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_NOSTATE">VIR_DOMAIN_NOSTATE</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_PAUSED">VIR_DOMAIN_PAUSED</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_PRESERVE">VIR_DOMAIN_PRESERVE</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_RENAME_RESTART">VIR_DOMAIN_RENAME_RESTART</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_RESTART">VIR_DOMAIN_RESTART</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_RUNNING">VIR_DOMAIN_RUNNING</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_SHUTDOWN">VIR_DOMAIN_SHUTDOWN</a><br />
|
||||
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_SHUTOFF">VIR_DOMAIN_SHUTOFF</a><br />
|
||||
</p><h2>Letter _:</h2><p><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#_virDomainKernel">_virDomainKernel</a><br />
|
||||
</p><h2>Letter v:</h2><p><a href="html/libvirt-libvirt.html#virConnect">virConnect</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains">virConnectNumOfDomains</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virConnectPtr">virConnectPtr</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDeviceMode">virDeviceMode</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomain">virDomain</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateFlags">virDomainCreateFlags</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainFree">virDomainFree</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetName">virDomainGetName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetOSType">virDomainGetOSType</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainInfo">virDomainInfo</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainInfoPtr">virDomainInfoPtr</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainKernel">virDomainKernel</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainKernelPtr">virDomainKernelPtr</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainPtr">virDomainPtr</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestart">virDomainRestart</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainRestore">virDomainRestore</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainState">virDomainState</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
|
||||
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
|
||||
</p></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="index.html">Home</a></li><li><a style="font-weight:bold" href="html/index.html">API Menu</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
|
||||
@ -7,7 +7,7 @@ function translate(str) {
|
||||
sub(/[0-9][0-9][0-9][0-9][0-9]+/, "<bug number='&'/>", str)
|
||||
return(str)
|
||||
}
|
||||
BEGIN {
|
||||
BEGIN {
|
||||
nb_entry = 0
|
||||
in_entry = 0
|
||||
in_item = 0
|
||||
@ -20,7 +20,7 @@ END {
|
||||
print "</log>"
|
||||
}
|
||||
/^[ \t]*$/ { next }
|
||||
/^[A-Za-z0-9]/ {
|
||||
/^[A-Za-z0-9]/ {
|
||||
match($0, "\(.*\) \([A-Z]+\) \([0-9][0-9][0-9][0-9]\) \(.*\) <\(.*\)>", loge)
|
||||
if (in_item == 1) printf("%s</item>\n", translate(item))
|
||||
if (in_entry == 1) print " </entry>"
|
||||
@ -41,7 +41,7 @@ END {
|
||||
match($0, "[ \t]*. *\(.*\)", loge)
|
||||
item = loge[1]
|
||||
}
|
||||
/^[ \t]*[a-zA-Z0-9\#]/ {
|
||||
/^[ \t]*[a-zA-Z0-9\#]/ {
|
||||
if (in_item == 1) {
|
||||
match($0, "[ \t]*\(.*\)[ \t]*", loge)
|
||||
item = sprintf("%s %s", item, loge[1])
|
||||
|
||||
@ -3,83 +3,35 @@
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<!-- Import the rest of the site stylesheets -->
|
||||
<xsl:import href="site.xsl"/>
|
||||
|
||||
<!-- Generate XHTML-1.0 transitional -->
|
||||
<xsl:output method="xml" encoding="ISO-8859-1" indent="yes"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
|
||||
<xsl:output method="xml" encoding="UTF-8" indent="yes"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
|
||||
|
||||
<xsl:param name="module">libvirt</xsl:param>
|
||||
|
||||
<!-- The table of content for the HTML page -->
|
||||
<xsl:variable name="menu_name">API Menu</xsl:variable>
|
||||
<xsl:variable name="develtoc">
|
||||
<form action="../search.php"
|
||||
enctype="application/x-www-form-urlencoded" method="get">
|
||||
<input name="query" type="text" size="20" value=""/>
|
||||
<input name="submit" type="submit" value="Search ..."/>
|
||||
</form>
|
||||
<ul><!-- style="margin-left: -1em" -->
|
||||
<li><a style="font-weight:bold"
|
||||
href="{$href_base}index.html">Main Menu</a></li>
|
||||
<li><a style="font-weight:bold"
|
||||
href="{$href_base}html/index.html">Modules Index</a></li>
|
||||
<li><a style="font-weight:bold"
|
||||
href="index.html">API Menu</a></li>
|
||||
</ul>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:template match="bug">
|
||||
<a href="https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id={@number}">
|
||||
<xsl:value-of select="@number"/></a>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item">
|
||||
<li><xsl:apply-templates/></li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="entry">
|
||||
|
||||
<p>
|
||||
<b><xsl:value-of select="@who"/></b>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="@date"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="@timezone"/>
|
||||
<span class="author"><xsl:value-of select="@who"/> </span>
|
||||
<span class="date"><xsl:value-of select="@date"/> </span>
|
||||
<span class="timezone"><xsl:value-of select="@timezone"/> </span>
|
||||
</p>
|
||||
<ul>
|
||||
<xsl:apply-templates select="item"/>
|
||||
</ul>
|
||||
</p>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="log">
|
||||
<xsl:variable name="title">ChangeLog last entries of <xsl:value-of select="$module"/></xsl:variable>
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="intro">
|
||||
<div id="adjustments"/>
|
||||
<div id="pageHeader"/>
|
||||
<div id="content2">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<xsl:apply-templates select="entry"/>
|
||||
</div>
|
||||
</div>
|
||||
<xsl:call-template name="linkList2"/>
|
||||
<xsl:call-template name="bottom"/>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<body>
|
||||
<h1>Log of recent changes to libvirt</h1>
|
||||
<div id="changelog">
|
||||
<xsl:apply-templates select="entry"/>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
|
||||
@ -1,80 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="libvirt.css" /><link rel="SHORTCUT ICON" href="/32favicon.png" /><title>FAQ</title></head><body><div id="container"><div id="intro"><div id="adjustments"></div><div id="pageHeader"></div><div id="content2"><h1 class="style1">FAQ</h1><p>Table of Contents:</p><ul><li><a href="FAQ.html#License">License(s)</a></li>
|
||||
<li><a href="FAQ.html#Installati">Installation</a></li>
|
||||
<li><a href="FAQ.html#Compilatio">Compilation</a></li>
|
||||
<li><a href="FAQ.html#Developer">Developer corner</a></li>
|
||||
</ul><h3><a name="License" id="License">License</a>(s)</h3><ol><li><em>Licensing Terms for libvir</em>
|
||||
<p>libvir is released under the <a href="http://www.opensource.org/licenses/lgpl-license.html">GNU Lesser
|
||||
General Public License</a>, see the file COPYING.LIB in the distribution
|
||||
for the precise wording. The only library that libvir depends upon is the
|
||||
Xen store access library which is also licenced under the LGPL.</p>
|
||||
</li>
|
||||
<li><em>Can I embed libvir in a proprietary application ?</em>
|
||||
<p>Yes. The LGPL allows you to embed libvir into a proprietary
|
||||
application. It would be graceful to send-back bug fixes and improvements
|
||||
as patches for possible incorporation in the main development tree. It
|
||||
will decrease your maintainance costs anyway if you do so.</p>
|
||||
</li>
|
||||
</ol><h3><a name="Installati" id="Installati">Installation</a></h3><ol><li><em>Where can I get libvir</em> ?
|
||||
<p>The original distribution comes from <a href="ftp://libvir.org/libvir/">ftp://libvir.org/libvir/</a>.</p>
|
||||
</li>
|
||||
<li><em>I can't install the libvir/libvir-devel RPM packages due to failed
|
||||
dependencies</em>
|
||||
<p>The most generic solution is to re-fetch the latest src.rpm , and
|
||||
rebuild it locally with</p>
|
||||
<p><code>rpm --rebuild libvir-xxx.src.rpm</code>.</p>
|
||||
<p>If everything goes well it will generate two binary rpm packages (one
|
||||
providing the shared libs and virsh, and the other one, the -devel
|
||||
package, providing includes, static libraries and scripts needed to build
|
||||
applications with libvir that you can install locally.</p>
|
||||
<p>One can also rebuild the RPMs from a tarball:</p>
|
||||
<p><code>rpmbuild -ta libdir-xxx.tar.gz</code></p>
|
||||
<p>Or from a configured tree with:</p>
|
||||
<p><code>make rpm</code></p>
|
||||
</li>
|
||||
<li><em>Failure to use the API for non-root users</em>
|
||||
<p>Large parts of the API may only be accessible with root priviledges,
|
||||
however the read only access to the xenstore data doesnot have to be
|
||||
forbidden to user, at least for monitoring purposes. If "virsh dinfo"
|
||||
fails to run as an user, change the mode of the xenstore read-only socket
|
||||
with:</p>
|
||||
<p><code>chmod 666 /var/run/xenstored/socket_ro</code></p>
|
||||
<p>and also make sure that the Xen Daemon is running correctly with local
|
||||
HTTP server enabled, this is defined in
|
||||
<code>/etc/xen/xend-config.sxp</code> which need the following line to be
|
||||
enabled:</p>
|
||||
<p><code>(xend-http-server yes)</code></p>
|
||||
<p>If needed restart the xend daemon after making the change with the
|
||||
following command run as root:</p>
|
||||
<p><code>service xend restart</code></p>
|
||||
</li>
|
||||
</ol><h3><a name="Compilatio" id="Compilatio">Compilation</a></h3><ol><li><em>What is the process to compile libvir ?</em>
|
||||
<p>As most UNIX libraries libvir follows the "standard":</p>
|
||||
<p><code>gunzip -c libvir-xxx.tar.gz | tar xvf -</code></p>
|
||||
<p><code>cd libvir-xxxx</code></p>
|
||||
<p><code>./configure --help</code></p>
|
||||
<p>to see the options, then the compilation/installation proper</p>
|
||||
<p><code>./configure [possible options]</code></p>
|
||||
<p><code>make</code></p>
|
||||
<p><code>make install</code></p>
|
||||
<p>At that point you may have to rerun ldconfig or a similar utility to
|
||||
update your list of installed shared libs.</p>
|
||||
</li>
|
||||
<li><em>What other libraries are needed to compile/install libvir ?</em>
|
||||
<p>Libvir requires libxenstore, which is usually provided by the xen
|
||||
packages as well as the public headers to compile against libxenstore.</p>
|
||||
</li>
|
||||
<li><em>I use the CVS version and there is no configure script</em>
|
||||
<p>The configure script (and other Makefiles) are generated. Use the
|
||||
autogen.sh script to regenerate the configure script and Makefiles,
|
||||
like:</p>
|
||||
<p><code>./autogen.sh --prefix=/usr --disable-shared</code></p>
|
||||
</li>
|
||||
</ol><h3><a name="Developer" id="Developer">Developer</a> corner</h3><ol><li><em>Troubles compiling or linking programs using libvir</em>
|
||||
<p>To simplify the process of reusing the library, libvir comes with
|
||||
pkgconfig support, which can be used directly from autoconf support or
|
||||
via the pkg-config command line tool, like:</p>
|
||||
<p><code>pkg-config libvir --libs</code></p>
|
||||
</li>
|
||||
</ol></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="index.html">Home</a></li><li><a href="news.html">Releases</a></li><li><a href="intro.html">Introduction</a></li><li><a href="architecture.html">libvir architecture</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a style="font-weight:bold" href="html/index.html">API Menu</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
|
||||
144
docs/FAQ.html.in
Normal file
144
docs/FAQ.html.in
Normal file
@ -0,0 +1,144 @@
|
||||
<?xml version="1.0"?>
|
||||
<html>
|
||||
<body>
|
||||
<h1 >FAQ</h1>
|
||||
<p>Table of Contents:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="FAQ.html#License">License(s)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="FAQ.html#Installati">Installation</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="FAQ.html#Compilatio">Compilation</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="FAQ.html#Developer">Developer corner</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h3><a name="License" id="License">License</a>(s)</h3>
|
||||
<ol>
|
||||
<li>
|
||||
<em>Licensing Terms for libvirt</em>
|
||||
<p>libvirt is released under the <a href="http://www.opensource.org/licenses/lgpl-license.html">GNU Lesser
|
||||
General Public License</a>, see the file COPYING.LIB in the distribution
|
||||
for the precise wording. The only library that libvirt depends upon is
|
||||
the Xen store access library which is also licenced under the LGPL.</p>
|
||||
</li>
|
||||
<li>
|
||||
<em>Can I embed libvirt in a proprietary application ?</em>
|
||||
<p>Yes. The LGPL allows you to embed libvirt into a proprietary
|
||||
application. It would be graceful to send-back bug fixes and improvements
|
||||
as patches for possible incorporation in the main development tree. It
|
||||
will decrease your maintenance costs anyway if you do so.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<h3>
|
||||
<a name="Installati" id="Installati">Installation</a>
|
||||
</h3>
|
||||
<ol>
|
||||
<li><em>Where can I get libvirt</em> ?
|
||||
<p>The original distribution comes from <a href="ftp://libvirt.org/libvirt/">ftp://libvirt.org/libvirt/</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<em>I can't install the libvirt/libvirt-devel RPM packages due to
|
||||
failed dependencies</em>
|
||||
<p>The most generic solution is to re-fetch the latest src.rpm , and
|
||||
rebuild it locally with</p>
|
||||
<p><code>rpm --rebuild libvirt-xxx.src.rpm</code>.</p>
|
||||
<p>If everything goes well it will generate two binary rpm packages (one
|
||||
providing the shared libs and virsh, and the other one, the -devel
|
||||
package, providing includes, static libraries and scripts needed to build
|
||||
applications with libvirt that you can install locally.</p>
|
||||
<p>One can also rebuild the RPMs from a tarball:</p>
|
||||
<p>
|
||||
<code>rpmbuild -ta libdir-xxx.tar.gz</code>
|
||||
</p>
|
||||
<p>Or from a configured tree with:</p>
|
||||
<p>
|
||||
<code>make rpm</code>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<em>Failure to use the API for non-root users</em>
|
||||
<p>Large parts of the API may only be accessible with root privileges,
|
||||
however the read only access to the xenstore data doesnot have to be
|
||||
forbidden to user, at least for monitoring purposes. If "virsh dominfo"
|
||||
fails to run as an user, change the mode of the xenstore read-only socket
|
||||
with:</p>
|
||||
<p>
|
||||
<code>chmod 666 /var/run/xenstored/socket_ro</code>
|
||||
</p>
|
||||
<p>and also make sure that the Xen Daemon is running correctly with local
|
||||
HTTP server enabled, this is defined in
|
||||
<code>/etc/xen/xend-config.sxp</code> which need the following line to be
|
||||
enabled:</p>
|
||||
<p>
|
||||
<code>(xend-http-server yes)</code>
|
||||
</p>
|
||||
<p>If needed restart the xend daemon after making the change with the
|
||||
following command run as root:</p>
|
||||
<p>
|
||||
<code>service xend restart</code>
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
<h3>
|
||||
<a name="Compilatio" id="Compilatio">Compilation</a>
|
||||
</h3>
|
||||
<ol>
|
||||
<li>
|
||||
<em>What is the process to compile libvirt ?</em>
|
||||
<p>As most UNIX libraries libvirt follows the "standard":</p>
|
||||
<p>
|
||||
<code>gunzip -c libvirt-xxx.tar.gz | tar xvf -</code>
|
||||
</p>
|
||||
<p>
|
||||
<code>cd libvirt-xxxx</code>
|
||||
</p>
|
||||
<p>
|
||||
<code>./configure --help</code>
|
||||
</p>
|
||||
<p>to see the options, then the compilation/installation proper</p>
|
||||
<p>
|
||||
<code>./configure [possible options]</code>
|
||||
</p>
|
||||
<p>
|
||||
<code>make</code>
|
||||
</p>
|
||||
<p>
|
||||
<code>make install</code>
|
||||
</p>
|
||||
<p>At that point you may have to rerun ldconfig or a similar utility to
|
||||
update your list of installed shared libs.</p>
|
||||
</li>
|
||||
<li>
|
||||
<em>What other libraries are needed to compile/install libvirt ?</em>
|
||||
<p>Libvirt requires libxenstore, which is usually provided by the xen
|
||||
packages as well as the public headers to compile against libxenstore.</p>
|
||||
</li>
|
||||
<li>
|
||||
<em>I use the GIT version and there is no configure script</em>
|
||||
<p>The configure script (and other Makefiles) are generated. Use the
|
||||
autogen.sh script to regenerate the configure script and Makefiles,
|
||||
like:</p>
|
||||
<p>
|
||||
<code>./autogen.sh --prefix=/usr --disable-shared</code>
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
<h3><a name="Developer" id="Developer">Developer</a> corner</h3>
|
||||
<ol>
|
||||
<li>
|
||||
<em>Troubles compiling or linking programs using libvirt</em>
|
||||
<p>To simplify the process of reusing the library, libvirt comes with
|
||||
pkgconfig support, which can be used directly from autoconf support or
|
||||
via the pkg-config command line tool, like:</p>
|
||||
<p>
|
||||
<code>pkg-config libvirt --libs</code>
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
</body>
|
||||
</html>
|
||||
29
docs/Goals
29
docs/Goals
@ -1,29 +0,0 @@
|
||||
|
||||
Why libxen:
|
||||
-----------
|
||||
|
||||
|
||||
The main goals of the library is to provide an stable API abstracting
|
||||
the underlying acual implementation of the hypervisor calls.
|
||||
|
||||
1/ Stable API:
|
||||
by isolating the data structures and entry points used at the low
|
||||
level Xen Hypervisor interfaces, allowing evolution of said interface
|
||||
over time without breaking the application visible API and ABI
|
||||
|
||||
2/ Abstraction:
|
||||
by providing at the C level simplified concept exposed only as opaque
|
||||
structure for the hypervisor connection, domains and other kind of
|
||||
objects which may be needed in the future. It must also provide
|
||||
a set of higher level function calls simplifying the developement
|
||||
of applications using the supervisor.
|
||||
|
||||
3/ Maintainability and openness:
|
||||
All data structures and entry points must be fully documented, all
|
||||
changes will be driven in an open fashion based on a publicly archived
|
||||
mailing-list allowing peer-review before changes will be introduced.
|
||||
Tools and regression tests will be implemented and shipped as part of the
|
||||
releases of the library.
|
||||
|
||||
Daniel Veillard <veillard@redhat.com>
|
||||
$Date$
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.0 KiB |
203
docs/Makefile.am
203
docs/Makefile.am
@ -1,57 +1,153 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
SUBDIRS=examples
|
||||
SUBDIRS= schemas
|
||||
|
||||
# The directory containing the source code (if it contains documentation).
|
||||
DOC_SOURCE_DIR=../src
|
||||
|
||||
PAGES= index.html bugs.html FAQ.html
|
||||
APIPAGES=APIconstructors.html APIfiles.html APIfunctions.html \
|
||||
APIsymbols.html APIchunk0.html
|
||||
EXTRA_DIST= \
|
||||
libvirt-api.xml libvirt-refs.xml apibuild.py \
|
||||
*.xsl *.html *.gif html/*.html html/*.png
|
||||
DEVHELP_DIR=$(datadir)/gtk-doc/html/libvirt
|
||||
|
||||
apihtml = \
|
||||
html/index.html \
|
||||
html/libvirt-libvirt.html \
|
||||
html/libvirt-virterror.html
|
||||
|
||||
apipng = \
|
||||
html/left.png \
|
||||
html/up.png \
|
||||
html/home.png \
|
||||
html/right.png
|
||||
|
||||
devhelphtml = \
|
||||
devhelp/libvirt.devhelp \
|
||||
devhelp/index.html \
|
||||
devhelp/general.html \
|
||||
devhelp/libvirt-libvirt.html \
|
||||
devhelp/libvirt-virterror.html
|
||||
|
||||
devhelppng = \
|
||||
devhelp/home.png \
|
||||
devhelp/left.png \
|
||||
devhelp/right.png \
|
||||
devhelp/up.png
|
||||
|
||||
devhelpcss = devhelp/style.css
|
||||
|
||||
devhelpxsl = devhelp/devhelp.xsl devhelp/html.xsl
|
||||
|
||||
png = \
|
||||
32favicon.png \
|
||||
footer_corner.png \
|
||||
footer_pattern.png \
|
||||
libvirt-header-bg.png \
|
||||
libvirt-header-logo.png \
|
||||
libvirtLogo.png \
|
||||
libvirt-net-logical.png \
|
||||
libvirt-net-physical.png \
|
||||
libvirt-daemon-arch.png \
|
||||
libvirt-driver-arch.png \
|
||||
libvirt-object-model.png \
|
||||
madeWith.png \
|
||||
et.png
|
||||
|
||||
gif = \
|
||||
architecture.gif \
|
||||
node.gif
|
||||
|
||||
dot_html_in = $(wildcard *.html.in)
|
||||
dot_html = $(dot_html_in:%.html.in=%.html)
|
||||
|
||||
patches = $(wildcard api_extension/*.patch)
|
||||
|
||||
xml = \
|
||||
libvirt-api.xml \
|
||||
libvirt-refs.xml
|
||||
|
||||
fig = \
|
||||
libvirt-net-logical.fig \
|
||||
libvirt-net-physical.fig \
|
||||
libvirt-daemon-arch.fig \
|
||||
libvirt-driver-arch.fig \
|
||||
libvirt-object-model.fig
|
||||
|
||||
EXTRA_DIST= \
|
||||
apibuild.py \
|
||||
site.xsl newapi.xsl news.xsl page.xsl ChangeLog.xsl \
|
||||
$(dot_html) $(dot_html_in) $(gif) $(apihtml) $(apipng) \
|
||||
$(devhelphtml) $(devhelppng) $(devhelpcss) $(devhelpxsl) \
|
||||
$(xml) $(fig) $(png) \
|
||||
$(patches) \
|
||||
sitemap.html.in \
|
||||
ChangeLog.awk
|
||||
|
||||
MAINTAINERCLEANFILES = $(dot_html) $(apihtml) $(devhelphtml)
|
||||
|
||||
all: web
|
||||
|
||||
api: libvirt-api.xml libvirt-refs.xml
|
||||
|
||||
web: $(dot_html) html/index.html devhelp/index.html
|
||||
|
||||
ChangeLog.xml: ../ChangeLog ChangeLog.awk
|
||||
awk -f ChangeLog.awk < $< > $@
|
||||
|
||||
ChangeLog.html.in: ChangeLog.xml ChangeLog.xsl
|
||||
@if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Generating $@"; \
|
||||
name=`echo $@ | sed -e 's/.tmp//'`; \
|
||||
$(XSLTPROC) --nonet $(top_srcdir)/docs/ChangeLog.xsl $< > $@ \
|
||||
|| { rm $@ && exit 1; }; fi
|
||||
|
||||
%.png: %.fig
|
||||
convert -rotate 90 $< $@
|
||||
|
||||
%.html.tmp: %.html.in site.xsl page.xsl sitemap.html.in
|
||||
@if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Generating $@"; \
|
||||
name=`echo $@ | sed -e 's/.tmp//'`; \
|
||||
$(XSLTPROC) --stringparam pagename $$name --nonet --html \
|
||||
$(top_srcdir)/docs/site.xsl $< > $@ \
|
||||
|| { rm $@ && exit 1; }; fi
|
||||
|
||||
%.html: %.html.tmp
|
||||
@if test -x $(XMLLINT) && test -x $(XMLCATALOG) ; then \
|
||||
if $(XMLCATALOG) /etc/xml/catalog \
|
||||
"-//W3C//DTD XHTML 1.0 Strict//EN" > /dev/null ; then \
|
||||
echo "Validating $@" ; \
|
||||
$(XMLLINT) --nonet --format --valid $< > $@ \
|
||||
|| { rm $@ && exit 1; }; \
|
||||
else echo "missing XHTML1 DTD" ; fi ; fi
|
||||
|
||||
|
||||
man_MANS=
|
||||
|
||||
all: web $(top_builddir)/NEWS $(man_MANS)
|
||||
|
||||
api: libvirt-api.xml libvirt-refs.xml $(APIPAGES) $(srcdir)/html/index.html
|
||||
|
||||
web: $(PAGES)
|
||||
|
||||
$(PAGES): libvir.html site.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the HTML Web pages from libvir.html" ; \
|
||||
$(XSLTPROC) --nonet --html $(top_srcdir)/docs/site.xsl $(top_srcdir)/docs/libvir.html > index.html ; fi );
|
||||
-@(if [ -x $(XMLLINT) ] ; then \
|
||||
echo "Validating the HTML Web pages" ; \
|
||||
$(XMLLINT) --nonet --valid --noout $(PAGES) ; fi );
|
||||
|
||||
|
||||
$(APIPAGES): libvirt-api.xml libvirt-refs.xml $(top_srcdir)/docs/site.xsl $(top_srcdir)/docs/api.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the HTML API pages from libvirt-refs.xml" ; \
|
||||
$(XSLTPROC) --nonet --html $(top_srcdir)/docs/api.xsl \
|
||||
$(top_srcdir)/docs/libvir.html ; fi );
|
||||
-@(if [ -x $(XMLLINT) ] ; then \
|
||||
echo "Validating the HTML API pages" ; \
|
||||
$(XMLLINT) --nonet --valid --noout API*.html ; fi );
|
||||
|
||||
$(srcdir)/html/index.html: libvirt-api.xml $(srcdir)/newapi.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
html/index.html: libvirt-api.xml newapi.xsl page.xsl sitemap.html.in
|
||||
-@if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the HTML pages from the XML API" ; \
|
||||
$(XSLTPROC) --nonet $(srcdir)/newapi.xsl libvirt-api.xml ; fi )
|
||||
-@(if [ -x $(XMLLINT) ] ; then \
|
||||
$(XSLTPROC) --nonet $(srcdir)/newapi.xsl libvirt-api.xml ; fi
|
||||
-@if test -x $(XMLLINT) && test -x $(XMLCATALOG) ; then \
|
||||
if $(XMLCATALOG) /etc/xml/catalog "-//W3C//DTD XHTML 1.0 Strict//EN" \
|
||||
> /dev/null ; then \
|
||||
echo "Validating the resulting XHTML pages" ; \
|
||||
$(XMLLINT) --nonet --valid --noout html/*.html ; fi );
|
||||
$(XMLLINT) --nonet --valid --noout html/*.html ; \
|
||||
else echo "missing XHTML1 DTD" ; fi ; fi
|
||||
|
||||
libvirt-api.xml libvirt-refs.xml: apibuild.py ../include/*.h ../src/*.h ../src/*.c
|
||||
-(./apibuild.py)
|
||||
$(addprefix $(srcdir)/,$(devhelphtml)): $(srcdir)/libvirt-api.xml $(devhelpxsl)
|
||||
-@echo Rebuilding devhelp files
|
||||
-@if [ -x $(XSLTPROC) ] ; then \
|
||||
$(XSLTPROC) --nonet -o devhelp/libvirt.devhelp \
|
||||
$(top_srcdir)/docs/devhelp/devhelp.xsl libvirt-api.xml ; fi
|
||||
|
||||
$(top_builddir)/NEWS: $(top_srcdir)/docs/news.xsl $(top_srcdir)/docs/news.html
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
$(XSLTPROC) --nonet $(top_srcdir)/docs/news.xsl $(top_srcdir)/docs/news.html > $(top_builddir)/NEWS ; fi );
|
||||
python_generated_files = \
|
||||
$(srcdir)/html/libvirt-libvirt.html \
|
||||
$(srcdir)/html/libvirt-virterror.html \
|
||||
$(srcdir)/libvirt-api.xml \
|
||||
$(srcdir)/libvirt-refs.xml
|
||||
|
||||
$(python_generated_files): $(srcdir)/apibuild.py \
|
||||
$(srcdir)/../include/libvirt/*.h \
|
||||
$(srcdir)/../src/libvirt.c \
|
||||
$(srcdir)/../src/util/virterror.c
|
||||
-srcdir=$(srcdir) $(srcdir)/apibuild.py
|
||||
|
||||
check-local: all
|
||||
|
||||
clean-local:
|
||||
rm -f *~ *.bak *.hierarchy *.signals *-unused.txt
|
||||
@ -61,10 +157,23 @@ maintainer-clean-local: clean-local
|
||||
|
||||
rebuild: api all
|
||||
|
||||
install-data-local:
|
||||
install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
|
||||
-@INSTALL@ -m 0644 $(srcdir)/libvir.html $(srcdir)/FAQ.html $(srcdir)/redhat.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
|
||||
-$(INSTALL) -m 0644 $(srcdir)/FAQ.html \
|
||||
$(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/html
|
||||
-@INSTALL@ -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html
|
||||
-@INSTALL@ -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html
|
||||
for h in $(apihtml); do \
|
||||
$(INSTALL) -m 0644 $(srcdir)/$$h $(DESTDIR)$(HTML_DIR)/html; done
|
||||
for p in $(apipng); do \
|
||||
$(INSTALL) -m 0644 $(srcdir)/$$p $(DESTDIR)$(HTML_DIR)/html; done
|
||||
$(mkinstalldirs) $(DESTDIR)$(DEVHELP_DIR)
|
||||
for file in $(devhelphtml) $(devhelppng) $(devhelpcss); do \
|
||||
$(INSTALL) -m 0644 $(srcdir)/$${file} $(DESTDIR)$(DEVHELP_DIR) ; \
|
||||
done
|
||||
|
||||
uninstall-local:
|
||||
for h in $(apihtml); do rm $(DESTDIR)$(HTML_DIR)/$$h; done
|
||||
for p in $(apipng); do rm $(DESTDIR)$(HTML_DIR)/$$p; done
|
||||
for f in $(devhelphtml) $(devhelppng) $(devhelpcss); do \
|
||||
rm $(DESTDIR)$(DEVHELP_DIR)/$$(basename $$f); \
|
||||
done
|
||||
|
||||
136
docs/api.html.in
Normal file
136
docs/api.html.in
Normal file
@ -0,0 +1,136 @@
|
||||
<?xml version="1.0"?>
|
||||
<html>
|
||||
<body>
|
||||
<h1>The libvirt API concepts</h1>
|
||||
|
||||
<p> This page describes the main principles and architecture choices
|
||||
behind the definition of the libvirt API:
|
||||
<ul>
|
||||
<li>
|
||||
<a href="#Objects">Objects exposed</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#Functions">Functions and naming conventions</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#Driver">The drivers</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#Remote">Daemon and remote access</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h2><a name="Objects" id="Objects">Objects exposed</a></h2>
|
||||
<p> As defined in the <a href="goals.html">goals section</a>, libvirt
|
||||
API need to expose all the resources needed to manage the virtualization
|
||||
support of recent operating systems. The first object manipulated though
|
||||
the API is <code>virConnectPtr</code> which represent a connection to
|
||||
an hypervisor. Any application using libvirt is likely to start using the
|
||||
API by calling one of <a href="html/libvirt-libvirt.html#virConnectOpen"
|
||||
>the virConnectOpen functions</a>. You will note that those functions take
|
||||
a name argument which is actually an URI to select the right hypervisor to
|
||||
open, this is needed to allow remote connections and also select between
|
||||
different possible hypervisors (for example on a Linux system it may be
|
||||
possible to use both KVM and LinuxContainers on the same node). A NULL
|
||||
name will default to a preselected hypervisor but it's probably not a
|
||||
wise thing to do in most cases. See the <a href="uri.html">connection
|
||||
URI</a> page for a full descriptions of the values allowed.<p>
|
||||
<p> Once the application obtained a <code class='docref'>virConnectPtr</code>
|
||||
connection to the
|
||||
hypervisor it can then use it to manage domains and related resources
|
||||
available for virtualization like storage and networking. All those are
|
||||
exposed as first class objects, and connected to the hypervisor connection
|
||||
(and the node or cluster where it is available).</p>
|
||||
<p class="image">
|
||||
<img alt="first class objects exposed by the API"
|
||||
src="libvirt-object-model.png"/>
|
||||
</p>
|
||||
<p> The figure above shows the five main objects exported by the API:</p>
|
||||
<ul>
|
||||
<li>virConnectPtr: represent a connection to an hypervisor.</li>
|
||||
<li>virDomainPtr: represent one domain either active or defined (i.e.
|
||||
existing as permanent config file and storage but not currently running
|
||||
on that node). The function <code class='docref'>virConnectListDomains</code>
|
||||
allows to list all the IDs for the domains active on this hypervisor.</li>
|
||||
<li>virNetworkPtr: represent one network either active or defined (i.e.
|
||||
existing as permanent config file and storage but not currently activated.
|
||||
The function <code class='docref'>virConnectListNetworks</code>
|
||||
allows to list all the virtualization networks actived on this node.</li>
|
||||
<li>virStorageVolPtr: represent one storage volume, usually this is used
|
||||
as a block device available to one of the domains. The function
|
||||
<code class="docref">virStorageVolLookupByPath</code> allows to find
|
||||
the object based on its path on the node.</li>
|
||||
<li>virStoragePoolPtr: represent a storage pool, i.e. a logical area
|
||||
which can be used to allocate and store storage volumes. The function
|
||||
<code class="docref">virStoragePoolLookupByVolume</code> allows to find
|
||||
the storage pool containing a given storage volume.</li>
|
||||
</ul>
|
||||
<p> Most object manipulated by the library can also be represented using
|
||||
XML descriptions. This is used primarily to create those object, but is
|
||||
also helpful to modify or save their description back.</p>
|
||||
<p> Domains, network and storage pools can be either <code>active</code>
|
||||
i.e. either running or available for immediate use, or
|
||||
<code>defined</code> in which case they are inactive but there is
|
||||
a permanent definition available in the system for them. Based on this
|
||||
thay can be activated dynamically in order to be used.</p>
|
||||
<p> Most kind of object can also be named in various ways:<p>
|
||||
<ul>
|
||||
<li>by their <code>name</code>, an user friendly identifier but
|
||||
whose unicity cannot be garanteed between two nodes.</li>
|
||||
<li>by their <code>ID</code>, which is a runtime unique identifier
|
||||
provided by the hypervisor for one given activation of the object,
|
||||
but it becomes invalid once the resource is deactivated.</li >
|
||||
<li>by their <code>UUID</code>, a 16 bytes unique identifier
|
||||
as defined in <a href="http://www.ietf.org/rfc/rfc4122.txt">RFC 4122</a>,
|
||||
which is garanteed to be unique for long term usage and across a
|
||||
set of nodes.</li>
|
||||
</ul>
|
||||
|
||||
<h2><a name="Functions" id="Functions">Functions and naming
|
||||
conventions</a></h2>
|
||||
<p> The naming of the functions present in the library is usually
|
||||
made of a prefix describing the object associated to the function
|
||||
and a verb describing the action on that object.</p>
|
||||
<p> For each first class object you will find apis
|
||||
for the following actions:</p>
|
||||
<ul>
|
||||
<li><b>Lookup</b>:...LookupByName,
|
||||
<li><b>Enumeration</b>:virConnectList... and virConnectNumOf...:
|
||||
those are used to enumerate a set of object available to an given
|
||||
hypervisor connection like:
|
||||
<code class='docref'>virConnectListDomains</code>,
|
||||
<code class='docref'>virConnectNumOfDomains</code>,
|
||||
<code class='docref'>virConnectListNetworks</code>,
|
||||
<code class='docref'>virConnectListStoragePools</code>, etc.</li>
|
||||
<li><b>Description</b>: ...GetInfo: those are generic accessor providing
|
||||
a set of informations about an object, they are
|
||||
<code class='docref'>virNodeGetInfo</code>,
|
||||
<code class='docref'>virDomainGetInfo</code>,
|
||||
<code class='docref'>virStoragePoolGetInfo</code>,
|
||||
<code class='docref'>virStorageVolGetInfo</code>.</li>
|
||||
<li><b>Accessors</b>: ...Get... and ...Set...: those are more specific
|
||||
accessors to query or modify the given object, like
|
||||
<code class='docref'>virConnectGetType</code>,
|
||||
<code class='docref'>virDomainGetMaxMemory</code>,
|
||||
<code class='docref'>virDomainSetMemory</code>,
|
||||
<code class='docref'>virDomainGetVcpus</code>,
|
||||
<code class='docref'>virStoragePoolSetAutostart</code>,
|
||||
<code class='docref'>virNetworkGetBridgeName</code>, etc.</li>
|
||||
<li><b>Creation</b>: </li>
|
||||
<li><b>Destruction</b>: ... </li>
|
||||
</ul>
|
||||
<p> For more in-depth details of the storage related APIs see
|
||||
<a href="storage.html">the storage management page</a>,
|
||||
<h2><a name="Driver" id="Driver">The libvirt drivers</a></h2>
|
||||
<p></p>
|
||||
<p class="image">
|
||||
<img alt="The libvirt driver architecture"
|
||||
src="libvirt-driver-arch.png"/>
|
||||
</p>
|
||||
<h2><a name="Remote" id="Remote">Daemon and remote access</a></h2>
|
||||
<p></p>
|
||||
<p class="image">
|
||||
<img alt="The libvirt daemon and remote architecture"
|
||||
src="libvirt-daemon-arch.png"/>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
274
docs/api.xsl
274
docs/api.xsl
@ -1,274 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- this stylesheet builds the API*.html , it works based on libvirt-refs.xml
|
||||
-->
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:exsl="http://exslt.org/common"
|
||||
extension-element-prefixes="exsl"
|
||||
exclude-result-prefixes="exsl">
|
||||
|
||||
<!-- Import the rest of the site stylesheets -->
|
||||
<xsl:import href="site.xsl"/>
|
||||
|
||||
<!-- Generate XHTML-1.0 transitional -->
|
||||
<xsl:output method="xml" encoding="ISO-8859-1" indent="yes"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
|
||||
|
||||
<xsl:variable name="href_base" select="''"/>
|
||||
<xsl:variable name="apirefs" select="document('libvirt-refs.xml')"/>
|
||||
<xsl:variable name="module" select="$apirefs/apirefs/@name"/>
|
||||
<xsl:key name="refhref" match="reference" use="@name"/>
|
||||
|
||||
<xsl:template match="ref" mode="anchor">
|
||||
<xsl:variable name="name" select="@name"/>
|
||||
<xsl:for-each select="document('libvirt-refs.xml')">
|
||||
<a href="{key('refhref', $name)/@href}"><xsl:value-of select="$name"/></a><br/>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
<xsl:template match="type" mode="reflist">
|
||||
<h2>Type <xsl:value-of select="@name"/>:</h2>
|
||||
<p>
|
||||
<xsl:for-each select="ref">
|
||||
<xsl:apply-templates mode="anchor" select="."/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</p>
|
||||
</xsl:template>
|
||||
<xsl:template match="letter" mode="reflist">
|
||||
<h2>Letter <xsl:value-of select="@name"/>:</h2>
|
||||
<p>
|
||||
<xsl:for-each select="ref">
|
||||
<xsl:apply-templates mode="anchor" select="."/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</p>
|
||||
</xsl:template>
|
||||
<xsl:template match="file" mode="reflist">
|
||||
<h2><a name="{@name}">Module <xsl:value-of select="@name"/></a>:</h2>
|
||||
<p>
|
||||
<xsl:for-each select="ref">
|
||||
<xsl:apply-templates mode="anchor" select="."/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</p>
|
||||
</xsl:template>
|
||||
<xsl:template match="letter" mode="wordlist">
|
||||
<h2>Letter <xsl:value-of select="@name"/>:</h2>
|
||||
<dl>
|
||||
<xsl:for-each select="word">
|
||||
<dt><xsl:value-of select="@name"/></dt>
|
||||
<dd>
|
||||
<xsl:for-each select="ref">
|
||||
<xsl:apply-templates mode="anchor" select="."/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</dd>
|
||||
</xsl:for-each>
|
||||
</dl>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="constructors">
|
||||
<xsl:message>Generating API Constructors</xsl:message>
|
||||
<xsl:variable name="title">List of constructors for <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="APIconstructors.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="intro">
|
||||
<div id="adjustments"/>
|
||||
<div id="pageHeader"/>
|
||||
<div id="content2">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<xsl:apply-templates mode="reflist" select="type"/>
|
||||
</div>
|
||||
</div>
|
||||
<xsl:call-template name="linkList2"/>
|
||||
<xsl:call-template name="bottom"/>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
<xsl:template match="files">
|
||||
<xsl:message>Generating API List of synbols per file</xsl:message>
|
||||
<xsl:variable name="title">List of Symbols per Module for <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="APIfiles.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="intro">
|
||||
<div id="adjustments"/>
|
||||
<div id="pageHeader"/>
|
||||
<div id="content2">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<xsl:apply-templates mode="reflist" select="file"/>
|
||||
</div>
|
||||
</div>
|
||||
<xsl:call-template name="linkList2"/>
|
||||
<xsl:call-template name="bottom"/>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
<xsl:template match="functions">
|
||||
<xsl:message>Generating API Functions by Type</xsl:message>
|
||||
<xsl:variable name="title">List of function manipulating types in <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="APIfunctions.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="intro">
|
||||
<div id="adjustments"/>
|
||||
<div id="pageHeader"/>
|
||||
<div id="content2">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<xsl:apply-templates mode="reflist" select="type"/>
|
||||
</div>
|
||||
</div>
|
||||
<xsl:call-template name="linkList2"/>
|
||||
<xsl:call-template name="bottom"/>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
<xsl:template match="alpha">
|
||||
<xsl:message>Generating API Alphabetic list</xsl:message>
|
||||
<xsl:variable name="title">Alphabetic List of Symbols in <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="APIsymbols.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="intro">
|
||||
<div id="adjustments"/>
|
||||
<div id="pageHeader"/>
|
||||
<div id="content2">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<xsl:apply-templates mode="reflist" select="letter"/>
|
||||
</div>
|
||||
</div>
|
||||
<xsl:call-template name="linkList2"/>
|
||||
<xsl:call-template name="bottom"/>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
<xsl:template name="apichunks">
|
||||
<h2 align="center">
|
||||
<xsl:for-each select="/apirefs/index/chunks/chunk">
|
||||
<xsl:variable name="name" select="@name"/>
|
||||
<xsl:variable name="start" select="@start"/>
|
||||
<xsl:variable name="end" select="@end"/>
|
||||
<xsl:variable name="block" select="concat($start, '-', $end)"/>
|
||||
<a href="API{$name}.html"><xsl:value-of select="$block"/></a>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</h2>
|
||||
</xsl:template>
|
||||
<xsl:template match="chunk">
|
||||
<xsl:variable name="name" select="@name"/>
|
||||
<xsl:variable name="start" select="@start"/>
|
||||
<xsl:variable name="end" select="@end"/>
|
||||
<xsl:variable name="block" select="concat($start, '-', $end)"/>
|
||||
<xsl:variable name="target" select="/apirefs/index/chunk[@name = $name]"/>
|
||||
<xsl:variable name="title">API Alphabetic Index <xsl:value-of select="$block"/> for <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="API{$name}.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="intro">
|
||||
<div id="adjustments"/>
|
||||
<div id="pageHeader"/>
|
||||
<div id="content2">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="apichunks"/>
|
||||
<xsl:apply-templates mode="wordlist"
|
||||
select="$target/letter"/>
|
||||
<xsl:call-template name="apichunks"/>
|
||||
</div>
|
||||
</div>
|
||||
<xsl:call-template name="linkList2"/>
|
||||
<xsl:call-template name="bottom"/>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="index">
|
||||
<xsl:message>Generating API Index</xsl:message>
|
||||
<xsl:apply-templates select="chunks/chunk"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="apirefs">
|
||||
<xsl:message>Generating API Cross References</xsl:message>
|
||||
<xsl:apply-templates select="constructors"/>
|
||||
<xsl:apply-templates select="functions"/>
|
||||
<xsl:apply-templates select="alpha"/>
|
||||
<xsl:apply-templates select="files"/>
|
||||
<xsl:apply-templates select="index"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="/">
|
||||
<xsl:apply-templates select="$apirefs/apirefs"/>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user