VPP Agent#
This section describes the REST APIs supported by the VPP agent.
Note
Ligato REST APIs use 9191
as the default port number. You can change this value using one of the REST plugin configuration options.
OpenAPI#
OpenAPI (swagger) definitions provide additional details for describing, producing and consuming VPP agent REST APIs.
RESTAPI Plugin#
Description: Returns an html-formatted index of REST APIs defined in the restapi plugin urls.go.
curl -X GET http://localhost:9191/
For more details on the RESTAPI plugin, see RESTAPI.
Note
Northbound (NB) refers to the communication between external clients and a VPP agent. You manage the desired VPP agent configuration across the NB. See configuration APIs.
Southbound (SB) refers to the communication between the VPP agent and VPP data plane. VPP data plane events, notifications and runtime VPP configuration dumps occur across the SB. See dump APIs.
Dump#
The VPP agent’s /dump APIs retrieve the actual VPP runtime configuration by calling the VPP binary API/CLI API in the SB.
VPP Interfaces
- GET /dump/vpp/v2/interfaces
- GET /dump/vpp/v2/interfaces/loopback
- GET /dump/vpp/v2/interfaces/ethernet
- GET /dump/vpp/v2/interfaces/vxlan
- GET /dump/vpp/v2/interfaces/tap
- GET /dump/vpp/v2/interfaces/memif
- GET /dump/vpp/v2/interfaces/afpacket
ACL/ABF
L2
L3
- GET /dump/vpp/v2/routes
- GET /dump/vpp/v2/arps
- GET /dump/vpp/v2/ipscanneigh
- GET /dump/vpp/v2/proxyarp/interfaces
- GET /dump/vpp/v2/proxyarp/ranges
- GET /dump/vpp/v2/vrrps
NAT
- GET /dump/vpp/v2/nat/global
- GET /dump/vpp/v2/nat/dnat
- GET /dump/vpp/v2/nat/interfaces
- GET /dump/vpp/v2/nat/pools
VPP IPsec
VPP Punt Socket
Linux
- GET /dump/linux/v2/interfaces
- GET /dump/linux/v2/arps
- GET /dump/linux/v2/routes
- GET /dump/stats/linux/interfaces
VPP Interfaces#
Description: GET all interfaces.
curl -X GET http://localhost:9191/dump/vpp/v2/interfaces
Sample response:
{
"0": {
"interface": {
"name": "UNTAGGED-local0",
"type": "SOFTWARE_LOOPBACK"
},
"interface_meta": {
"sw_if_index": 0,
"sub_sw_if_index": 0,
"l2_address": "",
"internal_name": "local0",
"is_admin_state_up": false,
"is_link_state_up": false,
"link_duplex": 0,
"link_mtu": 0,
"mtu": [
0,
0,
0,
0
],
"link_speed": 0,
"sub_id": 0,
"tag": "",
"dhcp": null,
"vrf_ipv4": 0,
"vrf_ipv6": 0,
"pci": 0
}
},
"1": {
"interface": {
"name": "GigabitEthernet0/8/0",
"type": "DPDK",
"enabled": true,
"physAddress": "08:00:27:e9:b9:9b",
"ipAddresses": [
"192.168.16.1/24"
],
"mtu": 9206,
"rxModes": [
{
"mode": "POLLING"
}
],
"rxPlacements": [
{
"mainThread": true
}
]
},
"interface_meta": {
"sw_if_index": 1,
"sub_sw_if_index": 1,
"l2_address": "CAAn6bmb",
"internal_name": "GigabitEthernet0/8/0",
"is_admin_state_up": true,
"is_link_state_up": true,
"link_duplex": 2,
"link_mtu": 9206,
"mtu": [
9000,
0,
0,
0
],
"link_speed": 1000000,
"sub_id": 0,
"tag": "",
"dhcp": null,
"vrf_ipv4": 0,
"vrf_ipv6": 0,
"pci": 0
}
},
// additional interfaces
...
VPP Interfaces/Loopback#
Description: GET loopback interfaces.
curl http://localhost:9191/dump/vpp/v2/interfaces/loopback
Sample response:
{
"0": {
"interface": {
"name": "UNTAGGED-local0",
"type": "SOFTWARE_LOOPBACK",
"physAddress": "00:00:00:00:00:00"
},
"interface_meta": {
"sw_if_index": 0,
"sub_sw_if_index": 0,
"l2_address": "AAAAAAAA",
"internal_name": "local0",
"is_admin_state_up": false,
"is_link_state_up": false,
"link_duplex": 0,
"link_mtu": 0,
"mtu": [
0,
0,
0,
0
],
"link_speed": 0,
"sub_id": 0,
"tag": "",
"dhcp": null,
"vrf_ipv4": 0,
"vrf_ipv6": 0,
"pci": 0
}
},
// additional loopbacks
...
VPP Interfaces/Ethernet#
Description: GET ethernet interfaces.
curl -X GET http://localhost:9191/dump/vpp/v2/interfaces/ethernet
Sample response:
{
"1": {
"interface": {
"name": "GigabitEthernet0/8/0",
"type": "DPDK",
"enabled": true,
"physAddress": "08:00:27:da:0d:6b",
"ipAddresses": [
"192.168.16.1/24"
],
"mtu": 9206,
"rxModes": [
{
"mode": "POLLING"
}
],
"rxPlacements": [
{
"mainThread": true
}
]
},
"interface_meta": {
"sw_if_index": 1,
"sub_sw_if_index": 1,
"l2_address": "CAAn2g1r",
"internal_name": "GigabitEthernet0/8/0",
"is_admin_state_up": true,
"is_link_state_up": true,
"link_duplex": 2,
"link_mtu": 9206,
"mtu": [
9000,
0,
0,
0
],
"link_speed": 1000000,
"sub_id": 0,
"tag": "",
"dhcp": null,
"vrf_ipv4": 0,
"vrf_ipv6": 0,
"pci": 0
}
}
}
// additional ethernet interfaces
...
VPP Interfaces/Vxlan#
Description: GET vxlan interfaces.
curl -X GET http://localhost:9191/dump/vpp/v2/interfaces/vxlan
Sample response:
{
"8": {
"interface": {
"name": "vxlan-default-2",
"type": "VXLAN_TUNNEL",
"enabled": true,
"vxlan": {
"srcAddress": "192.168.16.1",
"dstAddress": "192.168.16.2",
"vni": 10
}
},
"interface_meta": {
"sw_if_index": 8,
"sub_sw_if_index": 8,
"l2_address": "",
"internal_name": "vxlan_tunnel0",
"is_admin_state_up": true,
"is_link_state_up": true,
"link_duplex": 0,
"link_mtu": 0,
"mtu": [
0,
0,
0,
0
],
"link_speed": 0,
"sub_id": 0,
"tag": "vxlan-default-2",
"dhcp": null,
"vrf_ipv4": 0,
"vrf_ipv6": 0,
"pci": 0
}
}
}
// other vxlan interfaces
...
VPP Interfaces/Tap#
Description: GET tap interfaces.
curl -X GET http://localhost:9191/dump/vpp/v2/interfaces/tap
Sample response:
{
"3": {
"interface": {
"name": "tap-vpp2",
"type": "TAP",
"enabled": true,
"physAddress": "34:3c:00:00:00:01",
"ipAddresses": [
"172.30.1.1/24"
],
"mtu": 1450,
"rxModes": [
{
"mode": "POLLING"
}
],
"rxPlacements": [
{
"mainThread": true
}
],
"tap": {
"version": 2,
"hostIfName": "tap-1755813745",
"rxRingSize": 1024,
"txRingSize": 1024
}
},
"interface_meta": {
"sw_if_index": 3,
"sub_sw_if_index": 3,
"l2_address": "NDwAAAAB",
"internal_name": "tap0",
"is_admin_state_up": true,
"is_link_state_up": true,
"link_duplex": 0,
"link_mtu": 1450,
"mtu": [
1450,
0,
0,
0
],
"link_speed": 0,
"sub_id": 0,
"tag": "tap-vpp2",
"dhcp": null,
"vrf_ipv4": 0,
"vrf_ipv6": 0,
"pci": 0
}
},
// additional tap interfaces
...
VPP Interfaces/Memif#
Description: GET memif interfaces.
http://localhost:9191/dump/vpp/v2/interfaces/memif
Sample response:
{
"2": {
"interface": {
"name": "mem01",
"type": "MEMIF",
"enabled": true,
"physAddress": "02:00:00:00:00:03",
"ipAddresses": [
"100.100.100.102/24"
],
"mtu": 1500,
"memif": {
"id": 2,
"socketFilename": "/run/vpp/memif.sock",
"ringSize": 1
}
},
"interface_meta": {
"sw_if_index": 2,
"sub_sw_if_index": 2,
"l2_address": "AgAAAAAD",
"internal_name": "memif0/2",
"is_admin_state_up": true,
"is_link_state_up": false,
"link_duplex": 0,
"link_mtu": 1500,
"mtu": [
1500,
0,
0,
0
],
"link_speed": 0,
"sub_id": 0,
"tag": "mem01",
"dhcp": null,
"vrf_ipv4": 0,
"vrf_ipv6": 0,
"pci": 0
},
}
// additional memif interfaces
...
VPP Interfaces/Afpacket#
Description: GET afpacket interfaces.
curl -X GET http://localhost:9191/dump/vpp/v2/interfaces/afpacket
VPP ACL IP#
Description: GET IP ACL entries.
curl -X GET http://localhost:9191/dump/vpp/v2/acl/ip
Sample response:
[
{
"acl": {
"name": "acl1",
"rules": [
{
"action": 1,
"ip_rule": {
"ip": {
"destination_network": "10.20.1.0/24",
"source_network": "192.168.1.2/32"
},
"tcp": {
"destination_port_range": {
"lower_port": 1150,
"upper_port": 1250
},
"source_port_range": {
"lower_port": 150,
"upper_port": 250
},
"tcp_flags_mask": 20,
"tcp_flags_value": 10
}
}
}
],
"interfaces": {}
},
"acl_meta": {
"acl_index": 0,
"acl_tag": "acl1"
}
}
]
VPP ACL MACIP#
Description: GET MACIP ACL entries.
curl -X GET http://localhost:9191/dump/vpp/v2/acl/macip
VPP ABF#
Description: GET ABF entries.
curl -X GET http://localhost:9191/dump/vpp/v2/abf
VPP L2 Bridge Domain#
Description: GET bridge domain information.
curl -X GET http://localhost:9191/dump/vpp/v2/bd
Sample response:
[
{
"bridge_domain": {
"name": "vxlanBD",
"forward": true,
"interfaces": [
{
"name": "vxlanBVI",
"bridged_virtual_interface": true,
"split_horizon_group": 1
},
{
"name": "vxlan-default-2",
"split_horizon_group": 1
}
]
},
"bridge_domain_meta": {
"bridge_domain_id": 1
}
}
]
VPP L2 FIB#
Description: GET L2 FIB information.
curl -X GET http://localhost:9191/dump/vpp/v2/fib
Sample response:
{
"12:2b:00:00:00:01": {
"fib": {
"phys_address": "12:2b:00:00:00:01",
"bridge_domain": "vxlanBD",
"outgoing_interface": "vxlanBVI",
"static_config": true,
"bridged_virtual_interface": true
},
"fib_meta": {
"bridge_domain_id": 1,
"outgoing_interface_sw_if_idx": 4
}
},
"12:2b:00:00:00:02": {
"fib": {
"phys_address": "12:2b:00:00:00:02",
"bridge_domain": "vxlanBD",
"outgoing_interface": "vxlan-default-2",
"static_config": true
},
"fib_meta": {
"bridge_domain_id": 1,
"outgoing_interface_sw_if_idx": 8
}
}
}
VPP L2 X-connect#
Description: GET L2 x-connect information.
curl -X GET http://localhost:9191/dump/vpp/v2/xc
VPP L3 Routes#
Description: GET L3 routing table entries.
curl -X GET http://localhost:9191/dump/vpp/v2/routes
Sample response:
[
{
"Route": {
"dst_network": "0.0.0.0/0",
"next_hop_addr": "192.168.16.100",
"outgoing_interface": "GigabitEthernet0/8/0",
"weight": 1
},
"Meta": {
"TableName": "",
"OutgoingIfIdx": 1,
"IsIPv6": false,
"Afi": 0,
"IsLocal": false,
"IsUDPEncap": false,
"IsUnreach": false,
"IsProhibit": false,
"IsResolveHost": false,
"IsResolveAttached": false,
"IsDvr": false,
"IsSourceLookup": false,
"NextHopID": 0,
"RpfID": 0,
"LabelStack": []
}
},
{
"Route": {
"type": 2,
"dst_network": "240.0.0.0/4",
"next_hop_addr": "0.0.0.0",
"weight": 1
},
"Meta": {
"TableName": "",
"OutgoingIfIdx": 4294967295,
"IsIPv6": false,
"Afi": 0,
"IsLocal": false,
"IsUDPEncap": false,
"IsUnreach": false,
"IsProhibit": false,
"IsResolveHost": false,
"IsResolveAttached": false,
"IsDvr": false,
"IsSourceLookup": false,
"NextHopID": 0,
"RpfID": 0,
"LabelStack": []
},
// additional routes
...
VPP L3 ARPs#
Description: GET ARP entries.
curl -X GET http://localhost:9191/dump/vpp/v2/arps
Sample response:
[
{
"Arp": {
"interface": "GigabitEthernet0/8/0",
"ip_address": "192.168.16.100",
"phys_address": "08:00:27:c9:c3:7a"
},
"Meta": {
"SwIfIndex": 1
}
},
{
"Arp": {
"interface": "vxlanBVI",
"ip_address": "192.168.30.2",
"phys_address": "12:2b:00:00:00:02",
"static": true
},
"Meta": {
"SwIfIndex": 4
}
},
{
"Arp": {
"interface": "tap-vpp2",
"ip_address": "172.30.1.2",
"phys_address": "96:55:cc:5b:35:6b"
},
"Meta": {
"SwIfIndex": 3
}
},
{
"Arp": {
"interface": "vpp-tap-054072f2c3954ab93b479d36b391f264f0096b1c1d374a4afb45ef4",
"ip_address": "10.1.1.2",
"phys_address": "02:fe:e3:99:d0:4c",
"static": true
},
"Meta": {
"SwIfIndex": 5
}
},
{
"Arp": {
"interface": "vpp-tap-400dc32e50d03aeff4718c568bf5520cdc0addc1196f3c9d58dc1ec",
"ip_address": "10.1.1.3",
"phys_address": "02:fe:d4:0d:5f:64",
"static": true
},
"Meta": {
"SwIfIndex": 6
}
},
{
"Arp": {
"interface": "vpp-tap-83dc59e9763c663bc2693ae1bd50a4982a536ccac3034518ea9e6a2",
"ip_address": "10.1.1.4",
"phys_address": "02:fe:a2:51:a7:65",
"static": true
},
"Meta": {
"SwIfIndex": 7
}
}
]
// additional ARP entries
...
VPP L3 IP Scan Neighbor#
Description: GET L3 IP scan neighbor data.
curl -X GET http://localhost:9191/dump/vpp/v2/ipscanneigh
Sampe response:
{
"mode": 1,
"scan_interval": 1,
"max_proc_time": 20,
"max_update": 10,
"scan_int_delay": 1,
"stale_threshold": 4
}
VPP L3 Proxy ARP Interfaces#
Description: GET proxy ARP interface information.
curl -X GET http://localhost:9191/dump/vpp/v2/proxyarp/interfaces
VPP L3 Proxy ARP Ranges#
Description: GET proxy ARP range information.
curl -X GET http://localhost:9191/dump/vpp/v2/proxyarp/ranges
VPP L3 VRRP#
Description: GET VRRP
curl -X GET http://localhost:9191/dump/vpp/v2/vrrps
VPP NAT Global#
Description: GET NAT global configuration information.
curl -X GET http://localhost:9191/dump/vpp/v2/nat/global
Sample response:
{
"forwarding": true,
"virtual_reassembly": {
"timeout": 2,
"max_reassemblies": 1024,
"max_fragments": 5
}
}
VPP NAT DNAT#
Description: GET destination-based NAT entries.
curl -X GET http://localhost:9191/dump/vpp/v2/nat/dnat
Sample response:
[
{
"label": "DNAT-identities",
"id_mappings": [
{
"ip_address": "192.168.16.1",
"port": 4789,
"protocol": 1
},
{
"vrf_id": 1,
"ip_address": "192.168.16.1",
"protocol": 1
},
{
"ip_address": "192.168.16.1",
"protocol": 1
}
]
},
{
"label": "default/kubernetes",
"st_mappings": [
{
"external_ip": "10.96.0.1",
"external_port": 443,
"local_ips": [
{
"local_ip": "10.20.0.2",
"local_port": 6443
}
],
"twice_nat": 2
}
]
},
// additional DNAT Mappings
...
VPP NAT Interfaces#
Description: GET interface-specific NAT information.
curl -X GET http://localhost:9191/dump/vpp/v2/nat/interfaces
Sample response:
{
"name": "tap-vpp2",
"nat_inside": true,
"nat_outside": true
},
{
"name": "vxlanBVI",
"nat_inside": true,
"nat_outside": true
},
{
"name": "vpp-tap-61c1f434be0396de2d2347cbebc51a822799f3ee78f0f98a101a816",
"nat_outside": true
},
{
"name": "vpp-tap-860ca2dd92a3a4bf0e330affcedbe17135b7695e6ccd70e06c3eacb",
"nat_inside": true,
"nat_outside": true
},
{
"name": "vpp-tap-9653fece511f2e658bcb95ec986b52532acdf540bece3652e01ff32",
"nat_outside": true
},
{
"name": "GigabitEthernet0/8/0",
"nat_outside": true,
"output_feature": true
}
VPP NAT Pool#
Description: GET NAT address pool information.
curl -X GET http://localhost:9191/dump/vpp/v2/nat/pools
Sample response:
[
{
"vrf_id": 4294967295,
"first_ip": "192.168.16.1"
},
{
"vrf_id": 4294967295,
"first_ip": "10.1.1.254",
"twice_nat": true
}
]
VPP IPsec SPD#
Description: GET IPsec security policy database (SPD) entries.
curl -X GET http://localhost:9191/dump/vpp/v2/ipsec/spds
Sample response:
[
{
"index": 1,
"interfaces": [
{
"name": "tap1"
}
]
}
]
VPP IPsec SA#
Description: GET IPsec security association (SA) entries.
curl -X GET http://localhost:9191/dump/vpp/v2/ipsec/sas
Sample response:
[
{
"Sa": {
"index": 1,
"spi": 1001,
"protocol": 1,
"crypto_alg": 1,
"crypto_key": "4a506a794f574265564551694d653768",
"integ_alg": 2,
"integ_key": "4339314b55523947594d6d3547666b45764e6a58"
},
"Meta": {
"SaID": 1,
"Interface": "",
"IfIdx": 4294967295,
"CryptoKeyLen": 0,
"IntegKeyLen": 0,
"Salt": 0,
"SeqOutbound": 0,
"LastSeqInbound": 0,
"ReplayWindow": 0,
"TotalDataSize": 0
}
}
]
VPP IPsec SP#
Description: GET IPsec security policies
curl -X GET http://localhost:9191/dump/vpp/v2/ipsec/sps
Sample response:
[
{
"spd_index": 1,
"sa_index": 1,
"priority": 5,
"is_outbound": true,
"remote_addr_start": "0.0.0.0",
"remote_addr_stop": "255.255.255.255",
"local_addr_start": "0.0.0.0",
"local_addr_stop": "255.255.255.255",
"protocol": 4,
"remote_port_start": 65535,
"local_port_start": 65535,
"action": 3
}
]
VPP Punt Socket#
Description: GET punt socket data.
curl -X GET http://localhost:9191/dump/vpp/v2/punt/sockets
Linux Interfaces#
Description: GET all Linux interfaces.
curl -X GET http://localhost:9191/dump/linux/v2/interfaces
Sample response:
[
{
"interface": {
"name": "tap-vpp1",
"type": "TAP_TO_VPP",
"hostIfName": "vpp1",
"enabled": true,
"ipAddresses": ["172.30.1.2/24"],
"physAddress": "ca:aa:bc:5d:76:9c",
"mtu": 1450,
"tap": {
"vppTapIfName": "tap-vpp2"
}
},
"interface_meta": {
"linux_if_index": 6,
"parent_index": 0,
"master_index": 0,
"oper_state": 0,
"flags": 69699,
"encapsulation": "ether",
"num_rx_queue": 0,
"num_tx_queue": 0,
"tx_queue_len": 500
}
},
// additional linux interfaces
...
Linux L3 ARPs#
Description: GET Linux L3 ARP entries.
curl -X GET http://localhost:9191/dump/linux/v2/arps
Sample response:
[
{
"linux_arp": {
"interface": "linux-tap-61c1f434be0396de2d2347cbebc51a822799f3ee78f0f98a101a8",
"ip_address": "10.1.1.1",
"hw_address": "02:fe:af:aa:51:e6"
},
"linux_arp_meta": {
"interface_index": 7,
"ip_family": 2,
"vni": 0
}
},
...
Linux Interface Stats#
Description: GET Linux interface stats.
curl -X GET http://localhost:9191/stats/linux/interfaces
Sample response:
{
"interface_name": "tap-vpp1",
"interface_type": 2,
"linux_if_index": 6,
"rx_packets": 58919,
"tx_packets": 54273,
"rx_bytes": 83203332,
"tx_bytes": 85581834,
"rx_errors": 0,
"tx_errors": 0,
"rx_dropped": 0,
"tx_dropped": 0
},
{
"interface_name": "linux-loop-61c1f434be0396de2d2347cbebc51a822799f3ee78f0f98a101a",
"interface_type": 3,
"linux_if_index": 1,
"rx_packets": 50540,
"tx_packets": 50540,
"rx_bytes": 4033092,
"tx_bytes": 4033092,
"rx_errors": 0,
"tx_errors": 0,
"rx_dropped": 0,
"tx_dropped": 0
},
...
Linux L3 Routes#
Description: GET Linux L3 routing table entries.
curl -X GET http://localhost:9191/dump/linux/v2/routes
Sample response:
[
{
"Route": {
"outgoing_interface": "tap-vpp1",
"dst_network": "10.1.0.0/16",
"gw_addr": "172.30.1.1"
},
"Meta": {
"interface_index": 6,
"link_scope": 0,
"protocol": 3,
"mtu": 0
}
},
{
"Route": {
"outgoing_interface": "tap-vpp1",
"dst_network": "10.96.0.0/12",
"gw_addr": "172.30.1.1"
},
"Meta": {
"interface_index": 6,
"link_scope": 0,
"protocol": 3,
"mtu": 0
}
},
// more Linux routes
...
Configuration#
The northbound (NB) VPP agent /configuration APIs support the GET, PUT and validate operations of VPP configuration information in the NB. This occurs between an external REST client and the agent’s plugins that expose REST APIs.
- PUT /configuration
- PUT /configuration?replace
- GET /configuration
- GET /info/configuration/jsonschema
- POST /configuration/validate
Config Update#
Description: PUT NB VPP agent configuration update
curl -X PUT -H "Content-Type: application/yaml" --data-binary @loop1.yaml http://localhost:9191/configuration
Sample loop1.yaml
configuration
# loop1.yaml
vppConfig:
interfaces:
- name: loop1
type: SOFTWARE_LOOPBACK
enabled: true
ipAddresses:
- 192.168.1.1/24
You can embed the yaml configuration in an http request body.
Config Replace#
Description: PUT NB Agent configuration update with a replacement
curl -X PUT -H "Content-Type: application/yaml" --data-binary @loop3.yaml "http://localhost:9191/configuration?replace=true"
Sample loop3.yaml
file containing the replacement configuration
vppConfig:
interfaces:
- name: "loop1"
type: SOFTWARE_LOOPBACK
enabled: true
ipAddresses:
- 192.168.1.3/24
You can embed the yaml configuration in an http request body.
Config Get#
Description: GET NB VPP agent configuration
curl -X GET http://localhost:9191/configuration
Sample output:
netallocConfig: {}
linuxConfig: {}
vppConfig:
interfaces:
- name: loop1
type: SOFTWARE_LOOPBACK
enabled: true
ipAddresses:
- 192.168.1.3/24
Config JSON Schema#
Description: GET JSON Schema for VPP agent configuration
curl -X GET http://localhost:9191/info/configuration/jsonschema
Sample response:
// Partial response
"bridgeDomains": {
"items": {
"$schema": "http://json-schema.org/draft-04/schema#",
"properties": {
"name": {
"type": "string"
},
"flood": {
"type": "boolean"
},
"unknown_unicast_flood": {
"type": "boolean"
},
"unknownUnicastFlood": {
"type": "boolean"
},
"forward": {
"type": "boolean"
},
"learn": {
"type": "boolean"
},
"arp_termination": {
"type": "boolean"
},
"arpTermination": {
"type": "boolean"
},
"mac_age": {
"type": "integer"
},
"macAge": {
"type": "integer"
},
"interfaces": {
"items": {
"$schema": "http://json-schema.org/draft-04/schema#",
Config Validate#
Description: Validates the yaml configuration
curl -X POST -H "Content-Type: application/yaml" --data-binary @good-yaml-config.yaml "http://localhost:9191/configuration/validate"
Response is nil if the validation check passes.
Sample good yaml config file:
# good yaml file
netallocConfig: {}
linuxConfig: {}
vppConfig:
interfaces:
- name: vpp-tap1
type: TAP
enabled: true
ipAddresses:
- 10.10.10.1/24
tap:
version: 2
toMicroservice: test-microservice1
- name: red
type: MEMIF
enabled: true
ipAddresses:
- 100.0.0.1/24
mtu: 9200
memif:
id: 1
socketFilename: /var/run/memif_k8s-master.sock
- name: black
type: MEMIF
enabled: true
ipAddresses:
- 192.168.20.1/24
mtu: 9200
memif:
id: 2
socketFilename: /var/run/memif_k8s-master.sock
- name: loop-test-1
type: SOFTWARE_LOOPBACK
enabled: true
ipAddresses:
- 10.10.1.1/24
mtu: 1500
srv6Global:
encapSourceAddress: 10.1.1.1
Response contains errors if the validation check fails.
Sample bad yaml config file:
netallocConfig: {}
linuxConfig: {}
vppConfig:
routes:
- type: INTRA_VRF
dstNetwork: 10.1.0.0/16
nextHopAddr: 4.10.x10.1
outgoingInterface: cgnat-to-gw
- type: INTRA_VRF
dstNetwork: 10.2.0.0/16
nextHopAddr: 5.10.10.1x
outgoingInterface: cgnat-to-gw
srv6Localsids:
- sid: A::0
endFunctionDx6:
outgoingInterface: test
nextHop: B::X
proxyArp:
ranges:
- firstIpAddr: 10.0.0.1x
lastIpAddr: 10.0.0.2
- firstIpAddr: 10.0.0.3
lastIpAddr: 10.0.0.4
Sample response after running the validate API against the bad yaml file:
[
{
"Path": "vppConfig.routes*.gw_addr",
"Error": "invalid IP address: 4.10.x10.1",
"ErrorConfigPart": "dstNetwork: 10.1.0.0/16\nnextHopAddr: 4.10.x10.1\noutgoingInterface: cgnat-to-gw\n"
},
{
"Path": "vppConfig.routes*.gw_addr",
"Error": "invalid IP address: 5.10.10.1x",
"ErrorConfigPart": "dstNetwork: 10.2.0.0/16\nnextHopAddr: 5.10.10.1x\noutgoingInterface: cgnat-to-gw\n"
},
{
"Path": "vppConfig.proxyArp.ranges.firstIpAddr",
"Error": "invalid IP address"
},
{
"Path": "vppConfig.srv6Localsids*.EndFunctionDX6.NextHop",
"Error": "failed to parse next hop B::X, should be a valid ipv6 address: \"B::X\" is not ip address",
"ErrorConfigPart": "endFunctionDx6:\n nextHop: B::X\n outgoingInterface: test\nsid: A::0\n"
}
]
You can embed the yaml configuration in an http request body.
Telemetry#
VPP Telemetry
- GET /dump/vpp/telemetry
- GET /dump/vpp/telemetry/memory
- GET /dump/vpp/telemetry/runtime
- GET /dump/vpp/telemetry/nodecount
VPP Telemetry#
Description: GET VPP telemetry information.
curl -X GET http://localhost:9191/vpp/telemetry
VPP Telemetry/Memory#
Description: GET VPP telemetry memory stats.
curl -X GET http://localhost:9191/vpp/telemetry/memory
Sample response:
{
"threads": [
{
"id": 0,
"name": "north1",
"size": 0,
"objects": 0,
"used": 0,
"total": 0,
"free": 0,
"reclaimed": 0,
"overhead": 0,
"pages": 0,
"page_size": 0
}
]
}
VPP Telemetry/Runtime#
Description: GET VPP telemetry runtime stats.
curl -X GET http://localhost:9191/vpp/telemetry/runtime
Sample response:
{
"threads": [
{
"id": 0,
"name": "ALL",
"time": 0,
"avg_vectors_per_node": 0,
"last_main_loops": 0,
"vectors_per_main_loop": 0,
"vector_length_per_node": 0,
"vector_rates_in": 0,
"vector_rates_out": 0,
"vector_rates_drop": 0,
"vector_rates_punt": 0,
"items": [
{
"index": 0,
"name": "null-node",
"state": "",
"calls": 0,
"vectors": 0,
"suspends": 0,
"clocks": 0,
"vectors_per_call": 0
},
{
"index": 1,
"name": "vmxnet3-input",
"state": "",
"calls": 0,
"vectors": 0,
"suspends": 0,
"clocks": 0,
"vectors_per_call": 0
},
// more items
...
VPP Telemetry/Nodecount#
Description: GET VPP telemetry nodecount stats.
curl -X GET http://localhost:9191/vpp/telemetry/nodecount
Sample response:
{
"counters": [
{
"value": 0,
"node": "/err/null-node",
"name": "blackholed packets"
},
{
"value": 0,
"node": "/err/vmxnet3-input",
"name": "buffer alloc error"
},
{
"value": 0,
"node": "/err/vmxnet3-input",
"name": "Rx packet error - no SOP"
},
// more counters
...
Version#
Description: GET VPP Agent Version Info
curl -X GET http://localhost:9191/info/version
Sample Response:
{
"App": "vpp-agent",
"Version": "v3.2.0-alpha-22-ge9aa3556d",
"GitCommit": "e9aa3556defe818904670e3f5051246fdd11746d",
"GitBranch": "HEAD",
"BuildUser": "root",
"BuildHost": "06a7eb7fd825",
"BuildTime": 1593781318,
"GoVersion": "go1.14.4",
"OS": "linux",
"Arch": "amd64"
}
VPP CLI#
Description: Execute VPP CLI commands through a REST API.
For a show version
command, use
curl -X POST 'http://localhost:9191/vpp/command?Content-Type=application/json' -H 'Content-Type: application/json' -d '{"vppclicommand":"show version"}'
Sample response:
"vpp v20.01-rc2~11-gfce396738~b17 built by root on b81dced13911 at 2020-01-29T21:07:15\n"
Stats/Configurator#
Description: GET configurator operations stats.
curl -X GET http://localhost:9191/stats/configurator