summaryrefslogtreecommitdiffstats
path: root/src/vpp-api/lua/README.md
blob: 4ecdb34d2f3f97988556a8f100a6703dee500494 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
This is the experimental version of Lua API, aimed for the luajit use.

Please take a look and send the feedback to ayourtch@gmail.com.

To run the examples here:

1) install luajit - "sudo apt-get install luajit" on ubuntu

2) "make build-vpp-api" in the top VPP directory

3) "make run" in a separate terminal window
   This ensures you have an instance of VPP running

4) sudo luajit examples/example-cli.lua

This will result in something like this:

Version:
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

{ [1] = { ["luaapi_message_name"] = show_version_reply,["program"] = vpe,["version"] = ,["build_date"] = Fri Nov 25 10:58:48 UTC 2016,["retval"] = 0,["build_directory"] = /home/ubuntu/vpp,["_vl_msg_id"] = 170,["context"] = 0,} ,}
---
{ [1] = { ["luaapi_message_name"] = cli_inband_reply,["_vl_msg_id"] = 94,["length"] = 66,["reply"] = vpp v built by ubuntu on vpp-toys at Fri Nov 25 10:58:48 UTC 2016
,["retval"] = 0,["context"] = 0,} ,}
---

5) You can also run the performance test bench:

$ sudo luajit bench.lua
10001 iterations, average speed 5624LL per second
10001 iterations, average speed 6650LL per second
10001 iterations, average speed 6053LL per second
10001 iterations, average speed 7056LL per second
10001 iterations, average speed 6388LL per second
10001 iterations, average speed 5849LL per second
10001 iterations, average speed 6321LL per second
10001 iterations, average speed 6368LL per second
10001 iterations, average speed 5958LL per second
10001 iterations, average speed 6482LL per second
Average tps across the tests: 6274LL

Note: the above is run in an lxd container running inside 2-core
xhyve VM on a Macbook Pro, so I would not take the performance numbers for granted :)

The "examples" directory contains a few naive examples, as well as a couple of more 
advanced ones - a tab-completing CLI for VPP that can call both the APIs and CLI,
and also a small test utility which I use for automating some small tests using
VPP.
ass="n">vpp_ah_protocol = (VppEnum.vl_api_ipsec_proto_t. IPSEC_API_PROTO_AH) self.ipv4_params = IPsecIPv4Params() def tearDown(self): self.pg0.unconfig_ip4() self.pg0.admin_down() super(IpsecApiTestCase, self).tearDown() def test_backend_dump(self): """ backend dump """ d = self.vapi.ipsec_backend_dump() self.assert_equal(len(d), 2, "number of ipsec backends in dump") self.assert_equal(d[0].protocol, self.vpp_ah_protocol, "ipsec protocol in dump entry") self.assert_equal(d[0].index, 0, "index in dump entry") self.assert_equal(d[0].active, 1, "active flag in dump entry") self.assert_equal(d[1].protocol, self.vpp_esp_protocol, "ipsec protocol in dump entry") self.assert_equal(d[1].index, 0, "index in dump entry") self.assert_equal(d[1].active, 1, "active flag in dump entry") def test_select_valid_backend(self): """ select valid backend """ self.vapi.ipsec_select_backend(self.vpp_ah_protocol, 0) self.vapi.ipsec_select_backend(self.vpp_esp_protocol, 0) def test_select_invalid_backend(self): """ select invalid backend """ with self.vapi.assert_negative_api_retval(): self.vapi.ipsec_select_backend(self.vpp_ah_protocol, 200) with self.vapi.assert_negative_api_retval(): self.vapi.ipsec_select_backend(self.vpp_esp_protocol, 200) def test_select_backend_in_use(self): """ attempt to change backend while sad configured """ params = self.ipv4_params addr_type = params.addr_type is_ipv6 = params.is_ipv6 scapy_tun_sa_id = params.scapy_tun_sa_id scapy_tun_spi = params.scapy_tun_spi auth_algo_vpp_id = params.auth_algo_vpp_id auth_key = params.auth_key crypt_algo_vpp_id = params.crypt_algo_vpp_id crypt_key = params.crypt_key self.vapi.ipsec_sad_entry_add_del(scapy_tun_sa_id, scapy_tun_spi, auth_algo_vpp_id, auth_key, crypt_algo_vpp_id, crypt_key, self.vpp_ah_protocol, self.pg0.local_addr[addr_type], self.pg0.remote_addr[addr_type]) with self.vapi.assert_negative_api_retval(): self.vapi.ipsec_select_backend( protocol=self.vpp_ah_protocol, index=0) self.vapi.ipsec_sad_entry_add_del(scapy_tun_sa_id, scapy_tun_spi, auth_algo_vpp_id, auth_key, crypt_algo_vpp_id, crypt_key, self.vpp_ah_protocol, self.pg0.local_addr[addr_type], self.pg0.remote_addr[addr_type], is_add=0) self.vapi.ipsec_select_backend( protocol=self.vpp_ah_protocol, index=0) if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)