From 0f87daf29f9be4d6c01594e644e25c3c7af4b7a3 Mon Sep 17 00:00:00 2001 From: paco Date: Mon, 4 Jun 2018 16:06:37 +0200 Subject: [PATCH] lib, lm-proxy-topo1: label manager proxy test Label proxy manager test covering both LDP and BGP label requests. lib/topotest.py:restartRouter() function has been fixed in order to allow propagating options to deamons other than zebra. Signed-off-by: F. Aragon --- lib/topotest.py | 4 +- lm-proxy-topo1/ce1/bgpd.conf | 9 ++ lm-proxy-topo1/ce1/zebra.conf | 11 ++ lm-proxy-topo1/ce2/bgpd.conf | 9 ++ lm-proxy-topo1/ce2/zebra.conf | 11 ++ lm-proxy-topo1/lm-proxy-topo1.dot | 102 +++++++++++++ lm-proxy-topo1/lm-proxy-topo1.pdf | Bin 0 -> 16393 bytes lm-proxy-topo1/lm/zebra.conf | 3 + lm-proxy-topo1/p1/ldpd.conf | 9 ++ lm-proxy-topo1/p1/ospfd.conf | 7 + lm-proxy-topo1/p1/zebra.conf | 12 ++ lm-proxy-topo1/pe1/bgpd.conf | 26 ++++ lm-proxy-topo1/pe1/ldpd.conf | 8 + lm-proxy-topo1/pe1/ospfd.conf | 6 + lm-proxy-topo1/pe1/zebra.conf | 14 ++ lm-proxy-topo1/pe2/bgpd.conf | 26 ++++ lm-proxy-topo1/pe2/ldpd.conf | 8 + lm-proxy-topo1/pe2/ospfd.conf | 6 + lm-proxy-topo1/pe2/zebra.conf | 14 ++ lm-proxy-topo1/test_lm-proxy-topo1.py | 205 ++++++++++++++++++++++++++ 20 files changed, 489 insertions(+), 1 deletion(-) create mode 100644 lm-proxy-topo1/ce1/bgpd.conf create mode 100644 lm-proxy-topo1/ce1/zebra.conf create mode 100644 lm-proxy-topo1/ce2/bgpd.conf create mode 100644 lm-proxy-topo1/ce2/zebra.conf create mode 100644 lm-proxy-topo1/lm-proxy-topo1.dot create mode 100644 lm-proxy-topo1/lm-proxy-topo1.pdf create mode 100644 lm-proxy-topo1/lm/zebra.conf create mode 100644 lm-proxy-topo1/p1/ldpd.conf create mode 100644 lm-proxy-topo1/p1/ospfd.conf create mode 100644 lm-proxy-topo1/p1/zebra.conf create mode 100644 lm-proxy-topo1/pe1/bgpd.conf create mode 100644 lm-proxy-topo1/pe1/ldpd.conf create mode 100644 lm-proxy-topo1/pe1/ospfd.conf create mode 100644 lm-proxy-topo1/pe1/zebra.conf create mode 100644 lm-proxy-topo1/pe2/bgpd.conf create mode 100644 lm-proxy-topo1/pe2/ldpd.conf create mode 100644 lm-proxy-topo1/pe2/ospfd.conf create mode 100644 lm-proxy-topo1/pe2/zebra.conf create mode 100644 lm-proxy-topo1/test_lm-proxy-topo1.py diff --git a/lib/topotest.py b/lib/topotest.py index 3d6a0d3..1d69eb6 100644 --- a/lib/topotest.py +++ b/lib/topotest.py @@ -870,7 +870,9 @@ def restartRouter(self): if self.daemons[daemon] == 0 or daemon == 'zebra' or daemon == 'staticd': continue daemon_path = os.path.join(self.daemondir, daemon) - self.cmd('{0} > {1}.out 2> {1}.err &'.format(daemon_path, daemon)) + self.cmd('{0} {1} > {2}.out 2> {2}.err &'.format( + daemon_path, self.daemons_options.get(daemon, ''), daemon + )) self.waitOutput() logger.debug('{}: {} {} started'.format(self, self.routertype, daemon)) def getStdErr(self, daemon): diff --git a/lm-proxy-topo1/ce1/bgpd.conf b/lm-proxy-topo1/ce1/bgpd.conf new file mode 100644 index 0000000..33cb3d3 --- /dev/null +++ b/lm-proxy-topo1/ce1/bgpd.conf @@ -0,0 +1,9 @@ +debug bgp vpn label +! +router bgp 9101 + bgp router-id 10.1.1.2 + neighbor 10.1.1.1 remote-as 7777 + address-family ipv4 unicast + redistribute connected + exit-address-family +! diff --git a/lm-proxy-topo1/ce1/zebra.conf b/lm-proxy-topo1/ce1/zebra.conf new file mode 100644 index 0000000..7118cc6 --- /dev/null +++ b/lm-proxy-topo1/ce1/zebra.conf @@ -0,0 +1,11 @@ +debug zebra events +debug zebra packet +! +interface lo + ip address 66.1.0.1/32 +! +interface ce1-eth0 + ip address 10.1.1.2/30 +! +ip forwarding +! diff --git a/lm-proxy-topo1/ce2/bgpd.conf b/lm-proxy-topo1/ce2/bgpd.conf new file mode 100644 index 0000000..358be34 --- /dev/null +++ b/lm-proxy-topo1/ce2/bgpd.conf @@ -0,0 +1,9 @@ +debug bgp vpn label +! +router bgp 9102 + bgp router-id 10.1.2.2 + neighbor 10.1.2.1 remote-as 7777 + address-family ipv4 unicast + redistribute connected + exit-address-family +! diff --git a/lm-proxy-topo1/ce2/zebra.conf b/lm-proxy-topo1/ce2/zebra.conf new file mode 100644 index 0000000..8b4e3e3 --- /dev/null +++ b/lm-proxy-topo1/ce2/zebra.conf @@ -0,0 +1,11 @@ +debug zebra events +debug zebra packet +! +interface lo + ip address 66.1.0.2/32 +! +interface ce2-eth0 + ip address 10.1.2.2/30 +! +ip forwarding +! diff --git a/lm-proxy-topo1/lm-proxy-topo1.dot b/lm-proxy-topo1/lm-proxy-topo1.dot new file mode 100644 index 0000000..71e6f34 --- /dev/null +++ b/lm-proxy-topo1/lm-proxy-topo1.dot @@ -0,0 +1,102 @@ +## Color coding: +######################### +## Main FRR: #f08080 red +## Switches: #d0e0d0 gray +## RIP: #19e3d9 Cyan +## RIPng: #fcb314 dark yellow +## OSPFv2: #32b835 Green +## OSPFv3: #19e3d9 Cyan +## ISIS IPv4 #fcb314 dark yellow +## ISIS IPv6 #9a81ec purple +## BGP IPv4 #eee3d3 beige +## BGP IPv6 #fdff00 yellow +##### Colors (see http://www.color-hex.com/) + +graph template { + label="Test Topology - Label Manager proxy"; + + # Routers + + lm [ shape=doubleoctagon, + label="label manager", + fillcolor="#f08080", + style=filled + ]; + ce1 [ + shape=doubleoctagon, + label="ce1", + fillcolor="#f08080", + style=filled + ]; + ce2 [ + shape=doubleoctagon + label="ce2", + fillcolor="#f08080", + style=filled + ]; + pe1 [ + shape=doubleoctagon, + label="pe1", + fillcolor="#f08080", + style=filled + ]; + pe2 [ + shape=doubleoctagon + label="pe2", + fillcolor="#f08080", + style=filled + ]; + p1 [ + shape=doubleoctagon + label="p1", + fillcolor="#f08080", + style=filled + ]; + + # Switches + + s1 [ + shape=oval, + label="s1\n10.1.1.0/30", + fillcolor="#d0e0d0", + style=filled + ]; + s2 [ + shape=oval, + label="s2\n77.0.1.0/24", + fillcolor="#d0e0d0", + style=filled + ]; + s3 [ + shape=oval, + label="s3\n77.0.2.0/24", + fillcolor="#d0e0d0", + style=filled + ]; + s4 [ + shape=oval, + label="s4\n10.1.2.0/30", + fillcolor="#d0e0d0", + style=filled + ]; + + # Connections + + ce1 -- s1 [label="eth0\n.2"]; + pe1 -- s1 [label="eth0\n.1"]; + + pe1 -- s2 [label="eth1\n.1"]; + p1 -- s2 [label="eth0\n.2"]; + + pe2 -- s3 [label="eth1\n.1"]; + p1 -- s3 [label="eth1\n.2"]; + + ce2 -- s4 [label="eth0\n.2"]; + pe2 -- s4 [label="eth0\n.1"]; + + lm -- ce1; + lm -- pe1; + lm -- p1; + lm -- pe2; + lm -- ce2; +} diff --git a/lm-proxy-topo1/lm-proxy-topo1.pdf b/lm-proxy-topo1/lm-proxy-topo1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7f7e09ed0921c1a3c520b5a2abd8938d022e779b GIT binary patch literal 16393 zcma*O1yEhf(y)!Y1b5iD1b26LcXxMp2=4B#fk1F~cL);P-3bufe#p7!>R0u@Yr(8N zy?VNPW_DLk6+EQ!!lE<`v@9^B4QJnQT@OU{!2qpXS7fJAe}sZ_ob@-a~f9vyAgAElT+?y~~(!q6MB-0R)*$=dZ%X4^={cDQ0zC3K2p(G9F?iOqEEM(=c2jowsEkDqkc za|DO0FGGBGSMCyqP~$kQ2@3a=otlKfj!?!10Ajuxo=Gb<9=6B*z*%@&c-tavT_keU zB|OqYenAv*c0Fh%92DoCMXKLt(lA9*k{MW@nP;glMw?(uX0n3Vk!%}jmQzcl+(Bo% zK(C>pr;ixo**T2;U};x0YYf46IjD+jmkI{T6O~&L{xL#~w*wr%=B0Cp*gxcR-;_X9 zMp;p3A62}Lg#s}o6*sOcGJ|xK{0c<+V9P9(g3p-uXkj_4XWDISS8#R|kha_z23(%~kZ7+SI5>!r<09?2B} zckv(n{z(b^;c=*a$v3%z&;=C&sKkK-V!q`!xUZY2TZAcKgj3p0YF^ z2!R-QoC~DY9KfGipZ1NDRNtOB^Te~UbV{GfO7aq#u zB$Sw*R5QYE{nzt8=u4bYx$JX_V1$Fk%dkXANXu795YiZ_YtFBz`WXl#q)_;V_0o;K7BZS3j2rqRZ%A zEWnzAb9FgQD6=tt#(nOQ>Jsm7kg>)G6^BhBYOcIaH$d6Oy?Q$ild@`22_$* z*mtzsnIs6XXiz6`0;LYa$;B?&3_eV0X2mOkq2v}( zd^#q@oX%{3XfJv1`IIUcd*bF$(`qFkFu_Y3Dsd*)lA!$fCLyxpDNzo?X_-YQzE@3{ zyhd7f*dwaw(kx#DGEh;aC-IZKqNp62N&z;t?n`Hcvd4x;obs!tA_2{FE@83*PI8Vn zZN7*y(?u2AZ<5lD`xu{*owI<3JZP5Y?4E!=Fb=eV#gv7wCI|TU#L9sc{e{b5qs05~N3ePF74(sy9tm6qVMn zMJa9}xl`RYRQ&amTnp6elM+TQ#Oy#RLCG7CGq8y&jESxBKMLUcr;pP4Q7=E9?-i4Q zjh*pB;iJp=&&v9zmWsGLizzw3*HHjB_lMy9qBEd>?*Qn81ON;GIwOPk_Px5kzxb=A z6ScE-{x@w?8hRRf0L$Oi`CaM#=O4~k|LF`sr|e;G0-%#OFf;k%Sl+l) z;=j#`?Y;kBhZFXHhV}nCoP4lDKPU|?sU|1+h(1dITN_lx!4BuoGnW|sdr&z!ZH zC~L1YvP3|-k@IhzpUeIN>cNXB0ElnlYX@?Hx!vUvHlwWS1fs0+aNqLY<(yuhzr42J zT{Niu)U5m|mRnfGuzy;p`HetCDE~1)q!-r^A|ZH@qt3p%78XRg!g@kGYmTsy>Ju<2 zy340U@L$*mA|?6L)sBt8FLtnT7WMowvZ|lBdfs%Y_MjMDeBs42IlD~F)mwo`w7Y?T z$o;=a#eLC=(*o)qnVh`afF+Cx1cDU{!(xm^?O*SkhOs`PhPuC_@z+(-$qWb&e~=3j z;^zm_-@n{|%m6xs}OSd96qwAUbykg|Y?Z;ai|6^A!`*-+et^0v&V5k`#p+l}tj zJ4+kLQ_9TDOMsO%Qf+jbF5>4%;7^3z@!N62G zuWF}SSbGN`egvR6t{(|!RoKkjrviS7exWjF<9r@3T04o!;DNaqH6_~yt4y2*F5qzsr;<^S=`;nhYC z)D{0$&8$q^8IanHN$wI z1GRSmS(UZGld3FoRgzPqb@B{$b_y~1@GI@rlVGLi%`|mQ$jE;>T$a@j>ufaG3 zU%|kDtUtB!^;XeTbF{r|=^-XfEX^SOjzy~)Q0LdieFM|Aa`3zv&sDtFl~Q>8qWew$ zm2LX~qT1pa2fE#{#P5fdi|Kn~(d|bZv+!UH`U2_*yx9HbUsap(-bk{(H;RpZfFY|y z*Y}U3aemzk5NB_|ddYZiz;DO51iu&{qJiRM^HRi_dD`ML@lvlKavYGfM7G5^Em?bYR5pLh5x-5#1v0W~R{3HE#LzE7& z&w4kBQM21KNrOCEI# z8XH#=^hRSFe8fM@g-f+=EKrz;_4WkenEtS66}!R4M$fBKyBGsvPc3~Po!Cx7h?tv$ zqy_3Z9%*Xg$>_d7#ZrwxGrOc53P?P^OCYr1He)j&364G_<@eEW^tW~kAN#7Isk)LW zH_gyMX|knuv3V3}EAjbCJXSj>fZDlt!5tCY%KRiu2{oA$^qw#s<%}j4&C^G$F1=>- zu$A$o>t%7#%#*Beq6+13C%JqFqzpJUztDBL#K)lHH&h<}Jb~pF8HXyx)I-RfLt1&8 zQ6-aa4VyA=n;ktXO#3YoaBMHVd?xibMQaYIZ19vE#BEj#6LUtdbv-j!_m=eX4Qs4` zj74)$F%1TRn+DdK@dy;w#@8!aIa??qjF3HOMyybKyc@PSixqXVM-!V?s4>G$G;bRG z-J$0aD{&(^>p7FP!0OMZh=nnXB^6gMYhq?q!`jOfPGP6z@itvdh~f`oqv+*A7id3v z@E6_I^$L*ecSOY+&rt7qj5zNq?LvEK4DX&s1Y+A$Mb$1pz2Iy0M^~p=t|s+=vGIT1 ziY;eyQc^#!h$zpl2{E}BsG10D>5HY67F08qUmV2Dut72Yjs>-W^4O73!lhxcZ?hUp z9N=LFAwxR2OAEb%_jGJT(6Pb2ioCglky4L%>w9>9RFc?haBOU<)UA0vy+m}d)9E*) z^11i)uv5lzrT#Wr5UYGc)_J7&LaUZ_t2(8OmrfRvczV9{s!rPa`KMrLM-4__cde8i=453E9LtwZhX@&j{7g zdg@9yAvdGTYIL2d67Qc_E=&&%EEE>k$23f5EITj6kMj-NWG~5=8-?t!h8+quzO(CF zLHQ2JU0FSY zzBwy1D+@D~x=|_5;60C(wQw(c)t*-G6t{6Wza6{b5AYCXj92JjfatcDSx?_wt_jv1 zj^u8ee|Fs2?9J-jAWAv69hc%qLY9D|H_T= z^|a92kJDA)x5vWR&f~&@>~C4x9fS_k2mwAzu^q1I+}l@0M=VwOB|e&Zw?f|PYn#*P zm#pu5tKWlcT(gaXRt(~7%!czKug^@%q%CZe_5tpXYsl zojIB?!9A#HRDREiFkza^F;T=fK;GS-fW0C1a+xB=D|wPGyiV7hMEoIbr{7}A4_-~F znm`Cv5;67#Za8Nlp=j1_xLUnp!mco(;w#Kj6K9)e%``t9JKB1kV$bsW=cZhLH0r{M z75&6<9~13C1e$>$Waq)g26PWI+vA(Ti+&fviJb4tCTk;MZ0_g@LN{?02e}<1y?4Ur zKjuV;;^O8n&JxCc%d14?aOY2!4lzND2))kR$Jq>Mr|7%dlOI*3$SIfGD?Sk9X(O15 zE2w2%*_KMAcE)gY5X3}|6maeC7%(U&^&2`Sa#7X3!JTz=`;LE+nyC*h?CukLO6q$4 z+6sG336$yiu)rvVIU|$_+7rqIX&U;VOC)zlb$_ddz<}e}QSm0lJ&}e(Qag+% zFf#ojc~7DF3u9;eYfd$z7WhSN{w$2L-{+2TjQKSp3Kjv;N{=y1gU0Sr;T-~{X zXi|}34uOmWQmDkkWffm8XX6}Ls8tC>@F^=j`x{fHi$^B@C`6=MU zRY?;X>o;g}zWIPqvwklq77z_8$33@D!wb=5S95aY_fAh^>H?9Um|d!j-%gX{(!_|r zX|d(2P}#vy;h3WJv~wAn4!V8wFYrduL7l(82WC(D!Th80LBHAR0Yzeq$zrQq>BnoP zvzX77MC$C5G|k1QEYLXZopHXW7UV4Ag(@D#EZ-hI zt%6EQ%u+hY2DMl0mivRn#CnkRkU~G0!3@l;aqbZy7tvJ~6vHj)8};yozEMne4g+Q(aEXk($pCNaoZ9p^-= zR2#md$c zxY6+7>SOMgQ^6?6sz3}Oxf+&41~pi;5=Wtrr7pY1k#V)b==kbEnZ$@i!csxqNt`0f zzLNDwmP|?Uz-gbWb5?F=LWF!~Z!?ucYFXytCy2SncrwV)U^d!xLH?%F#bZydj0Jg9 z$U3JZC$fGzQ;QNzr`owUp7>oRhL^sL5Iw;z166p;yjsx^;Pnzr{}OAMO{l)?8j4v9UohRqjHKZY&Mx`@wptcLR@uMo~#G7MOf0*-y`gVQO$h zuF@`LTwB<0xW-L#$E(7_#zJ-hMY5t=-T#-OdK?wqppC1huP5s-&OlJ&Qr>#SHkm3| zPIa>0%Efy&GBU1JC!a68GfnvG`!cPLMr{VfE*Y4;G zlrGfpg>w+fF`gI%`u+w34iE+9y=Sb(Ew{ppM>Mglu9oG`6+Nya-Ba1Q@R7BxN*iE3 zmqF7Oc%5NU+}0B6gH~iRE8^2oSKQ9^L0U%Mr5yD@RMX$mnijh{)ncbtoPDDr;*(97 zg1q@4n`#hGZbpUr3VIq{W+FGhORCzde~EPJN${K6fw1^1T!`zW8{e2^wa?}!)Vq|V zw=X_-O1L85?wEN;j=oZri6d#8n%OC8e)x9tsWWd@B;cymZK14wY7s(7}+kLPS;jDCShs{ z2?j~ou?q_5n_HMu0dk-YtMKr#b9tyvJGi6fjWx0QN!B~%id|YV zm#wm>51y*jzMS*d>JXWhj_E+N!oo$x%Xc%wrQe2q9PGkRL{Y%uaaL$90Rq`PTqhF& z%gvn$4^X7^I^{^U+)gIyENRCY#sZGAuH%b_@;q$w&at>H6Q?2u%CsZS-zVozR+xc( z?hhp?MbEk|tT^r}&MytQ-OA6GSu4V9CgmdRh8@V{aZd6@#)lb|OD*O(C$u6YGYd6F zjW;Ht;?$n=_zY=}t%zqe=ooanV~#8P*LywL#PSJL63mP8xxWDnVtk7C58aOIb+t0c z{im^sOno!9HS{*=n5E?>cb_K?GkIPx%lo`;60ILS7cZ7WLA%-pWZVYJiYd*@u+VO( zo$#5FW=-}frRw5LWNplp-Kj2W2GQjb3JTfpi^mcxHs@>^Jk*njBETZxHZzj|j`q#z zWaVESg3im90N_#K4^~MT)L0~ms@WTET7+Olrn!d+%-w1!Ikm}wEBRL7N2LeW@ zRx$a=xb41{l$%ob0^R$d6@?(Q3;cvMh2xyIvEoUW2dxh+JD+PB!uCWo{QYdr12SgF zoYYORL(J?eTW*)sl`p6?DrReEhcRy4EKp!nG$YX+r(&j`t!OVoQ+ZObcTMV1S+VdP zkFM=oeoKxpYqYF@U<_(_D+NnNJp?AUyO}WzX_HW3jCTFT^Gjy50s9{7TP+Yv*~(=X zb`h^stnnNl7i3_-QP{*yX}t|;ICrwCGh;s{s;PIL?i9=fM!L(!&8OtWiw)^_WR3+r zIDX35hA>klayHF!BG*5)5!Nnt{lrUjEX;=VWS*e^oycm^W_EzXWP76_435Q9i4x6e zgkAb)L9pAqaEk)Q39r)9Xs25`-5N~iB#J3vyEz7x@ysVo5C7=Yu4pJ@{xZJTgMZ;r z(xbx%l99~?n}~$cLlvimCiU$wb2fQ3cfpWU3%jozXC?LKM=_?*a}qs5$~@m*neZ10 znV*(XYliqrkcs*tYiP>nS%%6(@IRbo>Cii|WX~gh?AkzC_ePeBH89y-6YnF~Pg5`BPU#wEuT zUbMZWjs)>cl|Y3201GPJC@PKtOO7Wa*R*t|=t`pW{cl@NXIF6YJH1usuaz0e#9>>6 zpO-%ml;5{O_X*qYSy_%4T8;y#pv>dHb%{_SVKsRDj3bfs_y4`}8^cbHNt2^JWG+Vz z$n1o0kX1A`God10ZJierkg7~2-=axxzo3|rFE)nPhd7z5tb7{l$o_Jo&EOFXXF()Jus&Ao$w8FWGfJPebRv5*P zsa-=3A@CYQZi!37@=vpF79nN{y>U9;&(zADg>yY2ri5+TW*ZUO?F>2-XN+lnPX@*e z0j|1Bn@Sek(73pGkabQ~IzC3qqtEZBRkIvwdyL!6U`^!|L5v@nkr`OP49rlqH`V7% zc6dwUGEXSC!&A2^&}EP(2zA(vLKNVDQ5N#(S)`rcGv{pIu9AV#$wz_Fqpu@aRf@3O zn-Zze!l~xKI@9Or4%{jt_)(PVuP0B%okR%7Hs6% zPr$}h#oC*f26Sfguoj<#?cp3a*<%rxI zjTHGRbu`>IU6dY&Wa@P($4SnP3sU3_IG6$(^u?r6j=@qY<#vPB1zzg#Z45@BqR*!g zB)pifB0m)J1AJQ(!c~Tqd>p>w zj){@CzVoTJ+*HLCU3g@Eqqg}QFVclX8lbg#CuJv3F{`ji=Qgh!>36zMXD~|Y7QahF zv63yHf6Fq;tq}v?*s8+#cmw%#-n^8nVG0r^WJ=9eJY*Z9TBx87K~E=7<>{ zVi1FOg(#;f`>5R-ooLLvO7AO^3X*HQFi z+;g1NXo7a3p&;~I4T+jyqN53tD7}3ZPSWO3YQYb%iap%cfml7s#x*o0(%w)TMAmNR z6CM0?*!fB4N^k1x)5S*<9V1fA%9&S_#H*F#h*aRYSjHPk6Le0UpfC4N@IHw^8qgxs z!XlnIBiq|iA&`yE%{vGi0uH4cY*zMa?hJgC^T`P3Qinr#Y%_4r_6}R3@Bdn`(*OrI z@HKbJ{WNx3avy8|E)`a_OFup%-$p~*hw+SRS8rJGh*}fhs(&t#W3fV+Ay&=24G)Ng zLB8VaH+KzRLk(05+&p#Hc*ZTYyx-bMn>Hl5n4a6eoLfkNDXe#88F|nc4KPfa(fFqq zXhRX4+xDNFQ6kB;dmBVxABfaKqM#jO;xE)27fyHDqevc!wEFA$l+QZ+McbHq#_{?l z5ynBDqmhx+dLBzWZ6(~F1A@soW5+@Z^9ZCuRz-?#3rlq2-GANsYbfG|4po)36|gE} ze-&!egZNr}$5L}Gg->U|T*nSSrBm4b`wZ0ru3B;+*Z<@b&Ua|!jo210T~tpT3m7>> zA{=2QM<>qDUz2G9!~<3ZcL^9+NBzfzVA~9D<5wJdMY*tF+P5=9P6h?rd24Vv*GQ4q z$Jphdu$N59l0Kt~YUi*jZ(l^+g>Xa(aqQQ!F+=B&wOtc`0h;*Q4*m%slNzsSVHMF+ z5(DeJK+kFP(>v&Up`Y9oKIHM((tIAPISv|EOYB#bi`N(Xb#fB`VwgDfhn0f%n_VDWE<#PSmP#*hjRSQgeh`Le)wI^#9CngT%^UL8kTFu0o@|RHdt|sy<6H~5H0J~w|!P(-R z)2!!`Pqk3~`ZZ7riYx?m7_&~d_YNC1XQp)ZEe4uqo@$0qoA7+g;^X?SLQAf1By6U! zAQt8VldxWfR*EX;u`m+u4S;^K^loSDsuN{qp2Tc6f{rwR{QxJkvrj*{Cu$Wew}J(6ikOs}N`T`0U_J`!DHkv>m;$bXQk`tc zDKyYRyXlK($QDS<)b!k)pSFE88|oax3T~q zOh6zXwCLg(x6Y^T%e|uAb?NVE>Fe-Nvk3Dr;o$YzODjc+9SjAfmV$}YcAW{7IIb0! z3BkslyHD<3y@awvEkRYLUbf~AD8P0FS5fmlg<58j6vte!|da9Yh zud=g+`r-~&cdS09@x_Kha?XhD0R!P=TElh{u8WJh_2)U(^Vfx(QU{Xl1y^9Dz4`ZK z%S38I#H;q1Gmk+hb#XB3wk{-zvdM*5s_0MoWL5&%Z3t&tn?&DxGkPT&;{5wyFrcTJ zND@iznm^-wC;pxzT}l?<261udu0RF$RKrDMA=gY|k3 z>nC*pd8*-OxNXnFfv^-?DTPC>VV)4fj_R-6A`L6Q=|CBv538rvB=+M*$jiX& zr0+V7hLv*Y+S$17EM%Z-FDztDP1HqvTQ>J%;v2Yf??Sp?lA)<5tSt;p8E^;ImzEem8uu% zRln?H%eRpxf39X>9uILn)T_coPzz5(yINE}8U|J7Mn=RxrZ|2fuW}=u8N)>@|L!+fiD)itIRdfKqmUCcBEi z7kA2Ag8m#XB6>O2d+N)66FWL&&_^7PLq@7rhd&%~g|6;lRK8hwp!01rN(Y*xE7X(x zlu1r`mximAv{SR?vHL0ON}}EZ5`=z0Pa7r1Ka#H~WJ$a>_i&07|619O7wi9=&97J|2Dl;vEy|KtB|8 zxDc{XksK=`#LwI6Zy^s;2R=km>?H@R$xN_fq+#;~mCX=v<}ig`C49OD`5ENcd?V)=H4 zfPCaRgP0TL`)0MyZRXr>KLb^1svJ6Oc&AkI?8mkg;+Wf-_r^jcmIti;{FM z2Fg^(mV2*3tUMu2#4j?IO#-(VE{sHTm!a8igPdI^cQDJL2H^T;;GxeE8(4}WgWEFV z&ch<8T<&mB<-jano(B){^etS`+%Bd&Qv7cB&C$oXe!$7boart8>5A83fiAZy%qd`Y za&EFm0gwXdqW97Vchd0$?IPFS*#l?qa|2Qycn}B68ccxakoDR>SgT|Ikf{daU zJ8x6DfF-Bgvh2hV2|!neA->G9m06yxI7-ZybH8|!9^xqZVujulvTR`l)iVl8uyLRm zK)&9pFu=6TG{8m~k#^GRlMYQB-qi6e0XaciO4Q%MiS*R3KC&`(Zi3v{wUaC)h!s63 zv+x%aYRzkkdV|5k7y^zlDo|?r5 z(mOW@=mzr!W+&`_caQpxV4~Yy0L+!8_S#PZDUvug>Ydx@g0FK9KAP3fb|~vfVW~%< zEtXGo@~fv`>A3M}1$!vwG7fSNmIwDra;qBSlpeEIrfL2{h;|`B4xOUZ79-LuSepD6 zYETl>-l(%YKZ=(7=?34O$38F8h8K+qVagH38Ge9m&r*YUjp`b5iMTb|fDsWgx6M`M zr{_>1G2f6@tNiZIOZuPR!AtVeI0ViWjJ~WVRFVou6wY4}C0EunnEg5sb?il(HpFs+4Vc;5qeu@fY3OZiYC5-|q_w z*#fE5_9$5u{!M)NsaXJPti6lh!|kh27P%17Ne9N&5jULD{IW4ZVwX=a=`%x=Yv%AG zn+*&RpW@N5hL`|Onwe>o4@EA^XZf)cgYwcKxLG_k)izD;v?2nj%seURM@y$BZ(vv-#|iSd)8{a4-36U2mhh|md_VCEm^rjn)!fq+^RL()S0{siq4`?|SA8BumN)sU? zI-Afg6+{dMK4P&LYC}?dGe7Xi@y-FdTxnSp^1RK=WtsI&=@`+XaB~?l-g8pVTqYLl zXwPWMuSBya>y*eynwp=iA=Y=Nwu+T7$|>l+AHf1%8Av?(Pxki?5@Hn&j{gJcUVQ@mVx7|D9=|9(P-O(kI0=6&sk`y(hw(KR38eD_Kc z{S|a{DE629%R|}|!jfyam=s|eiNKVpt^AA+O)qg-hayj##go0S|b() z=U-M>q;Mb`WWzM|87;vq9CVkz&IZ_8C`Xo*7uu_CD?Y7ajXkMa;pDy~V^uI=t=)64 zSkcqn+0^Gi0}q@XPw)WjI;iOlSoE zx`;9`Gxu{#bGK~{(TqR%cl?d^iN<{=%0=LSgvMj|y!CwO<#oI2kK+YZ6XSIFZq!v^ zUlv#xn5iP#iegad%tF;@zmcnns#Cnm!WrA<%dC@)Y$*pg5DmeJLdb>%5u26{gdc5z z6U!~XnH;Vx(}}82!Sog7=TCtiEAjPoLZ{gpxVjY@Lf1}1JP>MG#|}uT1$&;0vn3>3ck8XBdoHhuEz5!qH3Uc+D6vya@_j#NuHoI~u+yri* z%1m$&^k^1m4!>xU*@Crh7=JAGXT8F<8(udn4Dfl+(3*E-fD7E+v)3{Wn{cLrTifHc zWSgM(BmVVf{t!FW)B15PDgl`-bkMIT%_R{>UCWa_y)=CaxY)&h?^`&I25VXIbbIAi z7OSU$-~RhGK`4-M_M$s+P?=XGMi2peJTSBfd)TA%bMI3w`V|@BnyWAxX6Nmk>xxpKE|YG7)NRQm zk(iA;CA8iHc@zRQ2(c2Xm1LUFjO~b!v$VK&@L7J)0^E}VPN)B&CMt@llKg7%kB0j| zV|BTUn6nuJb9^=zlWG@UUm4?UctL5=*&Hv=uVH8EhzEw~-P}e~g3Iz|Jl#+cG19aJ zs?VxiH7WR^m=kRlB#NV$t@9UQy}uvT3`r{QaiT_0p6m`!ZqQ@VR~jOw-zSMV z@UN?-cj0)=7 zI;d$BjLw`}>5ezrKfex6e{=6i1*H(}lyQR_$|*_#64r`d-|ytO2NvTKiFYBP6U11W z0pk*1tI zyjO?MebRl!xk5|KLAxFHv1K$RGw-PhW5NHVqfP7~ff9Oo4*f*zl07!X>qb zmi|mFi#x)b$)poO#O=e0h5yoHxETQ~wK4q8y(F{>q~Ib_9v3 z8-KxtfoUD>a>WUg$K@ge>x~Gnw-X1==C+Md9W)ncy*w26-eMC6igXnfx+2QSvJhMQ zmnb)8be;XLVdNsEB!%8uiQB`u2P|P-;63JL>HMm5ilHZaCUmMW38Wv*=t zUAZT^+#tO3rwH7iD2#r`$mAE!a@5ibka;uv5X1Q~b0yW)j^E}4$@7SaU}4ukyLeBT zjD!fw!G(@jEUg>kU!V7FfrTu)JQONDyESlTGT5nm}UHB zK$gmH^?am4woA!rp2Fu8ir1^uyw5sLd}T0ZDNYjl=^LHi@LN~+8#$OiD?mxiEUdDukfk=2cz6VB`+gx;GA{m&4*8r% z`+s?j4}{=vUW1X5ne}gmg5!T_1BMSk;{V1%>Lg6rexZjOyzq#?Z4&|~K~;q&lvxYz zdo{O4A~PPJPW+<k}gEcBkeK%hL~YoE&M>2>R6<% zi_CALA;Xg8LT~mJ?dkKC+G=3|KFgE&RoT5B+KbfngE=R`#EW5GUspC`binzTPv<^1 zaSW?YIkQs6{^6GIMKA7GDxNO2?K=AZ-OWE+^pEXiV*R7=(PQ}FUH)cA{vuXBa2jC~ zCnHA-duKbxKOo45NY=pS9hXs+6Oxq__$+H-W9Z_fXlEm9$01FlXkzB_m!7qOnG=Bd zpJN37!e?k0SlIzIjO_2Q2|W`7fP<0w9~6y*vw^jRk$|n4wF%%a2t~lj=!3#}SNUV) zBaV;$$KXE#Ap?7H6ALr*f2k-ro7kuV*#8>-(GmZ<^AYts{bB<6;A8%sm-%3W{&&uQ z>?^q#I{)EB=qk~a89pMmi&OaHmD@1V^; zvqr@B9U8W77GjWcf(6|M$(r#PsJqBO5z_h5nsa z`mf)QQ6IAZ>&^Ne9y|L-vj6M;ko~LopP!hSng7`Tc+vy@YX6SmFU^n0*#0Xzdca5A zOz(a^-u|Wc_ozRl)jKg|r($dI!Bhi2g8BD-{NL~H2hHX5XU(K6j6YWF1Nc(>C$r`9 z0eJlzIK}WU`0Sm#dZ)GDzwiJGBLfRZI{*VM12ZivfWq9_*`AZ`9Xop$nmHQSn_Cz; z(b_qhQBwZ#BkyQu>|*pzfB)Zy{R>B9_;;-Quj~^tc+Uwtv%hSA%;q0N+P?<5JDQln z&;uBlVd(#P0a#gBm{fmmWLwf5*(g!ol{wlz;0vI~u&Fz2hHPU&+GL /proc/sys/net/mpls/platform_labels', + 'ip link add dev ' + vrf + ' type vrf table ' + vrf_table, + 'ip link set ' + vrf + ' up', + 'ip link set ' + eth_in + ' vrf ' + vrf, + 'echo 1 > /proc/sys/net/mpls/conf/' + vrf + '/input' + ] + vrf_destroy(router, vrf) + for cmd in cmds: + logger.info('[vrf_setup] cmd: ' + cmd) + out = router.run(cmd) + if out != None and len(out) > 0: + logger.info('[vrf_setup] "{}" error: out="{}"'.format(cmd, out)) + +def setup_module(mod): + "pytest environment setup" + + tgen = Topogen(NetworkTopo, mod.__name__) + tgen.start_topology() + + router_list = tgen.routers() + + # Load router configuration + + ldp_id = 1 + bgp_id = 101 + lm_sock = '../lm/label_mgr.sock' + + for rname, router in router_list.iteritems(): + if rname == 'lm' : + router.load_config( + TopoRouter.RD_ZEBRA, + os.path.join(CWD, '{}/zebra.conf'.format(rname)), + '-z ' + lm_sock + ) + continue + + rtype = ''.join([i for i in rname if not i.isdigit()]) + + router.load_config( + TopoRouter.RD_ZEBRA, + os.path.join(CWD, '{}/zebra.conf'.format(rname)), + '-l ' + lm_sock + ) + + if router.check_capability(TopoRouter.RD_ZEBRA, '--vrfwnetns') == False: + return pytest.skip('Skipping test: no VRF support') + + if rtype == 'ce' or rtype == 'pe': + if router.check_capability(TopoRouter.RD_BGP, '--int_num') == False: + return pytest.skip('Skipping test: no BGP LM support') + router.load_config( + TopoRouter.RD_BGP, + os.path.join(CWD, '{}/bgpd.conf'.format(rname)), + '-I %d' % bgp_id + ) + bgp_id += 1 + + if rtype == 'pe' or rtype == 'p': + router.load_config( + TopoRouter.RD_OSPF, + os.path.join(CWD, '{}/ospfd.conf'.format(rname)) + ) + router.load_config( + TopoRouter.RD_LDP, + os.path.join(CWD, '{}/ldpd.conf'.format(rname)), + '-n %d' % ldp_id + ) + ldp_id += 1 + + # Prepare VRF's + + router = tgen.gears['pe1'] + out = router.run('ip -h 2>&1 | grep vrf | wc -l') + if int(out) == 0: + return pytest.skip('Skipping test: ip/iproute2 has no VRF support') + + vrf_setup(tgen.gears['pe1'], 'pe1-eth0', vrf_name, '1') + vrf_setup(tgen.gears['pe2'], 'pe2-eth0', vrf_name, '1') + + # Start routers + + tgen.start_router(tgen.gears['lm']) + for rname, router in router_list.iteritems(): + if rname != 'lm': + tgen.start_router(router) + +def teardown_module(mod): + tgen = get_topogen() + for router in ['pe1', 'pe2']: + vrf_destroy(tgen.gears[router], vrf_name) + tgen.stop_topology() + +def test_lm_proxy(): + logger.info('Test: label manager (LDP and BGP)') + tgen = get_topogen() + + # Skip if previous fatal error condition is raised + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + cmd = 'show mpls ldp binding' + + router = tgen.gears['p1'] + + def check_labels(router, cmd): + output = router.vtysh_cmd(cmd, isjson=False) + logger.info('chk_labels [' + cmd + ']: ' + output) + return output.count('\n') + + test_func = partial(check_labels, router, cmd) + result, diff = topotest.run_and_expect(test_func, 12, count=6, wait=30) + assert result, 'wrong labels' + +if __name__ == '__main__': + args = ["-s"] + sys.argv[1:] + sys.exit(pytest.main(args)) +