From c0712e0b540b8268153fd4530381a7ca8b37b215 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Wed, 25 Jan 2023 20:02:32 +0100 Subject: [PATCH] update project --- CHANGELOG | 1 + agent_based/juniper_bgp_peer.py | 9 ++++----- juniper_bgp_peer.mkp | Bin 3735 -> 3732 bytes 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7076676..a51514e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,3 +3,4 @@ 2022-05-09: added item to BgpPeer class, this is used in the discovery function 2022-05-11: changed bgp_get_peer_entry to get proper parameters instead of Nontransparent list added remote_as to BgpPeerItem +2023-01-25: fixed routing instance in item diff --git a/agent_based/juniper_bgp_peer.py b/agent_based/juniper_bgp_peer.py index 6b9075a..7d19cea 100644 --- a/agent_based/juniper_bgp_peer.py +++ b/agent_based/juniper_bgp_peer.py @@ -15,7 +15,7 @@ # 2022-05-09: added item to BgpPeer class, this is used in the discovery function # 2022-05-11: changed bgp_get_peer_entry to get proper parameters instead of Nontransparent list # added remote_as to BgpPeerItem -# +# 2023-01-25: fixed routing instance in item import copy from typing import List, Dict, Optional, Tuple @@ -54,6 +54,7 @@ class JuniperPrefixes: def parse_juniper_bgp_peer(string_table: List[StringByteTable]) -> Optional[Dict[str, BgpPeer]]: jnxBgpM2Peer, jnxBgpM2PrefixCountersEntry = string_table + peer_table = {} peer_prefixes = {} @@ -105,10 +106,8 @@ def parse_juniper_bgp_peer(string_table: List[StringByteTable]) -> Optional[Dict address_family_str = juniper_afi_safi_mapping(address_family.afi, address_family.safi) item = f'{remote_addr} {address_family_str}' # ToDo: add vrf name - routing_instance = '' - if routing_instance != '0': - routing_instance = f'VR {routing_instance}' - item = f'{item} {routing_instance}' + routing_instance = f'VR {routing_instance}' + item = f'{item} {routing_instance}' peer_table[item] = copy.deepcopy(bgp_peer[remote_addr]) peer_table[item].accepted_prefixes = address_family.accepted_prefixes peer_table[item].metric_count += address_family.metric_count diff --git a/juniper_bgp_peer.mkp b/juniper_bgp_peer.mkp index 3487a92b4b24004a5a7a0af434f349c58fbfc446..35fa375c97fb80499e9157bbf0fcea6393a3c5f1 100644 GIT binary patch delta 3666 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 delta 3669 zcmV-b4yy5#9hV&kABzYG!#y662Q+`U=?BTTwqnVS(|X2x*GJmRPMT(#v~x4AN26GD ztVWi!qLen*$$vk9dQlRkq?@+4-4QlTWD)>D5(Gd%UdLPeJKq^b0Mp5Y{{^W2)epv_ z9epw$9Zbg4gVA_rq>uEmu|q~XKLBDDSs{q>EhZ^W?k9mSiWNs2KU8K!i8g=kaJ9W! zSkcmtBiHw@7PcQPSN>KR^oU|pwhEmfa(oZ5U;CaD`5_~}$DR|=kUV>JN&-ru1)e6u z_r~z`(X-+2?@o?R58w7R^1)MjqymbxaY$AnwIa%h?@_{Nc<rnxS^FWO)@s8C*|Tgr zq>PcZwRPMZLe!(v>j|+un@E2cLf^E1|M5@WoFC3ev~d^--1yS*$S22j35#KxjM@~s zDDguFdMsBq-p6D~%!|vw1pSKQjFHwho=;*%OT*syG1-EK63b;iaXjD!a%^u1GR9?) z4W80Udelu61#Gsrm+rK-@q@_M{P1$`(urK_VsEvftE=tR-Zk}XKOBELo=pRIq+Ya_ z4T<Z>)xrPdxxQtaap<BxH1g)yYsaMw&_LfVftz_@!9v34MQN>&zZTpeMKdUlcWr(> zRUA1k+mq2PZ&5<e+EScH6@!cK#alC*!WbJOSTBxV)qakC4SJFu6Jul;qbK@EyVgeV z-@YXxXj{iKL;6STgnWNB6a$e;7=g9Af+e$4Ub;4Vq8VkBm{}JtHDeEE2xup8Xm0O& z{vELY+DGPl|3~{j-ruj-e_bE#clQ5>*#F(c{_oDnZnOR09gtnY{3G(8F#jLChZ*+N zihuCF&OWyp;|EyY6!BZxRKCQ5NyRm8WR1w&903;WU|~_=^J0HjV&jmY!E9nzqix&; z+emiNG@?9J1SI8#5Id`SfSsv@!tR<K6#7eMkRv0Gh>%&qlv8R2MGVmh0+tuME=r!+ zZD<<b?sQNEL3cDXgg@T?@AK!f{WlD~i~oNJNY4EC+<*OGa*+H5pP#z_30(JJ|Bdkh zd>T)2|HlX8AL@Vq3E8=b9oKHbyQ}{vg-5^a#Vp*raJ)V0U6bGjf&p*bdqjr+0B7yn zj(0gDakL&j#+KeA=s5<T?J+tduTI{PSJa~+IN8(q!gW?zAGtO->Qf$DpsQ|*ECA`< z+hd5&XQa{F0nQ5u8W0D)$Z#|n8V8(z8ibJ4t^4azG;)8+qmfGd!0FEa{U3Dtzti=a zyriK=KEl(&w%BHwin(4fn##!k#8*5_fzTy_CE@IX(7$$YfykOt`vN=^^4wZiX(R!G zjPH?+6@a(rqh`X7M>AYnN>(nlyg1ln5ky5>*YSW^j<-J?J((dBY7-}-TV($1GQddz zp~cuB83uoTAb0^BkB2?B!&W{x#T&AYy%k1l0!LkkkvEnHo|FeNmo(z1-UKHA6fgp` z;KXnV11ki-AK@Be{6j4p7Z`3AQD}J#dVz?z4vSy_5fYI@y7eP!T1=4p2&Mrm(Q~$e zA4aeS!A)-+`Y^Sd0M{{XKL(xy^1@lc?>9W)w7`FtpT~hq6Li~(EWQK~NTxJ-Q!hb5 z1wyZ;C1D!VL`Nq)n^xdx*LucA<yXj%UV;cTOfHmXC$CS>LrRlRXf7i5$%!_}=Ql?$ z4m~@6es%*YGU)aHloT4Q12t{BW@UNKq7aq`S)XH&gY56Yp9ghX9<P=-rW=xoUDt%7 zJ;Z-VH8h>TOylye8ocUV%0gtl*4i-{{@TJ>fr;`VdjBf6l>g3-_Gw7h&S%PIoClE2 zU{AtiZ%Uu6)rtlYEN+ldfF4J@3)DJvR_4lwaB;@<ZNb%R0ki|eS}sMr5UfuVTCWHD zg=dA)T6C>4zHw%RyOuJj?B%jghQH-nzCeGaPq?Q$v|J|h{OEm#me&T~wc-<>*>ju* z9MeO7i04Ecl@s%g<sYH<%Wct?txVF)+xcaTGXjIsGR`bdw)l<>T4Upa<P1w6%xovh zts(tLSG*N`LL+75T%*)nq<l!cLwz3L<`4L$141f=#sb%gR7F$zgghdN(p9i?Ho|}O zE6SyoQb|BFN9s}|a+<SRb4}~!peL$qHTq>jLD%MsrL>Rh>wHm5bE%5JU*Vc5j@a+l zGh>g+M7dCP>Ox)#n=+GZM<q<ME;$oX0a9YI>F$veJ&_8J9aRRx^7ea$R;|mYLIb0y za^>mIO5`Q11;<!w+|S!;E^|&nT?l`c?xY7DTx3nlwxbBNlC#HIVi-h0(QUj>rynvu z4A$F3_fl#pKCqNUdR9VMezYMx@!_q2>Vt6j%s8+yi<6w(`~!4s!9#!>NPCJ;Yqm8Z zbOICPunimz9zr;1^kkjRRz9FfT`OQIMs5^xJYizcDfM1z>v9OXkbA7T#65qOt%JZ| zF0O5T%lVefg{>-Ej$+&9;ucB=WAkF?N(ja7%!Q3Ap$MBc7dNoVC)>WcxUn@(IaX=M zOK2^-KX22Fb|#<$bE)dc*Q2C7b9uAODhN)ZZXLukvse~q9*=ISa%P&ygfkqJLKh)k z7Vu!xQR$juBejgJai>;kL;Qb!c@gmbFehu}i=d#l<V$_%+j7|mu1fw3pI<}Bb+{&& z2`uYl#ZbT~N|^;%)f&<-fHhKPHKQ)!wpQN1C10u?xAp2)F-Ls5y_2R0iWW$K1{g0S znoVhd4{Bxt7Q&h>`>i~*n)e5;)g7y%v~v_)Kl!!BP3*oGBaAPa`Cxx<I~)AHP|DQG zvNlaKi^A_<RNW-bs@j-d%Ay!<>IEMNy|as&#=LD{GRp6}iFHOzolA>(C=3tRvkUTE z9=!{wcE;OG*jCu(g$FiY2z~WBFibC@Skq{=5hA(lj#>6Bc$Jzfny!ttDg2(mKVv$c zYWwg2k1zrpP)W6AHWPoNg|fwVY$k~ylUuARiL(@498BbU7FCr+z#q%;V@6c&+tQSc z`p<s9iG@C@^LWdT;!{wyb8z0WY48iUnz7K8ehZJrk;jcAvqqXpo#qG~LnFbyWROJh zk3_vMkxmm**--BiFWy8W*}yk(bO+H`Hqf~rS?=r9(Kk^}q{DyRi&U~MFWL66@bc#v zBGjoTO>0x3cDA&M*l1bU!z50qkuQs&Veqi?42?!6fBUJfU&p`dkmCS6Xu<G7D_w~T z$FEdZvNY&ZIgQaqb0!-|IgpVYd8ab($O#^|6Fg1*Yn|{(JK@{(iYhs<BN-*=bF+}T zewUPZFKt(()K`DlGy=KiMdDE{RLDp*2L+TUR&pSK9sKkPVV<uqQMI3<Ax^9^bT(?` z<Ae>Mu*eToz0aRO7}bC<xhtXm)X?x!z>lo|>Ep?i*Z=m7sWBeuJ0pEEHT16j*VX@I z^}i9X|2^USL3^ne`Qgpqr1aP8HPyqub5*OTT(#A>zI%UF>tRK$Bk#Ia*P>zQho;5M zq$pDDz`elU4gK6&^TIC70b(~#8-9hb4=I8bwI!LMzE^!|mX~{2B~#>JX4dsrmTNlr zI-0X~c*3((KkA9uP)uhm((H7p29$Au{wl-8XbC?YlYYj~jHvG|H>QWU0RzJCNc_1k zWv86%Jym~tMae3Yyr^WA(&W_%&f025oC<^!ibl0!K*p%O7?5EV$$V+^uVm4j*vka# zFYhWH)JMA?+xl|xO_h`r(v+72k7*sjqnCc<SeUp<U%AV4N64iY4f!*Zl^{OIa`s<Q zjF49hq^V?aFxO&HdhkQKq7Z=F^(w+6VlftP(f)rX?jw62)epB;R24kYQBBc4`i`e! z=~mtL`5JF=eRHg(q_!{<EEcMBX`>ZkWt7>Us%8wN3>|!xyx89|PVwTpWWUR(#a=gx z*P<T{!da{ku3Fj1Mnsfcxnvl8hS_5UBQxNDA=-1buC1&pqD<)&{!W1^>#C9$Wgj5Y z(Y}B14`dGdGgbIeCkDSWTJ}eL^O#2z(P{&zCcco9y}XRdRRlhP<>2MIvJQo!qlZg3 zsOIui$$_YfU7(b><R0}tJQBfSWH;V={97Qm6^u$gc}DnsmY=D*6|NLr3Y&dfKVvMb z%jU0I_rz>+j&`49vdjgyC6s0OElFiWZ%cnHm->IYJaR2HE6L0r<w3)P)6kFZOhh*g zA<0}m_r0}q8Hdz<pP0ht;Uvk+liZS~)MPmP4PV<kiCq`#U}QE_o1~f6`5mLFx_1iv zK(fv`hvs=aZW#9zBG)EapESwJ{z57Ke1^KwG<Mq@|GK4t2c^FslzA_<#ArO)$KZb@ zc$EJ(^$}eT{oCZwzuD5YEm|tdGhlEA2O7NBeb!2;7%y%N8f?5Ujqi~A?()2i>CdKb ze*Lig@5ne9O?duyx^L|3Q)6eO@9X-w%l~%y-{$XsWclBf8{3rNSNsOamq0IQ@^uI_ z7NnMX!{n_jEJtohwk=Pjq&E_NJ7j+mf2};t{9w4wN*8u~nTaT|cjft?JmGujVE>`r z39ct%qmedF#l~@l`CqYhlA)Gb^(i*naFyyM*B;?U!-eD5B>WNui?S?YbzaF$>u)tP zN$QJFZcuzNfWK`If19SO>I0(pXZ-&dF(JTs1#ycYAod%1|2B3b8HR2=Mx1}+@%z&g z(!xnMo>cIp9F0Pzsf?3R$TV%>us<NveZ&FxK74<Ae71)V#|8{s9jPLF(}-2sr_HM| z=F+`AAHqEf*4}cw8paqgUb_CLAq(iL);($L9_JE2KR!7lmH7ZMpY_SB;p=RTEAy!K zPb>7(DI&anaXvhI`tqpK$>lO~tqbZ>TgJTFKPBq)^st{|HE6er86`~ECU3Lz+$}t> n6&Rm<fls&Oj6Y(}t<vwJo0CuuI1W1ao5TMAm|?g90C)fZoqIAu -- GitLab