$ANSIBLE_VAULT;1.1;AES256 33306665326534376332386439383961343830333466353035393561313661636538663936316465 6666313364613566346361303235313433623235646562660a613861353636623637656331616531 37303538383839383731616663656230383930363962663033613163666332333032376131306264 6439363062376361350a643335363334396535326138353635316535366261353761633635333835 61393763336533363236636265363764323863356365376332393737383636653961323063323061 34653133656535383366363532363736613765323163313731623465323330666635623535316434 30643238643238643038353737373736386162623830366335383431333139656539336430656435 61393365646433633833393166323266306236623761623664303761336463326634373938623235 31663132643835313430633162643361306135646133333238383834333431643138373435613132 38613862623766323838613035316564303934396162353032356639343039346462313935663634 65653535643834363030306638336136323363383935393436656637343438633839326165656430 38343866623862393364353334653566343338656238646135616266356336363339326662373464 30656139663864353439316432623235653533303032363930366134313933653738623731336331 38663566653334303462356138643863373937396666666339303337383533336565383732626461 35613531643763666563626330636639353566373063303232643936353530373162646162626133 61666532636461333535373334363764653936323164663639613932613961313930366330383735 33633430343361326635316632633065333536303031653539366361663033623336656463363436 30316433633733333735346137373735303030333565336530656261306338646237663163393363 33323133663663356263633565323161313065303735666566383564613439663336306330343533 32623931623439323161656430666430313962316334656266336332313239643261316433373463 34656630313065333866613336663761366530616333386431343864633232336463356134643233 63373235343438363465396363363032313366393936396334613565303936343166656336376330 64633561353934653364613739306132623266303563313434346261636462663166383466343437 61313766613263373230363333636237633861626531666161393435376135343466663638323465 31633832316262316661653734343965356134346132336563346634343935393735393965383962 61666262656431376436633336393631613335363835663930396139653262343066613936363761 64626134366131666133643338333862313366366562323664336361633339366235646639346365 62343639666363373131343838353836636263313862393165363336656264306361393661373735 33303435343035616531663434663935346630313731323338656237616638613530316131313131 62303162326162636230346134323036383134653863343961323166646163316436346131386335 36653166613231643632653435653733626631303732323337303562396436336639383636643633 39313365653739343265383533626666623131366164353937363933613866363966616535386135 38616561613336613037633331303463383830626132343664636433393935623932336464636435 63633165363031386336633537333235343962373565643964373130373564373830326135633138 63333366316132373761313561623466323563646364353939633639396138633038316130343638 37316164353830333333666337383063383834653565366362613465636235623335396438623564 35613639303333343033623037663337373932313063626364316535663632613761613236656533 39303937643030373366326664663862313038336566636533326264323562386236373135306463 63303135363338306365633735323731646533633432353266613535336432313132666631623063 37616437656132386130383265666330616234653137306564663166666231303762653036373636 63373961663936353236653334316530623638373133383061383730366633613339616439373738 30343265326563366231316164396637363331303165663735326139613936643636336232663361 32343261373730353533383237376661613966633932383930636661656438393934646661663135 64343838663065363731663332653739643035363032623836323462343532326431656437303237 37353362656665303337633538306263303163663463613531336165333462346533633038613465 31353833616238623332373033636632386665306237373833303731653034376334663864633037 31663035346333623135616139366336666363393638353262666466333164333931643630386531 33323736396665333631313966326237326235343338313332643863613561393034326161343430 35643230363237373261616336383535636232656238626232663435636162383165616530346165 30633033313664313461643639613065303636613861643233613263643939613064356163353339 62646564626531323333373562633337633038663265613065373566333661643435313536323130 63646364353630383132346339343262396635636662376339353162346636366663633632653637 30356532363162613738633662373035636335313331343864356335346363303239326138316662 30643166313032626332383765386436346131353032613232393034636431333566653830633865 31336666353735623638386432663431646334663237383362623061333364313533326161306563 64626465373939353066373233366332646438303064643236373465666363633730643131346336 62343265643532333138653238326535303039333466363666313564333036313934326662356432 63356261353564316462356131623464343466393833353232623034623133396134303936613263 65393434636162353537326433356564616334333635646362643963666230353030626438663364 30303436663562633635313063663863343734393632333665343635613830383061396636636232 37336262393363303765663736613039636333336166653433333130386230653135386530616330 31623639383334303338306236333831653139666565373262383633306437646636333437646132 63323135336630313864626637623736633537623661363763353630333038353862393863666532 36626630313835663665633663623533386638326564366336366135333834383032343763383061 36313936623337396537373434346166313762396262633331303265343831383738363937363863 34363937343966363134666639616364353032363932333534643463346431343430653634633734 36393932356634393037643765353064363834373131393265336235366265326264653635383737 65353832346162656634333264353932343836323961313936356463626232336336383034393166 66333732356137313166356235353936316233313266336231386130373437303833393163333338 66333633363136623165363136323931633564656337366462653933373834303132616336306361 33316633353034303833636665613537643764343862653334366135633037626461636464646437 36303063643434663061323263313565646265653235613238303335326264623066663934336165 32386562363263623036653461313132393365323232613663396436396566346234626130393639 31623039653062386130373439656539616238333531313739356135383632343738643465303333 38353832323236363835643835303463366538636334393865373038393862616630363238383665 61613236643135376336323366326339396432326666323531363030623433363330353530613832 38363431663638633061633862636666666636353638643436653862613263623865643133656638 38656661316165353230343738613130633765356432376237643832613264373333616461633764 38653363646235326433333739313263323832353262633835396361396663666335663366633665 39383666313465643530353230616664356334623465623362646632363935633866613566623465 65393834633831363031626433313136613162353966366265343436323362323566336564343635 36353930656130386134313864393964393166666365626531336137363133396238373465663737 31393332656364353439636538326562316231663262323234333063353832316663336362646332 38376364313730303662363738646265653930306366363065303263323936643366326463363365 32376365383461643534336233666364376633663834323664393339356134356431616165633538 39386362626630333764653735316662663434303963623462396165373963363538366433653932 61316562663532313034626336656265393663663237656365643830613136383833616364303538 38346637613466643765386132613461326261363461643932636436666335353630633261653763 31376132383465386361323730373764313664386531303162343532373937306538386231393961 33653061383966313161396564396331663362343262633936633262613165663334663562353739 32633233623366663363336464386232646336613632633866646437326230653866333363356663 64646338626164643737306166623331323266343266386162643466343432323833313033363837 32393566303537333733333836636663666230663132643638393137646639633161316331323039 64306539393131316335376261653364323538633638303330303962313863353434616361373961 65363065613038333830663533373539333636663766643434343266623437633364653366643038 39303763353536653232363033613934386630623636656361383430363664363262616539343830 32353735663630336162646334313234393837343936353830306235653433373863393265386461 37633630623339663664623661633637346564666532663432346634633639663032373261373937 32363364396430626138313464356635313933633637643462373032633636376333376563623836 64336362393565353431653934343863346631346630613734366265636164323966643339366131 63653865616230356339303863653864386636306365626236356462663364626433313462663466 31623035373835366131613534646539663963616263343935393937326639646534636136326437 32333937643736343233333039643232316462663936373664313338343832356438326239353033 36363133386533306665643833383636343533623537366333373431613865333938353139313963 31626163643362343735333534373061333539393839396630646437666532363338383162323235 39666638323761616433623034663063376666383365306565666366663230313231366461333262 63356166363334626538616438376463626465626163336266633333383338333130366632633934 34343361383637356335386361616366333636343065306639616462333837646561613532333133 34333032303634336634353231646533613831663564616636303061613663393963616662303336 61616238646462613962616138333639336665353961386262346536613664386662346139336266 38643535666266336661383335383430383564323435636438306132643538613261333737323132 38396539366365313834393733636339363438396164326635393736633934366534383861376631 64393832633664396436393666396662323065663932393237343164373863393834643536303833 36633237363164376635653330653266626165656662656665666461306439383937343266303439 35666536323961336564393638643130643062333433303431333331336137626661373232626262 30353666396332323762376532353165663564613836393534663330363864646232643836353233 30326338306662666365653863393265653431396465306332663463613561386263633536323235 63633934643532343730616666616661356237616161616462643534383339313230396431653763 31653337346563666631333436626564653737393266353839636162313330333063623433366566 35646432356639613936353939643762656435666666373962623336666233363534626161323836 32643864353639363537346232353762333232643763373331613864363932623530653538353062 31336639343037643037623938346166323630393232333266323965636437303166653863653730 64373837346432386139616131383931623563373064316461613461383864626266663566316262 37366436656536343339643730613732306364326462636232373637613736633436636434653563 31373563646334366435386339316430646431343763623739366163353063653338656166303534 65356464343766653565613265633663623539373238633934623266636139383438643261623662 30333639353431326336343833393766623136303662646162633930353364663662303731343332 35326432353131336436613564666539646431363833373062343237353235613963356137643430 64613962623932386462336439653732653733653533663762613561623038656365666237356130 63383065633462303337323566316364356631653230633864366530373262306330393037633665 34396163623034366430303030373435323164373461626132366633306539656334303237303864 35636136383736613232656638313535386161663034636532616631626530363234303130356530 62656164313464333335663433666437636431363233646564663135343539326263643935633662 62636336666139633762316439313937396539346436316235363135346138383630303034313035 63623631306565323264626661626262653662313734336232643438303431656565303963313437 63363365323532653963623065366635366133646635636130616539393739643266666336623432 37666562653532363964613763353462326631316566363633643566653663663535656130363135 62386531386533366632333564393431303466303465333537656334373562623462356237383363 34373838333466303536643639306635636638396365383537323162343236393533623436333537 66613731363534663235373631353162333235393836653463643131643633356633343363636234 38633238643339633636643834333036643237313238633138343039643534353163626235323630 37376364373366343164656566646531383336313834333136633364303438623739366634346138 61643735626236623664353236323239363362643737363561306661386235353937353763306232 64666532393436306134366336303363313935383831313037353738313863353431393263383830 39653233663866396437303635303735656434656634653937663465303638363861316332333161 63343439353563653864353339333034633465343030326134316235373565353536323366303834 36316535623961383338663530646434386332366132383035356462643565666332626265383130 39353464366663363437336631613366366633623831313631383132323462316264383264366566 32356137303233363564383038363838646338646637663135343334353162343461323538646539 32336137666238643830313661333534333835633762393139323561373066376261316363383861 30643635303561643834323864643339643363643932356233303965626433613638396536393465 39333535646634363239386134303535613532383165343436666164626662373263333635383537 64316638396333656265343830616633363039626466653932643334663132663039653865323166 30656633356532663561643863653266633766333163336264333836623831383266323632356431 36333261326631663835633763323561626330663838353065333434336565313865353836383162 66643639346465613135336335376661303831303865613836313736643433303334333836336637 66643136336336663065363530306532316564376633376338363332333439356338306365643466 39386334333563313239376165616166323735393639363262653533383835623634626230363830 37326666313663373439383065656662366665643539326663393663316531356132333235626130 65613962396665323039323561666138363331626562346363623431626531383931626265346238 39623266373135363735646635656530653463343862386538633066626134653730633337316330 66353131646638613866316436353536373633646232653331313138356437646136383330663430 66363330343861386139333435386132326531313835383062653635306463386433353932373062 34366335373432336638383261316132373437333030623730633034353965383336646465376238 32613338396166343365656464313562313934303238316466656431366538316533353331633664 39653965333961386462393530653036653566643634643262623435623538343562356635313935 38656130363161623039303438393137323466373031623739636364646633616162393962336466 36323430386234356236653563393362306466353565313733326330613966313564663564656466 32323935313533643731666135633035633336623966373338623734633361323463616464643366 33633735383331623331373462663862383430376566363936356639316131313765313430343733 63623639316634343862643766643238616330316638663834633731333430613863313564643463 34343466393732363861363434366464623461323434653637336465323163313734666339353833 61653538393137333638643633366464663833356138393939653030333537356361613238396564 33653833666639326562343032643561616463623131666361643933373538636665346666316639 34343230626365623466643462613232373038633239646364653432623430313735383637626630 66343030373033313731356234636630383266383565396336303037393030363163623034383639 32316635353838636238343737343564353238333661336436336266393538353138663861323963 64326664656436363464383665376334373862396666373837656237353364353034653262613539 36333031626265623537656537646239323764383937373939643661373963323332393835663735 31373264616664346239363437326139636138643730666465313962306432643263353362646362 62323937663334623037326632373966353665393166636563643130393437313263643739303131 62663939323831373431633263666337356662646535336666326665343062383930346635656562 65326436356430646339383864663565366264653362313862623361373138356634386562313834 33323865373431316630623533643336636331656562326539616334633435313835323537303933 30643435333565666330396339386364316434326439626132656638666531383561653832643962 66353731303934366463613335343164353337616434633132666435653363356664616336363438 30373964323835396438666133333965663939653731373564396431366232393762386639333330 36303632613564363266333265363432366365623264393637653937383231613865613336646630 32396430643666353066626131373863623733633038613765313361386334386133326638303536 30373266653536383062616231326330313261313137616631313736653839646435346137343139 32393435636538313161383231666236303334316233626130303661373464303235336562396234 37333261366239366138613533643535613630663034306363623336633238616235636239366239 38373336306266656465616331646233316337386263646563633366666330353437386536336163 61373432623530353736363430396535636532373235653036306465653436656330666463623963 63333633346462626463613465643765613363363434313933333139633462343031313635363834 38386663326237346639653830633031626162663662663961613266613838613535363234356431 32623832656136663733333165643437663733313536353761346361653638333265633933306263 35393663643337396432643933396337623839313832376534613162393732316234343434363961 38363362383365623035646364313031633161636534326262323865323139363937656565383562 33333832316334323636616538663263373038356538613765316666623232626566346464333065 34663266633732393961636338386538326266666463616636623865633836353532383162643330 39323831306237366435313261393839653335326430373835356333626639383930316263356334 35653730646363636234663532616239303563383932353964653566313035343736656436623764 37396334633366663365616438333761393362666234303234626163663939393431373561326264 62356163383262393437373835303830393530356163313930643233313066366338633036333936 35366339646162396234376232336235383232373937393336313831336464366230383566356438 33313338646464333135346636656137656537376536666233643161393235386462316365653037 35616666303531353031663261633962613836653236366561366537646235393165346238303663 31666434653339626462306334643339336139353135333435346263333038363934313063623763 63366434346332383466633962353331623761373834643437396438353066383763643334373432 32356534323862376335623136346465636438633635653539633965623930613238356130363261 36666231376164646431313736376665346533346662666333626236376332626438323438633161 64343566343432643236626436376230353465393165323636356561343432656132303364396138 64323636666238353663613565623232646234646136633935636538306261613337643539643232 34656661306330376331643332393261626439373361356361356666393034663064323538316432 35393562326234633436623362373639303363383462353832373231376666373633323334363165 66386566666131343562303435383663303732646566643239663166633162333964613137333731 35633335646530666666643134636366343363323931336563326436663433363732373662363232 36633437373634303337343537646130323232373833663734386136666563353465666230663664 61373063343932616566653862363339393665646430663733343862666663303562643536646536 62373462646531336636313135353932303636326463346631376130386638616130626162346238 37653666303062623630363165343935366634636561383330623734306232333634623435376238 65303662646231373633636432316262323636343763333361333365653765323035333734303035 39653235386666356335626161656331383161646464356232326337343832363665653831633133 35393566613237303932643765643461303365343633386266363535633261346338346531663462 62326635633866353035346131653239383236383065663130656636653936383561393235343761 38363739653638313839356238373839663033333437353162613430616537333264303161613863 37643062376361326364356430306361333230316361396634393466323130613564316331363739 31363637333432336635383266656266653234633762376664326564623136376533356631393833 34313334313863306335383233373331616330386630333362366332633862386664313065643563 33316462616332313661613565313736633163376263646138396266373161393336306334653536 386637316266366533616261663035613533363637363361326166313865393736373532376
#!/usr/bin/env python
#
# Copyright (c) 2016 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from __future__ import print_function
import sys, os, logging, collections, struct, json, threading
logging.basicConfig(level=logging.DEBUG)
import vpp_api
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
class VPP():
def __init__(self, apifiles):
self.messages = {}
self.id_names = []
self.id_msgdef = []
self.buffersize = 10000
self.connected = False
self.header = struct.Struct('>HI')
self.results = {}
self.timeout = 5
self.apifile = []
for file in apifiles:
self.apifile.append(file)
with open(file) as apidef_file:
api = json.load(apidef_file)
for t in api['types']:
self.add_type(t[0], t[1:])
for m in api['messages']:
self.add_message(m[0], m[1:])
# Basic sanity check
if not 'control_ping' in self.messages:
raise ValueError(1, 'Error in JSON message definitions')
class ContextId(object):
def __init__(self):
self.context = 0
def __call__(self):
self.context += 1
return self.context
get_context = ContextId()
def status(self):
print('Connected') if self.connected else print('Not Connected')
print('Read API definitions from', self.apifile)
def __struct (self, t, n = None, e = 0, vl = None):
base_types = { 'u8' : 'B',
'u16' : 'H',
'u32' : 'I',
'i32' : 'i',
'u64' : 'Q',
'f64' : 'd',
}
pack = None
if t in base_types:
pack = base_types[t]
if not vl:
if e and t == 'u8':
# Fixed byte array
return struct.Struct('>' + str(e) + 's')
if e:
# Fixed array of base type
return [e, struct.Struct('>' + base_types[t])]
else:
# Variable length array
return [vl, struct.Struct('>s')] if t == 'u8' else [vl, struct.Struct('>' + base_types[t])]
return struct.Struct('>' + base_types[t])
if t in self.messages:
### Return a list in case of array ###
if e and not vl:
return [e, lambda self, encode, buf, offset, args: (
self.__struct_type(encode, self.messages[t], buf, offset, args)
)]
if vl:
return [vl, lambda self, encode, buf, offset, args: (
self.__struct_type(encode, self.messages[t], buf, offset, args)
)]
return lambda self, encode, buf, offset, args: (
self.__struct_type(encode, self.messages[t], buf, offset, args)
)
raise ValueError
def __struct_type(self, encode, msgdef, buf, offset, kwargs):
if encode:
return self.__struct_type_encode(msgdef, buf, offset, kwargs)
else:
return self.__struct_type_decode(msgdef, buf, offset)
def __struct_type_encode(self, msgdef, buf, offset, kwargs):
off = offset
size = 0
for k in kwargs:
if k not in msgdef['args']:
raise ValueError(1, 'Invalid field-name in message call ' + k)
for k,v in msgdef['args'].iteritems():
off += size
if k in kwargs:
if type(v) is list:
if callable(v[1]):
if v[0] in kwargs:
e = kwargs[v[0]]
else:
e = v[0]
size = 0
for i in range(e):
size += v[1](self, True, buf, off + size,
kwargs[k][i])
else:
if v[0] in kwargs:
l = kwargs[v[0]]
else:
l = len(kwargs[k])
if v[1].size == 1:
buf[off:off + l] = bytearray(kwargs[k])
size = l
else:
size = 0
for i in kwargs[k]:
v[1].pack_into(buf, off + size, i)
size += v[1].size
else:
if callable(v):
size = v(self, True, buf, off, kwargs[k])
else:
v.pack_into(buf, off, kwargs[k])
size = v.size
else:
size = v.size if not type(v) is list else 0
return off + size - offset
def __getitem__(self, name):
if name in self.messages:
return self.messages[name]
return None
def encode(self, msgdef, kwargs):
# Make suitably large buffer
buf = bytearray(self.buffersize)
offset = 0
size = self.__struct_type(True, msgdef, buf, offset, kwargs)
return buf[:offset + size]
def decode(self, msgdef, buf):
return self.__struct_type(False, msgdef, buf, 0, None)[1]
def __struct_type_decode(self, msgdef, buf, offset):
res = []
off = offset
size = 0
for k,v in msgdef['args'].iteritems():
off += size
if type(v) is list:
lst = []
if callable(v[1]): # compound type
size = 0
if v[0] in msgdef['args']: # vla
e = int(res[-1])
else: # fixed array
e = v[0]
res.append(lst)
for i in range(e):
(s,l) = v[1](self, False, buf, off + size, None)
lst.append(l)
size += s
continue
if v[1].size == 1:
size = int(res[-1])
res.append(buf[off:off + size])
else:
e = int(res[-1])
if e == 0:
raise ValueError
lst = []
res.append(lst)
size = 0
for i in range(e):
lst.append(v[1].unpack_from(buf, off + size)[0])
size += v[1].size
else:
if callable(v):
(s,l) = v(self, False, buf, off, None)
res.append(l)
size += s
else:
res.append(v.unpack_from(buf, off)[0])
size = v.size
return off + size - offset, msgdef['return_tuple']._make(res)
def ret_tup(self, name):
if name in self.messages and 'return_tuple' in self.messages[name]:
return self.messages[name]['return_tuple']
return None
def add_message(self, name, msgdef):
if name in self.messages:
raise ValueError('Duplicate message name: ' + name)
args = collections.OrderedDict()
fields = []
msg = {}
for f in msgdef:
if type(f) is dict and 'crc' in f:
msg['crc'] = f['crc']
continue
field_name = f[1]
args[field_name] = self.__struct(*f)
fields.append(field_name)
msg['return_tuple']