3af5e9fdba
Currently icmp_id_map[][] stores information about ping sockets in a bespoke structure. Move the same information into new types of flow in the flow table. To match that change, replace the existing ICMP timer with a flow-based timer for expiring ping sockets. This has the advantage that we only need to scan the active flows, not all possible ids. We convert icmp_id_map[][] to point to the flow table entries, rather than containing its own information. We do still use that array for locating the right ping flows, rather than using a "flow native" form of lookup for the time being. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> [sbrivio: Update id_sock description in comment to icmp_ping_new()] Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
31 lines
770 B
C
31 lines
770 B
C
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright Red Hat
|
|
* Author: David Gibson <david@gibson.dropbear.id.au>
|
|
*
|
|
* ICMP flow tracking data structures
|
|
*/
|
|
#ifndef ICMP_FLOW_H
|
|
#define ICMP_FLOW_H
|
|
|
|
/**
|
|
* struct icmp_ping_flow - Descriptor for a flow of ping requests/replies
|
|
* @f: Generic flow information
|
|
* @seq: Last sequence number sent to tap, host order, -1: not sent yet
|
|
* @sock: "ping" socket
|
|
* @ts: Last associated activity from tap, seconds
|
|
* @id: ICMP id for the flow as seen by the guest
|
|
*/
|
|
struct icmp_ping_flow {
|
|
/* Must be first element */
|
|
struct flow_common f;
|
|
|
|
int seq;
|
|
int sock;
|
|
time_t ts;
|
|
uint16_t id;
|
|
};
|
|
|
|
bool icmp_ping_timer(const struct ctx *c, union flow *flow,
|
|
const struct timespec *now);
|
|
|
|
#endif /* ICMP_FLOW_H */
|