-static void vl_api_sw_interface_virtio_pci_details_t_handler
- (vl_api_sw_interface_virtio_pci_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
-
- typedef union
- {
- struct
- {
- u16 domain;
- u8 bus;
- u8 slot:5;
- u8 function:3;
- };
- u32 as_u32;
- } pci_addr_t;
- pci_addr_t addr;
-
- addr.domain = ntohs (mp->pci_addr.domain);
- addr.bus = mp->pci_addr.bus;
- addr.slot = mp->pci_addr.slot;
- addr.function = mp->pci_addr.function;
-
- u8 *pci_addr = format (0, "%04x:%02x:%02x.%x", addr.domain, addr.bus,
- addr.slot, addr.function);
-
- print (vam->ofp,
- "\n%-12s %-12d %-12d %-12d %-17U 0x%-08llx",
- pci_addr, ntohl (mp->sw_if_index),
- ntohs (mp->rx_ring_sz), ntohs (mp->tx_ring_sz),
- format_ethernet_address, mp->mac_addr,
- clib_net_to_host_u64 (mp->features));
- vec_free (pci_addr);
-}
-
-static void vl_api_sw_interface_virtio_pci_details_t_handler_json
- (vl_api_sw_interface_virtio_pci_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- vat_json_node_t *node = NULL;
- vlib_pci_addr_t pci_addr;
-
- if (VAT_JSON_ARRAY != vam->json_tree.type)
- {
- ASSERT (VAT_JSON_NONE == vam->json_tree.type);
- vat_json_init_array (&vam->json_tree);
- }
- node = vat_json_array_add (&vam->json_tree);
-
- pci_addr.domain = ntohs (mp->pci_addr.domain);
- pci_addr.bus = mp->pci_addr.bus;
- pci_addr.slot = mp->pci_addr.slot;
- pci_addr.function = mp->pci_addr.function;
-
- vat_json_init_object (node);
- vat_json_object_add_uint (node, "pci-addr", pci_addr.as_u32);
- vat_json_object_add_uint (node, "sw_if_index", ntohl (mp->sw_if_index));
- vat_json_object_add_uint (node, "rx_ring_sz", ntohs (mp->rx_ring_sz));
- vat_json_object_add_uint (node, "tx_ring_sz", ntohs (mp->tx_ring_sz));
- vat_json_object_add_uint (node, "features",
- clib_net_to_host_u64 (mp->features));
- vat_json_object_add_string_copy (node, "mac_addr",
- format (0, "%U", format_ethernet_address,
- &mp->mac_addr));
-}
-
-static int
-api_sw_interface_virtio_pci_dump (vat_main_t * vam)
-{
- vl_api_sw_interface_virtio_pci_dump_t *mp;
- vl_api_control_ping_t *mp_ping;
- int ret;
-
- print (vam->ofp,
- "\n%-12s %-12s %-12s %-12s %-17s %-08s",
- "pci_addr", "sw_if_index", "rx_ring_sz", "tx_ring_sz",
- "mac_addr", "features");
-
- /* Get list of tap interfaces */
- M (SW_INTERFACE_VIRTIO_PCI_DUMP, mp);
- S (mp);
-
- /* Use a control ping for synchronization */
- MPING (CONTROL_PING, mp_ping);
- S (mp_ping);
-
- W (ret);
- return ret;
-}
-