Created
February 24, 2021 08:44
-
-
Save cwyang/7ce2309f0b10619cd94d708049829728 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import os | |
import time | |
import fnmatch | |
from vpp_papi import VPPApiClient | |
def init_vpp(vpp_json_dir='/usr/share/vpp/api/core/'): | |
jsonfiles = [] | |
for root, dirnames, filenames in os.walk(vpp_json_dir): | |
for filename in fnmatch.filter(filenames, '*.api.json'): | |
jsonfiles.append(os.path.join(vpp_json_dir, filename)) | |
if not jsonfiles: | |
print('Error: no json api files found') | |
exit(-1) | |
return VPPApiClient(jsonfiles) | |
def papi_event_handler(msgname, result): | |
print(msgname) | |
print(result) | |
def run_loop(): | |
async = True | |
r = vpp.register_event_callback(papi_event_handler) | |
pid=os.getpid() | |
r = vpp.api.want_interface_events(enable_disable=True, pid=pid) | |
print(r) | |
# Wait for some stats | |
time.sleep(60) | |
r = vpp.api.want_interface_events(enable_disable=False) | |
r = vpp.disconnect() | |
vpp = init_vpp() | |
r = vpp.connect("test_papi") | |
rv = vpp.api.show_version() | |
print('VPP version =', rv.version.rstrip('\0x00')) | |
print(rv) | |
for intf in vpp.api.sw_interface_dump(): | |
print(intf) | |
run_loop() | |
exit(vpp.disconnect()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
python vpp api를 사용해보았습니다.
vpp src tree의 src/vpp-api/python를 타겟 머신에 풀고
sudo python3 setup.py install
로 vpp-papi를 설치하면import vpp-papi
모듈 사용이 가능하구요api를 이용해서 버젼, vpp nic 정보를 가지고 오고,
callback을 붙여서 vpp의 nic 상태가 변하게 되면 callback을 호출하는 테스트 프로그램을 해봤어요.
돌리면 이런식으로 나옵니다
로컬 머신에서 테스트 프로그램을 돌리고, 다른 창에서 nic 하나를 down하고 up해보면
이런식으로 sw_interface_event가 날아오고 보면 flag가 UP이 없어졌다가 다시 붙고있습니다