[libvirt] [PATCH] Add documentation about migration.

Daniel P. Berrange berrange at redhat.com
Mon Oct 24 13:50:31 UTC 2011


From: "Daniel P. Berrange" <berrange at redhat.com>

This adds a page documenting many aspects of migration:

 - The types of migration (managed direct, p2p, unmanaged direct)
 - Data transports (native, tunnelled)
 - Migration URIs
 - Config file handling
 - Example scenarios

* libvirt.css: Rules for data tables and diagrams
* Makefile.am: Include extra png/fig files
* migration-managed-direct.fig, migration-managed-direct.png,
  migration-managed-direct.png, migration-managed-p2p.png,
  migration-native.fig, migration-native.png,
  migration-tunnel.fig, migration-tunnel.png,
  migration-unmanaged-direct.fig, migration-unmanaged-direct.png:
  Diagrams of migration
* migration.html.in, sitemap.html.in: New migration doc
---
 docs/Makefile.am                    |   14 +-
 docs/libvirt.css                    |   48 ++++
 docs/migration-managed-direct.fig   |   58 +++++
 docs/migration-managed-direct.png   |  Bin 0 -> 3901 bytes
 docs/migration-managed-p2p.fig      |   58 +++++
 docs/migration-managed-p2p.png      |  Bin 0 -> 3901 bytes
 docs/migration-native.fig           |   43 ++++
 docs/migration-native.png           |  Bin 0 -> 2173 bytes
 docs/migration-tunnel.fig           |   49 ++++
 docs/migration-tunnel.png           |  Bin 0 -> 2237 bytes
 docs/migration-unmanaged-direct.fig |   58 +++++
 docs/migration-unmanaged-direct.png |  Bin 0 -> 3951 bytes
 docs/migration.html.in              |  419 +++++++++++++++++++++++++++++++++--
 docs/sitemap.html.in                |    2 +-
 14 files changed, 730 insertions(+), 19 deletions(-)
 create mode 100644 docs/migration-managed-direct.fig
 create mode 100644 docs/migration-managed-direct.png
 create mode 100644 docs/migration-managed-p2p.fig
 create mode 100644 docs/migration-managed-p2p.png
 create mode 100644 docs/migration-native.fig
 create mode 100644 docs/migration-native.png
 create mode 100644 docs/migration-tunnel.fig
 create mode 100644 docs/migration-tunnel.png
 create mode 100644 docs/migration-unmanaged-direct.fig
 create mode 100644 docs/migration-unmanaged-direct.png

diff --git a/docs/Makefile.am b/docs/Makefile.am
index 0b8f226..5644fe2 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -60,7 +60,12 @@ png = \
   libvirt-driver-arch.png \
   libvirt-object-model.png \
   madeWith.png \
-  et.png
+  et.png \
+  migration-managed-direct.png \
+  migration-managed-p2p.png \
+  migration-native.png \
+  migration-tunnel.png \
+  migration-unmanaged-direct.png
 
 gif = \
   architecture.gif \
@@ -85,7 +90,12 @@ fig = \
   libvirt-net-physical.fig \
   libvirt-daemon-arch.fig \
   libvirt-driver-arch.fig \
-  libvirt-object-model.fig
+  libvirt-object-model.fig \
+  migration-managed-direct.fig \
+  migration-managed-p2p.fig \
+  migration-native.fig \
+  migration-tunnel.fig \
+  migration-unmanaged-direct.fig
 
 EXTRA_DIST=					\
   apibuild.py \
diff --git a/docs/libvirt.css b/docs/libvirt.css
index 6e54b73..5123ed6 100644
--- a/docs/libvirt.css
+++ b/docs/libvirt.css
@@ -364,3 +364,51 @@ span.since {
     font-style: italic;
     font-weight: bold;
 }
