+ This class processes three classes of VPP PAPI methods:
+ 1. simple request / reply: method='request',
+ 2. dump functions: method='dump',
+ 3. vpp-stats: method='stats'.
+
+ The recommended ways of use are (examples):
+
+ 1. Simple request / reply
+
+ a. One request with no arguments:
+
+ with PapiExecutor(node) as papi_exec:
+ data = papi_exec.add('show_version').get_replies().\
+ verify_reply()
+
+ b. Three requests with arguments, the second and the third ones are the same
+ but with different arguments.
+
+ with PapiExecutor(node) as papi_exec:
+ data = papi_exec.add(cmd1, **args1).add(cmd2, **args2).\
+ add(cmd2, **args3).get_replies(err_msg).verify_replies()
+
+ 2. Dump functions
+
+ cmd = 'sw_interface_rx_placement_dump'
+ with PapiExecutor(node) as papi_exec:
+ papi_resp = papi_exec.add(cmd, sw_if_index=ifc['vpp_sw_index']).\
+ get_dump(err_msg)
+
+ 3. vpp-stats
+
+ path = ['^/if', '/err/ip4-input', '/sys/node/ip4-input']
+
+ with PapiExecutor(node) as papi_exec:
+ data = papi_exec.add(api_name='vpp-stats', path=path).get_stats()
+
+ print('RX interface core 0, sw_if_index 0:\n{0}'.\
+ format(data[0]['/if/rx'][0][0]))
+
+ or
+
+ path_1 = ['^/if', ]
+ path_2 = ['^/if', '/err/ip4-input', '/sys/node/ip4-input']
+
+ with PapiExecutor(node) as papi_exec:
+ data = papi_exec.add('vpp-stats', path=path_1).\
+ add('vpp-stats', path=path_2).get_stats()
+
+ print('RX interface core 0, sw_if_index 0:\n{0}'.\
+ format(data[1]['/if/rx'][0][0]))
+
+ Note: In this case, when PapiExecutor method 'add' is used:
+ - its parameter 'csit_papi_command' is used only to keep information
+ that vpp-stats are requested. It is not further processed but it is
+ included in the PAPI history this way:
+ vpp-stats(path=['^/if', '/err/ip4-input', '/sys/node/ip4-input'])
+ Always use csit_papi_command="vpp-stats" if the VPP PAPI method
+ is "stats".
+ - the second parameter must be 'path' as it is used by PapiExecutor
+ method 'add'.