+
+img.diagram {
+    background: rgb(230,230,230);
+    border: 2px dotted rgb(178,178,178);
+    padding: 1em;
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.data th, table.data td {
+    padding: 0.3em;
+}
+
+table.data {
+    border-spacing: 0px;
+}
+
+table.data thead th {
+    background: rgb(178,178,178);
+    text-align: center;
+}
+
+table.data {
+    border: 1px solid black;
+    border-collapse: collapse;
+}
+
+table.data thead tr th {
+    border: 1px solid black;
+}
+
+table.data tr.head th {
+    border-left: 1px solid black;
+    border-right: 1px solid black;
+}
+
+table.data tbody td {
+    background: rgb(240,240,240);
+}
+table.data tbody td.y {
+    background: rgb(220,255,220);
+    text-align: center;
+}
+table.data tbody td.n {
+    background: rgb(255,220,220);
+    text-align: center;
+}
diff --git a/docs/migration-managed-direct.fig b/docs/migration-managed-direct.fig
new file mode 100644
index 0000000..59ae996
--- /dev/null
+++ b/docs/migration-managed-direct.fig
@@ -0,0 +1,58 @@
+#FIG 3.2  Produced by xfig version 3.2.5b
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2775 2400 3675 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
+4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
+-6
+6 5400 2400 6300 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
+4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
+	1 1 1.00 135.00 180.00
+	 4350 4275 4350 3600 3300 3600 3300 2850
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
+	1 1 1.00 135.00 180.00
+	 4800 4275 4800 3600 5775 3600 5775 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3225 4125 5850 4125 5850 6000 3225 6000 3225 4125
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 3375 5100 5700 5100 5700 5550 3375 5550 3375 5100
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
+	1 1 1.00 135.00 180.00
+	 3750 5100 3750 4500 4050 4500
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 4050 4275 5100 4275 5100 4725 4050 4725 4050 4275
+4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
+4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
+4 0 0 50 -1 16 12 0.0000 4 150 960 4725 5850 Client Host\001
+4 0 0 50 -1 16 12 0.0000 4 180 1500 3525 5400 management app\001
+4 0 0 50 -1 16 12 0.0000 4 150 735 4200 4575 libvirt.so\001
diff --git a/docs/migration-managed-direct.png b/docs/migration-managed-direct.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8fbb3aabfb710a343c49cce55316e0ad57834be
GIT binary patch
literal 3901
zcmcIn4K&kj|DWoSN?v-=+##j at y+}y%cB7Vv40#RB%*sOC8Y{D*5cS-<?as^OJ-1BA
zD2!oSD9UJsnYW?4OfxoZ&n#y1taG08KlgL)=Q;o9{LgvL`CXsuT-UkYf8X!t^Zh>X
z@^IO{^@pth0ARc81t)I+K&3)iPN=CWdyLwXM9NAf&f5h9AidM$DH~g2F9gN`0NWmX
zFDh1V8Fk9e&GD|_^P4BO0 at ZB}deuG81^_geu1;rt6UG-gQQ0+Z8&tiJH7*}Jvd?yP
zJW`eRQocSJx^u+vev}_-k#j6G;j_{H_vJ#FDj;iDAyN04>boaGS*Xdv+^u#St_{b0
zedrX}LVX$RfxNZr^LsmMuFZt`I^Iv^<%e`_K$jZekC;qIUdj=yC&X*M&g(<I7R730
zp?lvP?f&B9KR8$-aJxncLwlLqa_K+E*nXd=X7qocgB{M>4eS=NEYa%vj37>7n)>Za
zZ?r!-9-MbLeQ9oPOcG0u&Z#=e7($g8ErgMppj7dr6!y*aX4o)!@i%?=yoGsBRsI+X
zvJ*auH9BF!@SoMq_^8Oqr(T<tzl+XkIUh)*pv9E$Gi8sMWu|!9i{j}MYwdOUa+Q|n
z%-P)q0XO7hT3tzLtTJ6p(%W}|0{4sbIh|``H9x``%ps<U?Ab(k%nFlmIQ{+Kl7yQ3
z7QftT-#*<6)kpVx>VJZ;Ess`0`GN^WYls8aiW2TyYWXBrQEW0y$0u<MEPl2R+HsNb
z0)_75<!6Wr$ODss9D~`9dddUo-|VmF>9^IeV7a$(l+gR;3iSHeFTZvl_Ov?9yq$Zk
zR+KC6!JrV-sEH-WKdx?xr4#QBKU*Ny7PY~_lQ5vOqYv#gdoW_+Ry-U9u^Q({B6H-I
z0tp1fi6d3q_9yK#xQXycyIcf*<uMC<TO+ES=YXQyiXJh=x_p)Dc5Bp7-Hk{tjal7z
zZ*8 at 9V4`|E6;&JN8c06EY+s;8bKBh2Lt9D4ivcbM;;e`3Yd4zB^RYySit6dILeHsC
ziAG^2I!0IZ;+$nbDdmOUrHBPebRUng=u>Kr958F^OGXWwL!pUU&U?!s{g&opL at 5<u
z)6%(Y-FVrXU^)91Jd_xMfh<kOO?=Kt$1=~4L12LH+f7-d1}OE at Bc{X;y&yzSrWArn
zx+OJdjAeMoy5k6A=H!F4DCfC`*OnEYll7$de(14uMN0oRBUpS}v=J`-AzUHrdeg`Q
zSQndZI0IC<^Y3vc)>FRa!79_B_(OK4x<>bs_BF~lxicAcl{y2YTmV8AU0(zoW474O
z?vdq*uHgSe)BaD)UpZ#&@?Yk(L9JNbOjtwtB7WH={bAa<*$nvyMS?>c51{1?FvR^C
z9eimp)Ab_nNN+b&CZfM$g%Y79GwQlej2M~T?`W08M){j5m(s?w5I;lMavNjtQMt{p
zVi~;5xXN_eblS%}G{p&MjwWALgxm_wt!HnJUs<Q5B}UpdIKJ at z)^cs(ZFAKqaQ|@u
z_f6TrI=8VKxr%M*0T$&B%Bi{DJK;CNaCAbTDSgeJSsOi(PZJI at Gqnn7LX<+NbPp3-
z?jpXUc8V`^NQji)dj&iU#hXtt4cbXElvbMjVa1jT(*;mL&B2$7`(|M|Y3=+rStq3Q
zCOH}-Y at Gfr3bfCD*@b)+(0%VS?VEBtQ0wi?T%jXICrCPwsf7#aQoMN%8&*0!=$j;N
zq$G4+wYAx*hl(_sHV}<nRkTD;5Thr;ff at hPGpgRbRJG3`CH#g19Pv~loLv*IcPd(G
zq?#0R4T8vR43M`Hv#^n;AZq0i6UzaOc9nnQH(Nx{JV(~)pKY8|E3U;0%nJp2%RumL
zmi#MZ+GukmDM0M17{9B}97zj)mJ{G?Njp_YiV0^M*SfzJQT2l0^ttj9$<sm#`WGtg
z^lJt>&(2BUapb2Ci`C7e=SXnAPLBo3Z)L?&!m`U>VKy39(~8>G4xo1aBp^1qShau$
zqGC2uvuEJqJ`<V<l{EOWePcvTDaHjN5v+dY6@@TNeaTq{ob=PTHwMc??CX)f9-PFQ
zc8x0kt4F7Ett3gkgfd1=QOvZ6N1P~&X^YFN7Z7WqWwp|IK}TZi+Lhar29i(4e9L`e
zPdu^K)P3Zr4ZA-$j__*$*8YCjGnOA|copF~n)S=@P18+FG5C3^C5kmR-}@SNYWc#q
zLmT&yNw36jibV(p-)coRQW5v=<X<&fX{(zsq$vyn(u|O|TI2fCOINccsK?c2iNkd3
z5onMG^78m3wh31)3|6hbyY*#z+S41+{VWWI<>xYt_e2fNMxCRe2>};k_RmHgTVW8O
zO~+pin$;BDm7GM<d9}uvc^QF&hYxtw9Sr3IYJ}#;_!ZTO!b=cIWKuIR8H*|~b!^6v
z%3|lK0joMy#4%)oWKvoZS-tonY&C=K8v*G4TB`eUX;JoR%$;Q)XMZV*UyI=PBJvCH
z=oC<@V;=LNEX~Z;6Szn%VcF&Ob|8jSGE3La3?+CSGfdZVE`FZs6{u9j_ii9yImpY^
z5Ub^U=MD&{qNYE!*z1wn*G-lrS!4Hokxd1C3u~E(UVeAZ>TwwKlYYE%q0QQAM!VD9
zHdz<P*eW*R1v?g^uIs8O{aZ;;|0SH^BtP2_sXR!7P9agL`$=g8Z9tIo^)1(RgVrBk
z+oa at 00PMelFZ0!srh~UZ=ap(XvH>wDO={4g4dMNkI2mUR<TmHFeXQeiISe~l;+!3i
zxbe>%JrgUi_<hH6tII4$O1;tiqcm$jZsyD}m{pdDqI}JN^I$jK_NU9324d2B*>`rV
z<@#Z+B^%;qK6f@{HhV at tDx&di_iCnV2VKOo>hei^MN_u7TT1F7y5lkhxmrDPX@&9}
zO&|B(2-~y|=#J9LrRR%JKuyp6hNbe`&exUeIl*B8`7VZEEqmjqr6XPWZJe0yhnjmh
zZT#qnK#-c0$z7j2b7byenqklAlU#wYGPe*2-wD?%VUHqvHYj-sdY7<1P|qBIyN)@0
z-BcmOcqXz=rZSuSX7|F2vGzR)Kdr<=tX9SjAxG1-1pBS69P5l|cOCb49_{{osg`%Y
zaeWdQxYG$`Xx~O|Vu{W$)J|)VsHsnBTp#k~aWa(-y;Wi27qaKr=EJ$-zPft*F3l!f
zXeMFEK-65Wx0Qm40dG508L#=`M|?-I-UXYPKEBtAUB?dW(gXF-Z(#`CmkqCPkBYkF
z<53_u>{N4c^{*I-9q{EHGY}AR5a+OZN5>g^g#9m6Nh!96&0=*iautU&z|I3P3HO-9
zA`PW|eUBsm-{|PC5(iStzpUE(Lq at 0D8DRN=kK>0=VI4T}-{VWAK>i6E8gsMrlzV2e
zP$hW)%>+HIA~GNhC+$-T1GFxc94*X?3p_i=?&WHK7c$K%<7vhaTMT*8Q7v3sz>1{r
z$~=$C3)sHsK6al_^2PrB$<*JF10Nrjxe|<dFTzS|X87n_;Q-j`H2%<#iTqs at O?o8(
zFE5?5^v|G3XL9b*gmw2!QSF=z7tOQV_a9I8id-4Ha+ce;ERwe6d3gkw)|bwW#!Frx
z at 2hvm*0=I`<K*Zt+|P8eg&6HiJn2O28$xmFBj#uJVua63o>a=b)XI6XDIdRP+>AX^
z>gUF*K5T1Ra-zkfkKm-HjCY|am8_Oq4i_0d1Q-b$yPKr@)t|!34&JqbOQ`1|XQ}6F
zVYMsIOf;|ScB<yZ+8==}#-lElC)bDc80RVc#er=G^L)^(<S9j}{B=9?5(TAwdGi%s
zg+-(rfw{t2p2)IfQh(WvAHIm4KdXu#Imfvdpvs=aELDFunqbY)1ZVVD+Os>*0upJa
zS9RC$P>h7b_OS3TMZUSknXlgLhXtwWDvjv(CRkJD>MCQ*CEq0aJop~FDh~{Np01*f
z?f9|baR)*4)++S}*Gz(Tkn_ILlOV=@CIYbWpAwNwi>9K$ZnK2&9}IEUE`}-#u2%a0
zG~f?ei{8P?VWk&2Dr58%H!4>2TF0~VP0AtiX-lDf{+2E^j~z~6v2e&l<T-ST-u1NU
zwT~H*ORX{@JTTi(`t%9k at fQba)gWKT*^Q_0p--VWa;l!{N?cUXF&~Cr at RUEp38-S%
z^4A{szYJbJ<hYDsqrl1!cXP<_Y5Rf*8>hvBsd)<F|I361sfq4D6hzv<H%X6OcUPon
z6rF4WsevcRVBA;sDIamdu2YpTpaAA$8n-~zbFxvdBG~v%(S-H~LKte+7rnr5VZIvJ
zr@<ceN9rMY>;{7*wjO8}fYWnQlH4mUX}igmJm9CYnMXx)A;>RH(K6$XD at Gt-XXbr#
zj}TcwRNyP%`lgYol(mMC at Uh(i8rQ84XlXmYRIRI+r0xa*^<h>z>MP at 3rGf&jgi4mT
zY2!jE<E&p6v9{ay;uhGZ!<tWEz+_Z=-fr}m#7{wA&?zbkk1_BmD at dd&Na%uDp#&2r
z&M5p45ADBh>*1%X3$D8Mul(O-_4!uX#1uYT<?`<-=VJA*?lltbQD(aU*Yh4uBv5GT
F-vK=cL}vg1

literal 0
HcmV?d00001

diff --git a/docs/migration-managed-p2p.fig b/docs/migration-managed-p2p.fig
new file mode 100644
index 0000000..59ae996
--- /dev/null
+++ b/docs/migration-managed-p2p.fig
@@ -0,0 +1,58 @@
+#FIG 3.2  Produced by xfig version 3.2.5b
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2775 2400 3675 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
+4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
+-6
+6 5400 2400 6300 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
+4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
+	1 1 1.00 135.00 180.00
+	 4350 4275 4350 3600 3300 3600 3300 2850
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
+	1 1 1.00 135.00 180.00
+	 4800 4275 4800 3600 5775 3600 5775 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3225 4125 5850 4125 5850 6000 3225 6000 3225 4125
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 3375 5100 5700 5100 5700 5550 3375 5550 3375 5100
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
+	1 1 1.00 135.00 180.00
+	 3750 5100 3750 4500 4050 4500
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 4050 4275 5100 4275 5100 4725 4050 4725 4050 4275
+4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
+4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
+4 0 0 50 -1 16 12 0.0000 4 150 960 4725 5850 Client Host\001
+4 0 0 50 -1 16 12 0.0000 4 180 1500 3525 5400 management app\001
+4 0 0 50 -1 16 12 0.0000 4 150 735 4200 4575 libvirt.so\001
diff --git a/docs/migration-managed-p2p.png b/docs/migration-managed-p2p.png
new file mode 100644
index 0000000000000000000000000000000000000000..0532143fe78d9e9bb5b9e96fccf0325d4e554c54
GIT binary patch
literal 3901
zcmcIn3s92ly2f&wm3ir6xKguRoi1i-X5N;XWSSOgUQ<IvN>bBhC?$egUTZIwtV%KO
zxlGI(S}KYPq?VRwl!|ymZIu|JV6c%C!9z1=&g?yF?>T$U%%1tb=bP`F at BY8<^StkU
zZ%?-!+kV&v004HlpLg*A08}cJ<%GJLvd6e1S){B~;(gpe0Ma{sp0cqu?tD- at 0I>c3
z_o8C`mQk<l+>+o9KDT9Z8&JbmEpu at B7672hba!#~OPpBZL_e%)-=yY^ta1C;`Ovw$
z^Rb$=kMi~D at SP(@_oDq#OPph2iJy%Rye}8Z)BriV3yFGlYVV#3Wnrd^^S3%|xwagO
zjp0*ZON|w<C-T<r&+qMRxVDoP8+d<}mme~80Nv_<zsD3p%JL(@Mq+~2>%4yCYf+qL
z4!ZBn(Vj290YgJ20*`ByaJ09D9hd$~tljsC>c;;EI@;rWJis22D-!MQ&j{i)rg^}j
z^hU?i;~{y6GnVJ)$0c#(m`7Dd8N;X&<Hc}NGn6WRoXWnr(E=MGFa2%+U$C_3t;!!q
zL3Y8Xu*N4$83A*8SsxXT@~PM6<nLl0wVn$iQqW?`_nETC%rY~)>_zd+iS>^9e7Q>N
zbLQNhg1{T{aqaHpbXJ)jCi(5VAi>28^m*ND<266Q8O&j(sjO}?B6gKYIGpkRZ^=Tf
z{YzhNb?lgFgBqX*ybL};*j7g?p?txlqAk>sYfXvpE46x>t0*=dq2rUe1(v@!1n<1S
zc!5Iq^YXJq1?0i0AdcbOM}6gi3~mlI at C@2(Sg_pNI7-+(3k7;({MX-l4trUjX5P-d
zRx8St_hL{8YV_nX<bSSig{2cSN9q=dwMFf4 at DvQ_>f}p1%^r%Jyp;e)L98b at lBh@W
zOF;wz;>3|EZpYJ(S=?kqlzlD&zxsp)zO5PE!E;2>?L?26Vm-b}b%zaVxc){Im&UAa
z%3NQo9h|J*K}FSuy9bevFgq5hG2Hfx8ewfDlchj6LvhZ7jrAKX7Wr7BV at 35$S)tc-
zm_)NM8y%~sc46Ksu$1yb|5D^4C8nRpSn at 5kKn|L>_otvnETGUNZP$HekO3<TF`|?T
zux;&Hv1z*OL$I2A3m#4i#Xy#4;wL{p%D^(ujYD97p4-hiq(&(9(_^N at AH66<Po)-u
zNqQwUXG~;xr~2av6Xw+Y^k~=l#@ALAUQ-REgaPQW3`Od|c4JsVdyFwI;{jYD>weS3
z1K1RsZ#n~1x%01aHqJ}F_5K>uu=vBnYz at txWu0r33368o>MC^>NI4ILEV;i3JjQHw
znA<DM6J5doo2LEmn7?w&`sKgO>wwy at dfBkX@+JI=TgHR*vvXPU4~j&`b{;_66<~z>
zGdlXwU}hUdK2bg%W=zCD#VRFITV~vSj~F>RbHK?unT-lCS1zT4XCZ!pu;sQU;G=Te
z-^4O_nMsw|jM<E at MOdl}&;m`qtO&golH0)ElCZi#Nl%KhYjk=M at U8XQ;@g(0G2nsY
z0`8l#!3}Ox4{{CL*b6Mm9g<UXeRjcbgyZOhAT#>91G6?}GM^?KVrFX>(u635Q0X3~
zcHAX=XYDj!=9m~I&3pws48>baGYvaPGL&|@{6WRm3bRE}LCudZ75B`;AEkHj+htvl
z(wpQMjIe3u_h`_5hZQ&SRX|VXXWBRAcA&P~*||a|jBc=WFk2fJ+O2r=95$kKdeApX
z{Afwof?8XPbuSfZJYy&tzp7}BnIy(cMgX(^t9MMJXSr&>V`{_=M>yh{L^!uD-sn=a
z(MUC^<QfE#+Y~5oBj#YEPC?YmBPUk^o9rw9#&5BVnSG9|H*jv6S1+!`3oHr+`YS;2
zZI=8iWX5<)6e&>bu9&!Mz#L5vse2UYYDGI$NQ#YMo77%>Eu!iN!|C(oC6Z at _6!foD
z+UeH}be_G7!1Kt at otA4`#?F%9eBEA4l>h3gm4s!VzshVfsiqaRuOCG1`dL71cC&5;
z4 at Spsraqj7i~CJ!B2 at Cw%Z|;FHKiCgh(xgVl~)wXF!Lkl7;-XB-`*S|4|Qlj`gwAa
zYC1Hl0<IpN$+eaw_Yuk%HAS&AA|7$FEVey9uR%bpg_hMy7X+P2ZR=NVPZ>%+neeUl
zi at or~TC<CzM{U^yA at PLY0<jMF!s}T6q>(j*`&iDeBR9=dmt*k at R4Wu~e4+0(?9|Hn
zZ-+MTC6iu>-xP}w48HZMY_uZ&-O0adw$av9F{Eh>0 at 8wzx7pzOGfLMUN>ER#&67sx
zHlxsBP2}Z?DQq*YS{S0%aCh6wj`U|YVg^_k49nkb1n-3!o{K(9K@$Sc#~zrAKDNpr
zK%0-h8Zxgbx+^(}r1NS`FbgsQ2M-_guKzKN52z7Z9OGA1CkZb>BvHvN#1t&5z|5%y
zLn at 0~pa!n#RuRXMiIOR4NmTXHhw!y5x?d!q=WD6n%jG56r}2v{hj at oe(fnEjzYmdL
zfJdi-(wy>`4`k`)c3!|GY6;6ex33d1tdd>2er7n)`<PLNwrlb8H18m#D!%ss0n0(&
z?nYQ`*E at GWKoxa^>7_o;wEiBlB-sYL|BGxo_*;1EWX#IDv(`_-p`Q#AlnZUqQ8(U`
z;h}0%9BZdg#S3;WMqk%cQTn%%p#DQR%Sox*6s0^!qi!Klsr$+41RX%I>-DYI^@2B^
zTvJu at A^`Ru!I$~!$ul9_p$kg29NmN%k|sCm(uVQ=%bYA{L%HqQ?H}v;Tn at utmNakA
zBX0gPN6*FyEdSWK(&jeDky3B8{3OjefSWyY3}&4pq9|YUUp&}Nj{_MprlFX$QTCl3
zYq|cIYbi#!+0R|g*)3i%kBex0yM0<2I>8t4tonQsU(x)~$0IfE5Z!5of?TT}y|hYs
zj;2reY=)`s2VO*J=hE}VC!l6$f5%e!?dR&t^<Chwz<f8OuU35tGt$xS{B}-k&jYQ!
zoOXUpWDrPQ%H(d$pE)xBAl;~U>}jq*SeaW0gztjum$1i>y_=N01ieex7;In;!rjLm
zzp7RUF<wcmlWELm|G9neVyr`N;?JuI5bM?PL&&iVZNUK>Yo~f++FhpuT}OL9U#jKZ
zYucDX2JLb|89B6*n^~eW4E58RBx>3-8rPS6d4f!(LvK}>`iJg4w&ifHxWB%^p<AmN
z7nV&JHWam#>u;lAV!_)FRVHY?_zB-xtbg8iwx934YTvmNyL?|G>{~cO?`7lb+hd|`
z`9w4b4m;IST>TqHVh?<I#~cKN{D^a0yQAxhJ;MGcs-zU#!{%{%7`ck$8DQ7J*u+dG
zu}D*CU*F@%|2H}XsKkTR^DnFQ{gBn=aRyj^@Z-ecQ&>k%!uR-6DUg4{#-`kddCEO=
zSg4XbfL5Zub`cp6j+6E)g#lWhMvf8Y#Roahv-`L at --S%8%4CKy%oamlbXE)37qKGg
zyE3n%@&dLWx}V)Ilzee`e=_ZN<lx5#W$pwM-iz?knpr+NS2zf^K8-&#Y$|^jO_N?p
z#LG+Ptpc(r(%DCuG+}+F8LESm<)-Dl<G}G0 at 2J)BE6&`e6_K<(&)YN5tf6#%EJ5-D
zc~7G!uAz<3n;^%8<9?xwEyZX*;z<``|1gTv5V<hB4<oEIeOf8=RxjttrhWZeaI+3b
zslNxW`mmi@$%$6aeu9g-GTw!zR<c at eIbLA+5?~~3+#ZtN*8mFZVaV=PTw((cIY&KL
z3#(nNGu67T*QJ&h=WqnJlz_TWp3)H7Ym%o35C^pzF7QEfl4lgD^4IOkOA?g!=Pgut
z7Z#Cj1mz0ncp|HkDT5Uce#8=X!C4JIdX|$JsK%bcELVRwnh>q9L|61zTHPIJ0f{u*
zr?z`!I99 at 8ds+sRBH!HNEL3mt$AZ-Llt%PNGpxCCZH+PRmTww!4xGuZ$^!$RXQ*gk
zJAZ0?(n%1#wNCrNJ)58t?7DyKB#3d3i2!W=heRaXvbiXz$2>9O2P2$~n~}<*yS2eT
z4EVdOMgPaj5v3P7DP#0h4=PslTGy-VP3j@?X)B>a{?=}F&z&w{v2fT_<TZSX-u<lk
zwXZpmORX{{+&AA;`s^v+=~qW-)ev9T)q|(-rB9<ca;m=CYJ7C?F<*v$$aDb11*l@*
z`q$oze;K-b$Y}+`MuC+d?&h%3vyMd(HeQ<rQ}+_W|Cb33(~>R%Q4nb(-!vm`<Dw!}
zv*=_qNF6*$2IIc6Px*=ycb}?+0R=E$v-m}-zKg9!6~WejnkIBO7|Kw$x!?_c3-i;&
zJ`3?|IMM*gV>cQmv-Lr90Gz&ylH^`-Njprp<^eyI%|0%g4 at G`yj**#kUNHs%yRz?D
zc!tUfqJv%mH&jQbQ`Z|qBgXdxYF at WFsIBArQmwvXin<2`G=N#_YOGFpmkJ8B6DwIh
zW=)Hw3}^owVr`G#g{?5v!&*;az!X$R-X8S0#9u*Q)GaECh&A*rD at dX$Na%t&p#&2z
z&MN$n03En)=jpGf2d=vI&-~wQ?fEv^<TU=F%H=;&&&C;C-DfP^tIT!*?&myRNT9H^
F{|0-BM8N<6

literal 0
HcmV?d00001

diff --git a/docs/migration-native.fig b/docs/migration-native.fig
new file mode 100644
index 0000000..0b4ac68
--- /dev/null
+++ b/docs/migration-native.fig
@@ -0,0 +1,43 @@
+#FIG 3.2  Produced by xfig version 3.2.5b
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2775 2400 3675 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
+4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
+-6
+6 5400 2400 6300 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
+4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
+-6
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 1 0 4
+	1 1 1.00 135.00 180.00
+	 3375 1350 3375 825 5700 825 5700 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
+4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
+4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
+4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
diff --git a/docs/migration-native.png b/docs/migration-native.png
new file mode 100644
index 0000000000000000000000000000000000000000..bf35cf185b289d6c66c6797ffb0a41410d7c81b6
GIT binary patch
literal 2173
zcmb`Jdr;DA8pnTjI!80LJe^7_x~%Qmnt4e at 1=JEl-4s1uD at 9XM(!@+q)9|uMw-f1U
zCL!@QW|4wogi)est0kp*$-97;6Cxlgc`F6QrE_NXuQNNdGyBK;ndke?JkLDOJoBCR
zz2lGcG}Pat4*-Cnx0go%0O(X`W0KwvT7EQX`zCa70iNyvvumGRE4Czgoy7sb);r&h
zj^q1|8ttVn-rM(-u2A2^z}eO%DL5Sf^tO3>oD8}um>s>8Tm%7r at b7<b(P&-gHN0Cm
zp^*jCkL0B972{%$V-pN^d8vLiK+3qxO*x?|^lspDd}OLl;QoBi%hu0sF%{Q&IrohL
z1j32&R<?&k0=6T7ga12URa-Xz!+qj;nG`mbf_nDS=J+NfTk{K>ji2}j2VZvloLFMY
zCq+yIV>Jvqovs`>jpzz#84q`2<UO9flCT|=345AXp}ASkjiwq6m%NVpd(`F}n at z45
z{Dn6}n at uN7bhHXd@#`pj1UJ!1ifb~`bHd^`7q!Yt5)p)uRb>#F-Oe5Y<9(FyqTOQ@
zkSVVfNez?F1(Bg-T~Gyh<18WeTSegay8nf*uig5Y#QMb+>AK(D1Qk0|j}gK?6=9_h
zVrmzN+q2d!N4JGS!E%T6bOC3eC2<P5JpBQj9n!EdY!gq74S8!4Mq?`83KN7Jx+3Fi
zuG34)YXwi0YGqm7tP50Wm+uSNm0n02>{N3Dd60(Ar;^3gGRk7#jb?tv*ny<I=d5Pm
z)uB6L;Ckb_)#0(SdFKMVS|8lFbbrhU0|poR)s_jq1m}15f1!}giT)`l>9zwP+5FX|
zvNN?2BU60ARUs#sG|z8R*SRq%f;Fo$Qwhe<wk;B~RicD<SUR(vq7U0 at o1&O!uZ#Sf
zdRc`K2J{guytQO{;HY4YJW}2u*oUZ!_W2%;8fq?$%-9~V at _5LwW|8!KCb*O^wo)mt
zX6G4}Nq!%^8BB1CB?e)OX-98y;c!utQkU}nK+zt#y|3NXX95nWc<vnZLUstbUQ(#v
z&RXs&w0iZ4WePP~9YM#}(d5i1h5cy5AS0BsT31?b`fKtpefFbm<*`)tK4_R%el2J$
z4<zGx?!>h}_e}3fUSbtek6+Pg%^a<Y;63lWWVS(=O|g+$29|z&(4Ajn4tn<dI;{it
z)gZTCLAB@(IvepZZeM!B!jP12?uMQ$jlxqhmg(TgtfhmbRM&=wd!lJE<Sf8B<#nDD
z`(YsYn8X|2myGhvoXDPJd7E#Mm)<3CTfR3avxRWsJV-_7Q;o%CwI at fN#_qr%C>A|!
ztKzhy9RuxlDW4|nDlQF+?JCl$L(}3HU+R}{2pesFL{OmM7B7>y#j at RqrXr&p$_ at me
zXZFoyf66mUHKP(o-)1(nK$0gp$qU#OWiLZUj-|b{{>xgOb%+PA7cs}T2LUa50MYpW
z!={<*3cW+3CQ{}&v}d|Pb=#)b37=S*KP_H<Nc-*&>-`y7NbWV*`d)N(G>I`}H#wpb
z{VPwK{D at AUjT}0 at tm0s2&-Z&0jk^mlcd<eZ<mf$HP5e9gYPm$ak8WwV+{FKYF at jWj
zY^qt>w`)}#liRi7Hc-ir(4965yU}chj;zSKlWW{E6PH()pmHn$P1X9{d%;v#w5_a%
zlUQ^Gm#$Fp!5y>G=BFtRzU=AsE|lvxOJEi at PUQ2^Aw{7FoEhT^uGPwp9~}dRmSy4;
zRCbvQ2dl0y&Q-l*Y^m5*>~5+!d?M4sgmqe+DE!iJMT#l*?IU!LC~Y00^7b#^cd5_$
z4bdA;AhGlh5&UjVc3Zn_Jtm!k>oFtTGbdj}^>eU0-B;#u1OKo|{Z2HvS3D?smqx^c
z3pH3OEuKo7RyS!IomOjxV1#qA7hT|(N{Mn+)wgjnQ#2M@;C5}<4y|yeXN!70t+-Sx
zqQ8UhB6=8vUYj2-F#7CY&xtsRo80M?*39J(;D?gl4B*ph at -e*ppDL>&ea%<HtY^*$
zw#~8p2EzwlO~-SSAEM@}VLKP40T&I|ORZ)tYw3mOhI+(dfw0KXh(o=2_bhP<BRj|J
zu`6d^l%<@pAbGhIib-7T?kx!#^DSw<pM2XfB~ZXF61ELGq~r`9Ug_cX-nPyb727AJ
z9=x}V!z=}3zUJS(oY6V%?+VFC-67~VOpxFt+yzE*`^P}%6eo at uPEKoNeTCMo2Zi+E
z`Q&c<(RrUf6oVkKN3E^|HHRXl1(XgyUq0xg8*`+#s?)lO%3M4D+~<8&)EJpftP^+K
zJ#rI)T16hqo+8fn6hP)~09{|I$A!J2sG96z5CR^##ZB6Bg9n|*#~?Lqsnk)vP7alZ
zODrH0n)V$tRawdpP1El*S5i$RTU@^Ut)u&&Z7s5qwNE{SxUBoFqTi<2SQ2j>b`@0#
z6oWigFQVz=P<m~~sf||`saBcb2RAWsw;me at sC@p)8(F(Ib>rb)gv92V2tjp3HL&?(
zmtEJL><wHNKA>f#xeaTdv-<gqn<^XmN0j+(Djp_tK%j{~z40owh|&DwT6}5JOuYl{
zF1mJPabddZD-;}H7Y$)9;&fVBQxUIUFO!yC0_}bdQ!}2di+iy&u+q=#Ac<()*x0E~
zga8pp6CLe~taadjIKiM>r14vI<y<S`cG1N*Pu6sEe`5Qx$|gT(e+z*3DWnI}{rvTR
E1G_vhcmMzZ

literal 0
HcmV?d00001

diff --git a/docs/migration-tunnel.fig b/docs/migration-tunnel.fig
new file mode 100644
index 0000000..00f1f58
--- /dev/null
+++ b/docs/migration-tunnel.fig
@@ -0,0 +1,49 @@
+#FIG 3.2  Produced by xfig version 3.2.5b
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2775 2400 3675 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
+4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
+-6
+6 5400 2400 6300 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
+4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
+-6
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 135.00 180.00
+	 3375 1950 3375 2400
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 1 0 4
+	1 1 1.00 135.00 180.00
+	 3375 2850 3375 3375 5700 3375 5700 2850
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 135.00 180.00
+	 5700 2400 5700 1950
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
+4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
+4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
diff --git a/docs/migration-tunnel.png b/docs/migration-tunnel.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f186d3e9f487ee73c09d09c03ed9e0a7402751d
GIT binary patch
literal 2237
zcmb7Gdr;Eb7RJhaq?Wfl`OH$AvWKtKG+!q*$xP{}MVd%TiZ4=Aj|Y6#P+F1b%`AN6
zEdn7G!xDTUWhGrnQGB4HrkP+qD?t)d?$6GgKkm$(Gjspg-|V$!@3q#fy}obu%`<*r
zO?7>B5D28{ebUn(1X3abdz|WK0K0YD)(xd3f3Q1<)@k?|Fw_!G1|@+&TW+o|rKA7m
zRs&9zWN+USDnfN#4MzhJx3mTXQiXVX9uNFuXl^9-pOyPTo6kI$KK#)nv7i&L=l^2P
zDF*j2;9eth`{J)xA!qImq`*Mg5V_hOtS-^>qfI02c7H4V1)A0`$_mGob!+dOHmk;N
zzjm at j9D`ajuH29f+3p2WH3e<^Z%iNN at s-)1!{0P)k<SMfIThu^c8Tf=d~S3ztDcbV
z&HF_(AkbabF^jzLVl7bECQz&D-(&WI7Lgq7-eY at L#?b}e*Gr3=cfo&;6z+`}taP?+
zb7R)cjK>Jc&J`9AAtQL8W0)FRHYno7$ncuP(#6NOtQn_IMN88dC<FgfP4RC?>(^ic
z*5yf-Y_^#<Y#(u<H=-DWY7vx8_YI<24#Al#jir#C3SmDt^Cc>(q1J?ZYtGUDk&b${
zX5%5Vq?V>c1j`*|`?;Z$dKksGA5>Y(G=qRq)J-mD>A9sRUn1h^X;Ccs`4Z#U36$^#
zIXbhtsbaN0G<vbg at W@k{eldCZIkQWV7Dcd2`vr_MD=Lau_}0sV>$gLP>;uwLz=b)n
z^#LroXGs?F_bJ+_7SZ3Dd~FX&BK}%u at CXY*k9NgA{H=)99>6m&wku2NXN(8U2iA1P
zEnavnvo?M5MPv)hqBz;UnQOe9K#;dk3;a6K35YtBlfy_|$~#wR5owa3-cA?5Y+wm*
zQAZd?(<}}@%C`p=8T{nW$}MY-*ly&Pf3)?LiOxKKpOH6rxNwE370<Dkj1q4FttUDo
z9Wlbwz66J><1IjP*FoTsKQ!(Y6>Zs*Y)-Nu*~*)1Pj@!V03|H%aTLFjm8Y>;+*&Al
z=@7Sq*)dRSPI4=ceale0%o*7gQsde$ni2P}1}m0*m>p%k&y$)0-#<FV&kD^VkPNQG
zH4qPo&Ic_WfT)i1P&Dn36rrRXzNWdSS-;Av5viLIw%%^|(0sX}7trIzu^$tN_A7PY
zdiN2U=_tVQ-I{1w4P{0zraDKO;jrC0%sW>9 at EZE@y7gUZkJ6XKzaK)k*kAI#y2AB-
zuc#fSJ5!+TCb-QbpSdgZODC}4q6*uwiVU>rkh9pvSH;lP#QMN-U8UW)Y$X2HjkT?R
zMRs`G^`ew|466+c{2xmcRjl at I3P2s;oX?$fT;9|QT|L`H%2w%=8H8Wjlx?*EV8u&l
z!uwo!o7N$LtYk$6hXc4aEF7kAD5^h6hsy(DwcXW!MzK=gfYokQ`*l6 at AEKyt6jg`f
znvIS5m1}L>&~hJ&OOtCTJ+ty|Yp#lYo-VPi#&u{Jkso~wh_FuL|AoTBN)DIp+k+)X
z+p|0K8w5$pPSd8Xx!YP--~t=z4+g6GVlNo0y(mw+jS{X69z+$3ARZR at t%sp*?9ArO
z)0}L1u2pz)JbkU{A%n88aCAzp2)KipMgPn78}0jtcLPVw;o*p?@8 at P}<CdATM*Td?
zJ9eZU#bmTgzpd{{^XrBD8rdv6Yc&;JUAjo-H6<@A?prTs#kpMQ74?DrW at V4d^Xm%=
z`BSUrB*7>`$YASRQ}F4<R+zCJ?dSI?tyc at vPZct1+F%QbqEdL$Qrc<X2SjkjC5Yd}
z`U0DsA8dVdty{<*(;UJ4^(C<gf$I!)&-k=$#NSbDf&DU5lr&F^stSp1cQPX-%aNh6
zJd{n~Xmt(yNxH&v`*2><;cDdc1Uloaf&q0qvUChA#b1!W<BOnWzB>^bj$-)hd4T>S
zsX7Q`dvn_6jsoP^@apU?BtSK%*-ZNp*vv#wxhYAaKi60Bf}Ix58Olt+r__F}YLg;+
zq&b7D_s*8Dz}?Qd$4)I=i9sr=im3wq#;n_P!PA4D1V4&pbJEh*gkDJ`J3d$l?c=h0
z;AP7X6;&|r)k^BjR=(mgg?gJWvbb!JR!!A>vG-L at XeI9Z^h$^KMx+Y=yj!XlTzYdY
zQJQ}7)MwssWJ6Zm8eQQUfS1A#iib&sp^7CqGOE)-<NfO*;jq{Ukh@*uFVUie0>@cM
zk)=aqaudSqLx?d?Zs@@YYF`al9SwxrrN&L=t|f9Yhf$f*!DL5qev%d-xa5Aa*S-Z@
zh`i@&#3mg?`p6A0*x7b1yElVjpSuXhXxBlV_JRdg4-{6N6=LY+0as&xdUKuS^tF&*
zu2V1mTJjC;Gd8dH6yzgGeO4i79a(v5y25!I7PwC`kTYwnqQ8aMu>AJXGGA_%Lq&Jk
z9ZZ>B?0+ at msXR8j`zhD}DDAh5z6v?VSD<%q!b>_FmI0qK;+ikwq}CNw$2Pj47=y19
zcjH;-%#o`>GYBs*EOy8HZl}mk54uh9de;dvIELhG5{H;KWz3WmJZfx?l5H7m+a<h`
zI5d#7q=BXKoFoGUVac)*D>=;ygUM(vrnexgYKDmHV4)i=gZFImG4vslx3KksJktW>
zl5SK!B;wIL(&5HEDKN=MGAO;&YJ--s&Q+ at oo3;bGfz?hR6y$en|0yAeOpUT2cO$w>
z-(Iciofe)5^2Gl8vopuf!{Xa05D9_2(NEK4o7c;69A at An=Kv^A!z_TMs|V--=%*_D
yA9zvC&8gF5vVy1tXimLYD_$@-t~~a9P5F7o2^}4R@^Rp|0rEcK=Sg$Fc<n#`>0KrO

literal 0
HcmV?d00001

diff --git a/docs/migration-unmanaged-direct.fig b/docs/migration-unmanaged-direct.fig
new file mode 100644
index 0000000..d4dee04
--- /dev/null
+++ b/docs/migration-unmanaged-direct.fig
@@ -0,0 +1,58 @@
+#FIG 3.2  Produced by xfig version 3.2.5b
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2775 2400 3675 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
+4 0 0 50 -1 16 12 0.0000 4 150 630 2925 2700 HV Ctrl\001
+-6
+6 5400 2400 6300 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
+4 0 0 50 -1 16 12 0.0000 4 150 630 5550 2700 HV Ctrl\001
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
+	1 1 1.00 135.00 180.00
+	 4350 4275 4350 3600 3300 3600 3300 2850
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3225 4125 5850 4125 5850 6000 3225 6000 3225 4125
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 3375 5100 5700 5100 5700 5550 3375 5550 3375 5100
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
+	1 1 1.00 135.00 180.00
+	 3750 5100 3750 4500 4050 4500
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 4050 4275 5100 4275 5100 4725 4050 4725 4050 4275
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 135.00 180.00
+	 3675 2625 5400 2625
+4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
+4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
+4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
+4 0 0 50 -1 16 12 0.0000 4 150 960 4725 5850 Client Host\001
+4 0 0 50 -1 16 12 0.0000 4 180 1500 3525 5400 management app\001
+4 0 0 50 -1 16 12 0.0000 4 150 735 4200 4575 libvirt.so\001
diff --git a/docs/migration-unmanaged-direct.png b/docs/migration-unmanaged-direct.png
new file mode 100644
index 0000000000000000000000000000000000000000..d49cd0d0b16957193504eb68b909da8688a9ad60
GIT binary patch
literal 3951
zcmcInX;c%~l8$I2TOeq+jV+4|J`rpbMAi^c(V&b#WRbCf#7JYBCF}u`5Ku(GCM+$h
z2t-7KECvG@)&P=jkOYY>OMn;_A#4GH1PEaXFV37f=goBYnIG at XkNe$w>zw*=Z&iI?
z)dQHb15oKZB>(^bymI-XD*&*kRJKkj$jdBx&4d-%wkN{X;R1ltt2rmTD286X5di=w
zKlrltSah>q%8dIXuQ*-W&sEY;u~L`U#!vwOwLMoZo_CKKS>y#itT2|7hn*RyoF&}9
z^pMa9obD>JGyy8e{T%A-!J)qdsbs_+JE|32 at 3j{|`nrHT_fkH6DysRbK%`w;TU$C-
zHM(c_tW)1Aose~}Q0ptJRn>HCdQ{JDR|R0aFHs%Pp#b<tjGK1ea2nf<S=aj6bbwD>
zo6yh{rT=1|^m~2PvqmuQ(R_I4<`ZOO4<Z$5{l!s1 at BhG7FmZ&29-$S*LK2Ow-wol}
zxs6>}=$U at M%FRTObo+ZBH3zOawz$UD;BO8?-G%;bxEYgO%A~Xg*^l8>Y54{fXiR?c
zBWKID=_6smKC}v#F|nA`vS4&X7#;k$#fWL`l=Dt(-50mE<ZJ7K&=&has!wfm2Sw65
z-1m{#OVi(Yxg5FB5b_FFP{Ns6DCGB^6-NYL%X>L*TDNVp+h3E>geK><)!FJMPDeFM
z7!Kggot?$%1_WUxUkBXj=IF$wsR@<>;=NDnh#q^J8nV9|q3uM_V7s<w-#s)<h2RcE
z2x>3{rer2*<rmt!{u?}P*}wJHAqb!H5vJCW*DDz(gc@#dK)%}|>4&sThCbWEeHuJp
z<3V7CP12KUM_;2Ga!nUKg*MX&;23K)vml2NiSdknk;)bCjGyHPx<QI40(pz;j{czy
zf`L<8wM{)Q+3v9P95AY3JcWBZ2%L?|kUTNF8m$tTJlBe8+nh2Xu?~N?r##sb*!OZF
zV4BLN*52RVtmJX2Ksu)Sma`A-1-p5HjwUBv{n#D~M~zh5Vtc?)sSs6}W`!!)B$DIe
zs|s7*%xj$;n{M>e=rIbcuyw;oE|yYfXa+N<>s_#&Z><=!-){|+rAszH+%q28Sh!V@
z`l##%Zcli?y~VKGCS|7r=d+s0m>YPX<*^9vR9514QEGTY2T+AGt5t+-!*!XExRonI
zW1 at y#bJ@>YyWhW_t`qO&lYX64esDjBn2t;hgpM^Jistg|JQQ|>`QJi2W<$A94Mn}K
z?X`}#wR3<COXR*g#&Uqa#`Z3w&4UNlND#}XR%(YAwxlQL!)fSyJM&qK3BFUukdZX~
z?&5M=PdxMV`pGpb9Y*ArtOh~<HMl`lO4mya-LzgOgxGU+7Bdv|_9u4&w at P<D$Eft}
zIZ6ba)A%D2%BiOp_#Ez+%GnV~hXfKjsAH!L%{~5nby<3n^uTvRmZS0U@%Syhj+FYj
zrlpB?!f~A;!q`}R0U3M3_X<{X_s8j?wAVZ8$Vj9~ryVN8;5k{)WY?!khf9lD1}qk;
zg53+ViaSBq%U{U2`Z=g6t1{W_7O at mn;)|+_V8TCaKx#R#1ETtOaP~9sh&09c)?}ye
zLOW3Rtikg)_u?LS5B3ima)#>{WN$joh706%J7erN+#FNcF`{9?NT=`8;b?`DMqV(*
zMtCzg!!)Gy`Q6pDExoRZg5SIO_u_&sPYn-0E6ETP4rN;?4e6*ugW{IiMHKByb{kmv
zn{(?9iRzDw(wvLJro}5_tCgWRNCr5k_u$2KhgNf<tD{<d!nD>@N-;rE=;1Id>H03K
zgwsrUJg_k}cZ(=ConHCA?$qS4P?NP7rHuE<sI{X6R?d at Njy$4<uLtOG>VBCRGZ&z$
z>nMUH at I~z{BLw(^yms at GrrY{H;N3E&?TUGMS=e4iYg~LhN=vlfB_^b6Owu`du1%z=
zYC1U7AKdVp^^G5(w$tB^Ie8{IH_9cuQl$?^hJ=z^w|PL4Vc_iAYXf+$#}Y`gRJ4*B
z6|DQ!dM0;>8hATmq#}INY;gdbCm}sQSss_`E;&Dc3U1{CDfF}(ER~gBRXK3gF+nZI
zBR;h`?)ag0u$+HY5#GUTZD~F1cVnNOyUfvRarCQ<n&#`#Jo0EIi-|Pr$5$k)c3uCm
zT)5TE2G?zSdom)o2HD0usY;(#W!##~ZPUHkQ*9;(J>ae-4$wi|sFvg-Vl8|)7`1N?
zks!(esmftkdp at j!RA!dT<iD(p2tgV(=kc==c+N^K+}fxRCofFhdRUYO5He5bO;h%=
z_{1+Vlb~1v3yEkjdb{EN*D-mU`|uS!Jj&}eYReK#WF~5FW!h&%>nN3?CR6PvpYxqm
zBbpzxb4}K<tZ_`K-15><L;Ml9#ZfqVK!2p`5+hPF0+U>-t4YqTE}v5KihEykAcFB?
zNq&%}frEW|m;;eHPIQ$7zknZjg#iqVnHX|QsZqikUTXpP*JMI0=22?M%@dxZL!ggC
z_-dk2`ny{G;(!||x~h!kkTIte|L6lyg;YN!pHwN#a4;QQznXUOCAvD7mhta-k1`~A
zj1*CK8e3ny9~oI_oDi)oDt6l6-lh0O>bm9()pm6Lvt%3K)t7|||HTs<i6pYgF^2Kh
zeYA22SDzqRTuJ*dr8=(sq8+S3-g{0X>?8bI-!?vyX!g~@sP<uUsj9wx#GT?l=<h#j
z at jrhaHCiQv7%hjO6yEg08hF8PegHu90H;2686FjE!ClU&sjm{hFrAEr{y(sR{9a6d
z9XgPvlaR(P`50V()5yCo!y^>!43)PZX_AcNW(xk41DC^EQNJ22eAdbd*%?h0I_MJ5
z>BTm|lA?{T?*9w2|5f)sXvq$r?X%m4=91A|55EDpfm))vrcM6(tMziAo2V>1$OZ(R
zHG+7G;jWJHxGQL`R55p3`aY7s?Mp8WZz`!lESBFjPB^VXwpL({v1(WxR^|zWi^02j
zAphuhO3h8Sat~OVecGq6bMo}vsr513EIQcdf`Zszv>S0W+i&V<iitUzJ31D~r9Ch)
zH|cy+lay=vwXqKevhN3}MVqZhXJHdzQn7O}O7zSVqPOAfW!7ra`8&s#C at yw!^p6~|
z3Li=YE$Lc%6pyNVj=NkAeQS&z4BY&6IDV<IO7W?6X0eagNB}l;qnL_pQV!X^r_yJn
zSW0C#{}>YxkWUdb;U{%2Y>4nXho at Eha_sSI#=N1>o2|4T^Hm{wmOrum)vQ!jGQCwZ
z%pln`^ka%Z8|Q(wvPxuvdN?I3s1wyXcZ=0=(2%9Wbl1V_GU0am=>)Me*Yr?$b(}mz
zFHyZ?_84-N&vn=Mob%D?Ph!#Dg_YY|M&;;??@d(i`J`OE%=^;_|Ap at TQ3=0T#=8t}
zIx0+j%^I)WY^^^4g8p>bQmhCZV;gJz at Ba0_Yi6Me?R9cbu|lg){6w10h25a7WRT5W
z<PNTN)w<AY7jz+_nP)?pcxt1X;)Dm7bRK`+FYA&ceZ=oi&Nfl}3&>Xtcx46%9Yej&
zp<gvfy`HUkGu5o3+7>FirLJ(hQM4+{9)rLtTYeya2Dh#qYs!cWI&ML+vRN_h4%hQB
z at 9_o3`amV4{jv6bJ&!_`P;gOWSqFYr>^%t6B9GpyUOImyp>er$EGC~)Xl{`ysiJSw
zm;RP58emnjGz+TX*HwRM6$*jT5CjL~L=0O;!CiZ6t#fqGTqk9JVAx=mf%NEp?T1L~
zRifoHo7e%`;!}NVcF}3EGqd=j!h|#n5&xW1Pb+L(GY}Yi*jXxbh%uEP1G^zV$3j~;
zv5lWcpK at M#SOp69;-Ih2>v at l5zlv&YDucCoo}SEs##e?<Q<68EU|2}NJOl)N_2e3x
z;nsMKaLCb3lmkg!q1zx@$yvz^_#CgwsI0Ynd>Hp4d6_w0fKzMDIif*n`E0iVDP8$Q
z7zVVRLGaqucrX~dc>sj~vtb0L7fk?nA-Mf!k(hZz0|eDHC(_&z at m8BWzX<#_--$Ie
z<{-3ZLSDWV-b#JalDqN_u at 9rKg@eu>CLq}g5WQB?5sm*rSsRx1QKscWJo~CF at 46I@
z-GLnbLc4opZ1D$7Q1j=~6m>twkI)DkZu9)C)3g{RsPrWDHMK_UeOy7$@-oQmU0a#g
z6p8Gw-SMLCH#g%>=4hXO?gL}FLuWs%k)Whaw>gYjDVn?GvV(J+lfqT++3*UAnL}ri
zbL$7rs6*R(=}&ci at 1E^{tF}|@8sO?E3t`{U7s(6ZjaDi1#)-de<tN{S$4n-_=SoS6
zrP&|)O6ox!go5o|O>@7W?t=;_0@=XBu<`Y?Q7&+m4Lq;P^Q>0ks!uhOd|8^6LK%ak
z#6a}MPn<V9o_q~EY0rzmUBWI_v?Q%9)J}s8L)zb--`Am_8Z<xhz7Y1nM5>rxen$Mz
zzD&@Ryd0jUfZT`pw at ypkBB}zV?z?^PKk&Ps8MsG$m^ap*p)aS7+!yp7%w%}!CcXhL
zBqit~jxa?=ig!J6Mr&tS6OEegd|o6bf8IcsI6i*2U%bP3<u#m{XOH0TvXInrESahC
z`1ZouX6>|JZW~AFlmj%2?(@M;Ha|}HUCdY__nH1l!+wV?p(;_(LWgcZ&u0WY<r^pH
UQ*9I3d<?j9$@wDX!p(%g14`InzyJUM

literal 0
HcmV?d00001

diff --git a/docs/migration.html.in b/docs/migration.html.in
index ee72b00..4a16162 100644
--- a/docs/migration.html.in
+++ b/docs/migration.html.in
@@ -2,6 +2,8 @@
   <body>
     <h1>Guest migration</h1>
 
+    <ul id="toc"></ul>
+
     <p>
       Migration of guests between hosts is a complicated problem with many possible
       solutions, each with their own positive and negative points. For maximum
@@ -9,34 +11,419 @@
       libvirt implements several options for migration.
     </p>
 
-    <h2>Data transports</h2>
+    <h2><a id="transport">Network data transports</a></h2>
 
     <p>
       There are two options for the data transport used during migration, either
       the hypervisor's own <strong>native</strong> transport, or <strong>tunnelled</strong>
       over a libvirtd connection.
     </p>
+
+    <h3><a id="transportnative">Hypervisor native transport</a></h3>
     <p>
-      <strong>Native</strong> data transports may, or may not support encryption depending
+      <em>Native</em> data transports may, or may not support encryption depending
       on the hypervisor in question, but will typically have the lowest computational costs
       by minimising the number of data copies involved. The native data transports will also
       require extra hypervisor-specific network configuration steps by the administrator when
-      deploying a host.
+      deploying a host. For some hypervisors, it might be neccessary to open up a large range
+      of ports on the firewall to allow multiple concurrent migration operations.
+    </p>
+
+    <p>
+      <img class="diagram" src="migration-native.png" alt="Migration native path">
     </p>
+
+    <h3><a id="transporttunnel">libvirt tunnelled transport</a></h3>
     <p>
-      <strong>Tunnelled</strong> data transports will always be capable of strong encryption
+      <em>Tunnelled</em> data transports will always be capable of strong encryption
       since they are able to leverage the capabilities builtin to the libvirt RPC protocol.
-      One potentially significant downside of a tunnelled transport is that there will be
-      extra data copies involved on both the source and destinations hosts as the data is
-      moved between libvirtd & the hypervisor. On the deployment side, tunnelled transports
-      do not require any extra network configuration over and above what's already required
-      for general libvirtd <a href="remote.html">remote access</a>.
+      The downside of a tunnelled transport, however, is that there will be extra data copies
+      involved on both the source and destinations hosts as the data is moved between libvirtd
+      & the hypervisor. This is likely to be a more significant problem for guests with
+      very large RAM sizes, which dirty memory pages quickly. On the deployment side, tunnelled
+      transports do not require any extra network configuration over and above what's already
+      required for general libvirtd <a href="remote.html">remote access</a>, and there is only
+      need for a single port to be open on the firewall.
+    </p>
+
+    <p>
+      <img class="diagram" src="migration-tunnel.png" alt="Migration tunnel path">
+    </p>
+
+    <h2><a id="flow">Communication control paths/flows</a></h2>
+
+    <p>
+      Migration of virtual machines requires close co-ordination of the two
+      hosts involved, as well as the application invoking the migration
+      operation which might be on a third host.
+    </p>
+
+    <h3><a id="flowmanageddirect">Managed direct migration</a></h3>
+
+    <p>
+      With <em>managed, direct</em> migration, the libvirt client process
+      controls the various phases of migration. The client application must
+      be able to connect & authenticate with the libvirtd daemons on both
+      the source and destination hosts. There is no need for the two libvirtd
+      daemons to communicate with each other. If the client application
+      crashes, or otherwise looses its connection to libvirtd during the
+      migration process, an attempt will be made to abort the migrastion and
+      restart the guest CPUs on the source host. There may be scenarios
+      where this cannot be safely done, in which cases the guest will be
+      left paused on one or both of the hosts.
+    </p>
+
+    <p>
+      <img class="diagram" src="migration-managed-direct.png" alt="Migration direct, managed">
+    </p>
+
+
+    <h3><a id="flowpeer2peer">Managed peer to peer migration</a></h3>
+
+    <p>
+      With <em>peer to peer</em> migration, the libvirt client process only
+      talks to the libvirtd daemon on the source host. The libvirtd daemon
+      will then connect to the destination host libvirtd and controls the
+      entire migration process itself. If the client application crashes,
+      or otherwise looses its connection to libvirtd, the migration process
+      will continue uninterrupted until completion.
+    </p>
+
+    <p>
+      <img class="diagram" src="migration-managed-p2p.png" alt="Migration peer-to-peer">
+    </p>
+
+
+    <h3><a id="flowunmanageddirect">Unmanaged direct migration</a></h3>
+
+    <p>
+      With <em>unmanaged, direct</em> migration, neither the libvirt client
+      or libvirtd daemon control the migration process. Control is instead
+      delegated to the hypervisor's over management services (if any). The
+      libvirt client merely initiates the migration via the hypervisor's
+      management layer. If the libvirt client or libvirtd crash, the
+      migration process will continue uninterrupted until completion.
+    </p>
+
+    <p>
+      <img class="diagram" src="migration-unmanaged-direct.png" alt="Migration direct, unmanaged">
+    </p>
+
+
+    <h2><a id="security">Data security</a></h2>
+
+    <p>
+      Since the migration data stream includes a complete copy of the guest
+      OS RAM, snooping of the migration data stream may allow compromise
+      of sensitive guest information. If the virtualization hosts have
+      multiple network interfaces, or if the network switches support
+      tagged VLANs, then it is very desirable to separate guest network
+      traffic from migration or management traffic.
+    </p>
+
+    <p>
+      In some scenarios, even a separate network for migration data may
+      not offer sufficient security. In this case it is possible to apply
+      encryption to the migration data stream. If the hypervisor does not
+      itself offer encryption, then the libvirt tunnelled migration
+      facility should be used.
+    </p>
+
+    <h2><a id="uris">Migration URIs</a></h2>
+
+    <p>
+      Initiating a guest migration requires the client application to
+      specify upto three URIs, depending on the choice of control
+      flow and/or APIs used. The first URI is that of the libvirt
+      connection to the source host, where the virtual guest is
+      currently running. The second URI is that of the libvirt
+      connection to the destination host, where the virtual guest
+      will be moved to. The third URI is a hypervisor specific
+      URI used to control how the guest will be migrated. With
+      any managed migration flow, the first & second URIs are
+      compulsory, while the third URI is optional. With the
+      unmanaged direct migration mode, the first & third URIs are
+      compulsory and the second URI is not used.
+    </p>
+
+    <p>
+      Ordinarily management applications only need to care about the
+      first and second URIs, which are both in the normal libvirt
+      connection URI format. Libvirt will then automatically determine
+      the hypervisor specific URI, by looking up the target host's
+      configured hostname. There are a few scenarios where the management
+      application may wish to have direct control over the third URI.
     </p>
 
-    <h2>Migration scenarios</h2>
+    <ol>
+      <li>The configured hostname is incorrect, or DNS is broken. If a
+        host has a hostname, which will not resolve to match one of its
+        public IP addresses, then libvirt will generate an incorrect
+        URI. In this case the management application should specify the
+        hypervisor specific URI explicitly, using an IP address, or a
+        correct hostname.</li>
+      <li>The host has multiple network interaces. If a host has multiple
+        network interfaces, it might be desirable for the migration data
+        stream to be sent over a specific interface for either security
+        or performance reasons. In this case the management application
+        should specify the hypervisor specific URI, using an IP address
+        associated with the network to be used</li>
+      <li>The firewall restricts what ports are available. When libvirt
+        generates a migration URI will pick a port number using hypervisor
+        specific rules. Some hypervisors only require a single port to be
+        open in the firewalls, while others require a whole range of port
+        numbers. In the latter case the management application may wish
+        to choose a specific port number outside the default range in order
+        to comply with local firewall policies</li>
+    </ol>
+
+    <h2><a id="config">Configuration file handling</a></h2>
 
+    <p>
+      There are two types of virtual machine known to libvirt. A <em>transient</em>
+      guest only exists while it is running, and has no configuration file stored
+      on disk. A <em>persistent</em> guest maintains a configuration file on disk
+      even when it is not running.
+    </p>
+
+    <p>
+      By default, a migration operation will not attempt to change any configuration
+      files that may be stored on either the source or destination host. It is the
+      administrator, or management application's, responsibility to manage distribution
+      of configuration files (if desired). It is important to note that the <code>/etc/libvirt</code>
+      directory <strong>MUST NEVER BE SHARED BETWEEN HOSTS</strong>. There are some
+      typical scenarios that might be applicable:
+    </p>
+
+    <ul>
+      <li>Centralized configuration files outside libvirt, in shared storage. A cluster
+        aware  management application may maintain all the master guest configuration
+        files in a cluster filesystem. When attempting to start a guest, the config
+        will be read from the cluster FS and used to deploy a persistent guest.
+        For migration the configuration wwill need to be copied to the destination
+        host and removed on the original.
+      </li>
+      <li>Centralized configuration files outside libvirt, in a database. A data center
+        management application may not storage configuration files at all. Instead it
+        may generate libvirt XML on the fly when a guest is booted. It will typically
+        use transient guests, and thus not have to consider configuration files during
+        migration.
+      </li>
+      <li>Distributed configuration inside libvirt. The configuration file for each
+        guest is copied to every host where the guest is able to run. Upon migration
+        the existing config merely needs to be updated with any changes
+      </li>
+      <li>Ad-hoc configuration management inside libvirt. Each guest is tied to a
+        specific host and rarely migrated. When migration is required, the config
+        is moved from one host to the other.
+      </li>
+    </ul>
+
+    <p>
+      As mentioned above, libvirt will not touch configuration files during
+      migration by default. The <code>virsh</code> command has two flags to
+      influence this behaviour. The  <code>--undefine-source</code> flag
+      will cause the configuration file to be removed on the source host
+      after a successful migration. The <code>--persist</code> flag will
+      cause a configuration file to be created on the destination host
+      after a successful migration. The following table summarizes the
+      configuration file handling in all possible state & flag
+      combinations.
+    </p>
 
-    <h3>Native migration, client to two libvirtd servers</h3>
+    <table class="data">
+      <thead>
+        <tr class="head">
+          <th colspan="3">Before migration</th>
+          <th colspan="2">Flags</th>
+          <th colspan="3">After migration</th>
+        </tr>
+        <tr class="subhead">
+          <th>Guest type</th>
+          <th>Source config</th>
+          <th>Dest config</th>
+          <th>--undefine-source</th>
+          <th>--persist</th>
+          <th>Guest type</th>
+          <th>Source config</th>
+          <th>Dest config</th>
+        </tr>
+      </thead>
+      <tbody>
+        <!-- src:N, dst:N -->
+        <tr>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+        </tr>
+        <tr>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+        </tr>
+        <tr>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td>Persistent</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+        </tr>
+        <tr>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td>Persistent</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+        </tr>
+
+        <!-- src:N, dst:Y -->
+        <tr>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td>Persistent</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+        </tr>
+        <tr>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td>Persistent</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+        </tr>
+        <tr>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td>Persistent</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+        </tr>
+        <tr>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td>Persistent</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+        </tr>
+
+        <!-- src:Y dst:N -->
+        <tr>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td>Transient</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+        </tr>
+        <tr>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td>Transient</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+        </tr>
+        <tr>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+        </tr>
+        <tr>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td>Persistent</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+        </tr>
+
+        <!-- src:Y dst:Y -->
+        <tr>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td class="n">N</td>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+        </tr>
+        <tr>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td>Persistent</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+        </tr>
+        <tr>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+        </tr>
+        <tr>
+          <td>Persistent</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td class="y">Y</td>
+          <td>Persistent</td>
+          <td class="n">N</td>
+          <td class="y">Y</td>
+        </tr>
+      </tbody>
+    </table>
+
+    <h2><a id="scenarios">Migration scenarios</a></h2>
+
+
+    <h3><a id="scenarionativedirect">Native migration, client to two libvirtd servers</a></h3>
 
     <p>
       At an API level this requires use of virDomainMigrate, without the
@@ -66,7 +453,7 @@
       Supported by Xen, QEMU, VMWare and VirtualBox drivers
     </p>
 
-    <h3>Native migration, client to and peer2peer between, two libvirtd servers</h3>
+    <h3><a id="scenarionativepeer2peer">Native migration, client to and peer2peer between, two libvirtd servers</a></h3>
 
     <p>
       virDomainMigrate, with the VIR_MIGRATE_PEER2PEER flag set,
@@ -90,7 +477,7 @@
       Supported by QEMU driver
     </p>
 
-    <h3>Tunnelled migration, client and peer2peer between two libvirtd servers</h3>
+    <h3><a id="scenariotunnelpeer2peer1">Tunnelled migration, client and peer2peer between two libvirtd servers</a></h3>
 
     <p>
       virDomainMigrate, with the VIR_MIGRATE_PEER2PEER & VIR_MIGRATE_TUNNELLED
@@ -113,7 +500,7 @@
       Supported by QEMU driver
     </p>
 
-    <h3>Native migration, client to one libvirtd server</h3>
+    <h3><a id="nativedirectunmanaged">Native migration, client to one libvirtd server</a></h3>
 
     <p>
       virDomainMigrateToURI, without the VIR_MIGRATE_PEER2PEER flag set,
@@ -137,7 +524,7 @@
       Supported by Xen driver
     </p>
 
-    <h3>Native migration, peer2peer between two libvirtd servers</h3>
+    <h3><a id="nativepeer2peer">Native migration, peer2peer between two libvirtd servers</a></h3>
 
     <p>
       virDomainMigrateToURI, with the VIR_MIGRATE_PEER2PEER flag set,
@@ -171,7 +558,7 @@
       Supported by the QEMU driver
     </p>
 
-    <h3>Tunnelled migration, peer2peer between two libvirtd servers</h3>
+    <h3><a id="scenariotunnelpeer2peer2">Tunnelled migration, peer2peer between two libvirtd servers</a></h3>
 
     <p>
       virDomainMigrateToURI, with the VIR_MIGRATE_PEER2PEER & VIR_MIGRATE_TUNNELLED
diff --git a/docs/sitemap.html.in b/docs/sitemap.html.in
index 254efbb..1de2b20 100644
--- a/docs/sitemap.html.in
+++ b/docs/sitemap.html.in
@@ -61,7 +61,7 @@
                 <span>Configure authentication for the libvirt daemon</span>
               </li>
               <li>
-                <a href="migration.html">Guest migration</a>
+                <a href="migration.html">Migration</a>
                 <span>Migrating guests between machines</span>
               </li>
               <li>
-- 
1.7.6.4




More information about the libvir-list mailing list