Skip to content

Commit 8f5ae8f

Browse files
committed
net: remove neighbor solicit code
Thanks to the socket fallback, out-of-band neighbor solicitation is no longer required. When starting up (with an empty neighbor table), Firedancer steers all packets through sockets. This socket traffic will slowely populate the neighbor table with entries, which then causes traffic to get steered over the high performance path.
1 parent 640ea38 commit 8f5ae8f

File tree

15 files changed

+39
-469
lines changed

15 files changed

+39
-469
lines changed

book/api/metrics-generated.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -698,10 +698,6 @@
698698
| <span class="metrics-name">netlnk_&#8203;interface_&#8203;count</span> | gauge | Number of network interfaces |
699699
| <span class="metrics-name">netlnk_&#8203;route_&#8203;count</span><br/>{route_&#8203;table="<span class="metrics-enum">local</span>"} | gauge | Number of IPv4 routes (Local) |
700700
| <span class="metrics-name">netlnk_&#8203;route_&#8203;count</span><br/>{route_&#8203;table="<span class="metrics-enum">main</span>"} | gauge | Number of IPv4 routes (Main) |
701-
| <span class="metrics-name">netlnk_&#8203;neigh_&#8203;probe_&#8203;sent</span> | counter | Number of neighbor solicit requests sent to kernel |
702-
| <span class="metrics-name">netlnk_&#8203;neigh_&#8203;probe_&#8203;fails</span> | counter | Number of neighbor solicit requests that failed to send (kernel too slow) |
703-
| <span class="metrics-name">netlnk_&#8203;neigh_&#8203;probe_&#8203;rate_&#8203;limit_&#8203;host</span> | counter | Number of neighbor solicit that exceeded the per-host rate limit |
704-
| <span class="metrics-name">netlnk_&#8203;neigh_&#8203;probe_&#8203;rate_&#8203;limit_&#8203;global</span> | counter | Number of neighbor solicit that exceeded the global rate limit |
705701

706702
</div>
707703

book/guide/internals/netlink.md

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -71,33 +71,12 @@ inputs.
7171
Neighbor table updates are forwarded ot the netlink tile. This path
7272
has limited throughput (few ~100K updates per second).
7373

74-
- `[untrusted traffic] --> [net tile] --> [app tile]` <br/>
75-
`--> [net tile] --> [netlink tile] --> [neighbor discovery]` <br/>
76-
App tiles will blindly respond to the source IP found in untrusted
77-
packets. This source IP can be spoofed. Neighbor solicitation might
78-
be required in order to find out the MAC address of that IP. On IPv4,
79-
these are ARP requests broadcasted to the local network.
80-
81-
Net tiles cannot solicit neighbors directly, so they notify the
82-
netlink tile that neighbor solicitation is needed. (Potentially at
83-
line rate if network configuration is part of a huge subnet)
84-
85-
The netlink tile will deduplicate these requests and forward them to
86-
the kernel.
87-
88-
This path is the only direct 'untrusted traffic' -> 'netlink tile'
89-
data flow, so the internal neighbor solicit message format is kept
90-
as simple as possible for security.
91-
9274
### Neighbor discovery (ARP)
9375

9476
A concurrent open addressed hash table is used to store ARP entries
9577
(henceforth called "neighbor table"). This table attempts to
9678
continuously stay in sync with the kernel.
9779

98-
The netlink tile requests neighbor solicitations via the netlink
99-
equivalent of `ip neigh add dev DEVICE IP use`.
100-
10180
### Routing
10281

10382
The Firedancer network stack supports very simple routing tables as

src/disco/metrics/generated/fd_metrics_netlnk.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,4 @@ const fd_metrics_meta_t FD_METRICS_NETLNK[FD_METRICS_NETLNK_TOTAL] = {
1111
DECLARE_METRIC( NETLNK_INTERFACE_COUNT, GAUGE ),
1212
DECLARE_METRIC_ENUM( NETLNK_ROUTE_COUNT, GAUGE, ROUTE_TABLE, LOCAL ),
1313
DECLARE_METRIC_ENUM( NETLNK_ROUTE_COUNT, GAUGE, ROUTE_TABLE, MAIN ),
14-
DECLARE_METRIC( NETLNK_NEIGH_PROBE_SENT, COUNTER ),
15-
DECLARE_METRIC( NETLNK_NEIGH_PROBE_FAILS, COUNTER ),
16-
DECLARE_METRIC( NETLNK_NEIGH_PROBE_RATE_LIMIT_HOST, COUNTER ),
17-
DECLARE_METRIC( NETLNK_NEIGH_PROBE_RATE_LIMIT_GLOBAL, COUNTER ),
1814
};

src/disco/metrics/generated/fd_metrics_netlnk.h

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,29 +48,5 @@
4848
#define FD_METRICS_GAUGE_NETLNK_ROUTE_COUNT_LOCAL_OFF (23UL)
4949
#define FD_METRICS_GAUGE_NETLNK_ROUTE_COUNT_MAIN_OFF (24UL)
5050

51-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_SENT_OFF (25UL)
52-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_SENT_NAME "netlnk_neigh_probe_sent"
53-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_SENT_TYPE (FD_METRICS_TYPE_COUNTER)
54-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_SENT_DESC "Number of neighbor solicit requests sent to kernel"
55-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_SENT_CVT (FD_METRICS_CONVERTER_NONE)
56-
57-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_FAILS_OFF (26UL)
58-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_FAILS_NAME "netlnk_neigh_probe_fails"
59-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_FAILS_TYPE (FD_METRICS_TYPE_COUNTER)
60-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_FAILS_DESC "Number of neighbor solicit requests that failed to send (kernel too slow)"
61-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_FAILS_CVT (FD_METRICS_CONVERTER_NONE)
62-
63-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_HOST_OFF (27UL)
64-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_HOST_NAME "netlnk_neigh_probe_rate_limit_host"
65-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_HOST_TYPE (FD_METRICS_TYPE_COUNTER)
66-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_HOST_DESC "Number of neighbor solicit that exceeded the per-host rate limit"
67-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_HOST_CVT (FD_METRICS_CONVERTER_NONE)
68-
69-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_GLOBAL_OFF (28UL)
70-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_GLOBAL_NAME "netlnk_neigh_probe_rate_limit_global"
71-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_GLOBAL_TYPE (FD_METRICS_TYPE_COUNTER)
72-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_GLOBAL_DESC "Number of neighbor solicit that exceeded the global rate limit"
73-
#define FD_METRICS_COUNTER_NETLNK_NEIGH_PROBE_RATE_LIMIT_GLOBAL_CVT (FD_METRICS_CONVERTER_NONE)
74-
75-
#define FD_METRICS_NETLNK_TOTAL (13UL)
51+
#define FD_METRICS_NETLNK_TOTAL (9UL)
7652
extern const fd_metrics_meta_t FD_METRICS_NETLNK[FD_METRICS_NETLNK_TOTAL];

src/disco/metrics/metrics.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -896,10 +896,6 @@ metric introduced.
896896
<counter name="Updates" enum="NetlinkMsg" summary="Number of netlink live updates processed" />
897897
<gauge name="InterfaceCount" summary="Number of network interfaces" />
898898
<gauge name="RouteCount" enum="RouteTable" summary="Number of IPv4 routes" />
899-
<counter name="NeighProbeSent" summary="Number of neighbor solicit requests sent to kernel" />
900-
<counter name="NeighProbeFails" summary="Number of neighbor solicit requests that failed to send (kernel too slow)" />
901-
<counter name="NeighProbeRateLimitHost" summary="Number of neighbor solicit that exceeded the per-host rate limit" />
902-
<counter name="NeighProbeRateLimitGlobal" summary="Number of neighbor solicit that exceeded the global rate limit" />
903899
</tile>
904900

905901
<tile name="snaprd">

src/disco/net/fd_net_tile_topo.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ setup_xdp_tile( fd_topo_t * topo,
1515
ulong const * tile_to_cpu,
1616
fd_config_net_t const * net_cfg ) {
1717
fd_topo_tile_t * tile = fd_topob_tile( topo, "net", "net", "metric_in", tile_to_cpu[ topo->tile_cnt ], 0, 0 );
18-
fd_topob_link( topo, "net_netlnk", "net_netlnk", 128UL, 0UL, 0UL );
19-
fd_topob_tile_in( topo, "netlnk", 0UL, "metric_in", "net_netlnk", i, FD_TOPOB_UNRELIABLE, FD_TOPOB_POLLED );
20-
fd_topob_tile_out( topo, "net", i, "net_netlnk", i );
2118
fd_netlink_topo_join( topo, netlink_tile, tile );
2219

2320
fd_topo_obj_t * umem_obj = fd_topob_obj( topo, "dcache", "net_umem" );
@@ -81,8 +78,6 @@ fd_topos_net_tiles( fd_topo_t * topo,
8178
fd_topob_wksp( topo, "netlnk" );
8279
/* netbase: shared network config (config plane) */
8380
fd_topob_wksp( topo, "netbase" );
84-
/* net_netlnk: net->netlnk ARP requests */
85-
fd_topob_wksp( topo, "net_netlnk" );
8681

8782
fd_topo_tile_t * netlink_tile = fd_topob_tile( topo, "netlnk", "netlnk", "metric_in", tile_to_cpu[ topo->tile_cnt ], 0, 0 );
8883
fd_netlink_topo_create( netlink_tile, topo, netlnk_max_routes, netlnk_max_peer_routes, netlnk_max_neighbors, net_cfg->interface );

src/disco/net/xdp/fd_xdp_tile.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
#include "../fd_find_16x16.h"
1313
#include "../../metrics/fd_metrics.h"
14-
#include "../../netlink/fd_netlink_tile.h" /* neigh4_solicit */
14+
#include "../../netlink/fd_netlink_tile.h"
1515
#include "../../topo/fd_topo.h"
1616

1717
#include "../../../waltz/ip/fd_fib4.h"
@@ -247,7 +247,6 @@ typedef struct {
247247
fd_fib4_t const * fib_local;
248248
fd_fib4_t const * fib_main;
249249
fd_neigh4_hmap_t neigh4[1];
250-
fd_netlink_neigh4_solicit_link_t neigh4_solicit[1];
251250

252251
/* Netdev table */
253252
fd_dbl_buf_t * netdev_dbl_buf; /* remote copy of device table */

src/disco/netlink/fd_netlink_tile.c

Lines changed: 3 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ populate_allowed_seccomp( fd_topo_t const * topo,
110110
struct sock_filter * out ) {
111111
fd_netlink_tile_ctx_t * ctx = fd_topo_obj_laddr( topo, tile->tile_obj_id );
112112
FD_TEST( ctx->magic==FD_NETLINK_TILE_CTX_MAGIC );
113-
populate_sock_filter_policy_netlink( out_cnt, out, (uint)fd_log_private_logfile_fd(), (uint)ctx->nl_monitor->fd, (uint)ctx->nl_req->fd, (uint)ctx->prober->sock_fd );
113+
populate_sock_filter_policy_netlink( out_cnt, out, (uint)fd_log_private_logfile_fd(), (uint)ctx->nl_monitor->fd, (uint)ctx->nl_req->fd );
114114
return sock_filter_policy_netlink_instr_cnt;
115115
}
116116

@@ -122,15 +122,14 @@ populate_allowed_fds( fd_topo_t const * topo,
122122
fd_netlink_tile_ctx_t * ctx = fd_topo_obj_laddr( topo, tile->tile_obj_id );
123123
FD_TEST( ctx->magic==FD_NETLINK_TILE_CTX_MAGIC );
124124

125-
if( FD_UNLIKELY( out_fds_cnt<5UL ) ) FD_LOG_ERR(( "out_fds_cnt too low (%lu)", out_fds_cnt ));
125+
if( FD_UNLIKELY( out_fds_cnt<4UL ) ) FD_LOG_ERR(( "out_fds_cnt too low (%lu)", out_fds_cnt ));
126126

127127
ulong out_cnt = 0UL;
128128
out_fds[ out_cnt++ ] = 2; /* stderr */
129129
if( FD_LIKELY( -1!=fd_log_private_logfile_fd() ) )
130130
out_fds[ out_cnt++ ] = fd_log_private_logfile_fd(); /* logfile */
131131
out_fds[ out_cnt++ ] = ctx->nl_monitor->fd;
132132
out_fds[ out_cnt++ ] = ctx->nl_req->fd;
133-
out_fds[ out_cnt++ ] = ctx->prober->sock_fd;
134133
return out_cnt;
135134
}
136135

@@ -168,11 +167,6 @@ privileged_init( fd_topo_t * topo,
168167
FD_LOG_ERR(( "bind(sock,RT_NETLINK,RTMGRP_{LINK,NEIGH,IPV4_ROUTE}) failed (%i-%s)", errno, fd_io_strerror( errno ) ));
169168
}
170169

171-
float const max_probes_per_second = 3.f;
172-
ulong const max_probe_burst = 128UL;
173-
float const probe_delay_seconds = 15.f;
174-
fd_neigh4_prober_init( ctx->prober, max_probes_per_second, max_probe_burst, probe_delay_seconds );
175-
176170
/* Set duration of blocking reads in before_credit */
177171
struct timeval tv = { .tv_usec = 2000 }; /* 2ms */
178172
if( FD_UNLIKELY( 0!=setsockopt( ctx->nl_monitor->fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(struct timeval) ) ) ) {
@@ -204,10 +198,7 @@ unprivileged_init( fd_topo_t * topo,
204198
ctx->fib4_local = fd_fib4_join( fd_topo_obj_laddr( topo, tile->netlink.fib4_local_obj_id ) ); FD_TEST( ctx->fib4_local );
205199
ctx->fib4_main = fd_fib4_join( fd_topo_obj_laddr( topo, tile->netlink.fib4_main_obj_id ) ); FD_TEST( ctx->fib4_main );
206200

207-
for( ulong i=0UL; i<tile->in_cnt; i++ ) {
208-
fd_topo_link_t * link = &topo->links[ tile->in_link_id[ i ] ];
209-
if( FD_UNLIKELY( link->mtu!=0UL ) ) FD_LOG_ERR(( "netlink solicit links must have an MTU of zero" ));
210-
}
201+
if( FD_UNLIKELY( tile->in_cnt!=0 ) ) FD_LOG_ERR(( "netlink tile had unexpected input links" ));
211202

212203
ctx->action |= FD_NET_TILE_ACTION_LINK_UPDATE;
213204
ctx->action |= FD_NET_TILE_ACTION_ROUTE4_UPDATE;
@@ -232,10 +223,6 @@ metrics_write( fd_netlink_tile_ctx_t * ctx ) {
232223
FD_MGAUGE_SET( NETLNK, INTERFACE_COUNT, ctx->netdev_tbl->hdr->dev_cnt );
233224
FD_MGAUGE_SET( NETLNK, ROUTE_COUNT_LOCAL, fd_fib4_cnt( ctx->fib4_local ) );
234225
FD_MGAUGE_SET( NETLNK, ROUTE_COUNT_MAIN, fd_fib4_cnt( ctx->fib4_main ) );
235-
FD_MCNT_SET( NETLNK, NEIGH_PROBE_SENT, ctx->metrics.neigh_solicits_sent );
236-
FD_MCNT_SET( NETLNK, NEIGH_PROBE_FAILS, ctx->metrics.neigh_solicits_fails );
237-
FD_MCNT_SET( NETLNK, NEIGH_PROBE_RATE_LIMIT_HOST, ctx->prober->local_rate_limited_cnt );
238-
FD_MCNT_SET( NETLNK, NEIGH_PROBE_RATE_LIMIT_GLOBAL, ctx->prober->global_rate_limited_cnt );
239226
}
240227

241228
/* netlink_monitor_read calls recvfrom to process a link, route, or
@@ -337,81 +324,6 @@ before_credit( fd_netlink_tile_ctx_t * ctx,
337324

338325
}
339326

340-
/* after_poll_overrun is called when fd_stem.c was overrun while
341-
checking for new fragments. This typically happens when
342-
before_credit takes too long (e.g. we were in a blocking netlink
343-
read) */
344-
345-
static void
346-
after_poll_overrun( fd_netlink_tile_ctx_t * ctx ) {
347-
ctx->idle_cnt = -1L;
348-
}
349-
350-
/* after_frag handles a neighbor solicit request */
351-
352-
static void
353-
after_frag( fd_netlink_tile_ctx_t * ctx,
354-
ulong in_idx,
355-
ulong seq,
356-
ulong sig,
357-
ulong sz,
358-
ulong tsorig,
359-
ulong tspub,
360-
fd_stem_context_t * stem ) {
361-
(void)in_idx; (void)seq; (void)tsorig; (void)tspub; (void)stem;
362-
363-
long now = fd_tickcount();
364-
ctx->idle_cnt = -1L;
365-
366-
/* Parse request (fully contained in sig field) */
367-
368-
if( FD_UNLIKELY( sz!=0UL ) ) {
369-
FD_LOG_WARNING(( "unexpected sz %lu", sz ));
370-
}
371-
if( FD_UNLIKELY( sig>>48 ) ) {
372-
FD_LOG_WARNING(( "unexpected high bits in sig %016lx", sig ));
373-
}
374-
ushort if_idx = (ushort)(sig>>32);
375-
uint ip4_addr = (uint)sig;
376-
if( FD_UNLIKELY( if_idx!=ctx->neigh4_ifidx ) ) {
377-
ctx->metrics.neigh_solicits_fails++;
378-
FD_LOG_ERR(( "received neighbor solicit request for invalid interface index %u", if_idx ));
379-
return;
380-
}
381-
382-
/* Drop if the kernel is already working on the request */
383-
384-
fd_neigh4_hmap_query_t query[1];
385-
int spec_res = fd_neigh4_hmap_query_try( ctx->neigh4, &ip4_addr, NULL, query, 0 );
386-
if( spec_res==FD_MAP_SUCCESS ) {
387-
ctx->metrics.neigh_solicits_fails++;
388-
return;
389-
}
390-
391-
/* Insert placeholder (take above branch next time) */
392-
393-
int prepare_res = fd_neigh4_hmap_prepare( ctx->neigh4, &ip4_addr, NULL, query, 0 );
394-
if( FD_UNLIKELY( prepare_res!=FD_MAP_SUCCESS ) ) {
395-
ctx->metrics.neigh_solicits_fails++;
396-
return;
397-
}
398-
fd_neigh4_entry_t * ele = fd_neigh4_hmap_query_ele( query );
399-
ele->state = FD_NEIGH4_STATE_INCOMPLETE;
400-
ele->ip4_addr = ip4_addr;
401-
memset( ele->mac_addr, 0, 6UL );
402-
fd_neigh4_hmap_publish( query );
403-
404-
/* Trigger neighbor solicit via netlink */
405-
406-
int probe_res = fd_neigh4_probe_rate_limited( ctx->prober, ele, ip4_addr, now );
407-
if( probe_res==0 ) {
408-
ctx->metrics.neigh_solicits_sent++;
409-
} else if( probe_res>0 ) {
410-
ctx->metrics.neigh_solicits_fails++;
411-
}
412-
413-
}
414-
415327
#define STEM_BURST (1UL)
416328
#define STEM_LAZY ((ulong)13e6) /* 13ms */
417329

@@ -421,8 +333,6 @@ after_frag( fd_netlink_tile_ctx_t * ctx,
421333
#define STEM_CALLBACK_METRICS_WRITE metrics_write
422334
#define STEM_CALLBACK_DURING_HOUSEKEEPING during_housekeeping
423335
#define STEM_CALLBACK_BEFORE_CREDIT before_credit
424-
#define STEM_CALLBACK_AFTER_POLL_OVERRUN after_poll_overrun
425-
#define STEM_CALLBACK_AFTER_FRAG after_frag
426336

427337
#include "../stem/fd_stem.c"
428338

src/disco/netlink/fd_netlink_tile.h

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,6 @@
1616

1717
extern fd_topo_run_tile_t fd_tile_netlnk;
1818

19-
/* fd_netlink_neigh4_solicit_link_t holds information required to send
20-
neighbor solicitation requests to the netlink tile. */
21-
22-
struct fd_netlink_neigh4_solicit_link {
23-
fd_frag_meta_t * mcache;
24-
ulong depth;
25-
ulong seq;
26-
};
27-
28-
typedef struct fd_netlink_neigh4_solicit_link fd_netlink_neigh4_solicit_link_t;
29-
3019
struct fdctl_config;
3120

3221
FD_PROTOTYPES_BEGIN
@@ -44,21 +33,6 @@ fd_netlink_topo_join( fd_topo_t * topo,
4433
fd_topo_tile_t * netlink_tile,
4534
fd_topo_tile_t * join_tile );
4635

47-
/* fd_netlink_neigh4_solicit requests a neighbor solicitation (i.e. ARP
48-
request) for an IPv4 address. Safe to call at a high rate. The
49-
netlink tile will deduplicate requests. ip4_addr is big endian. */
50-
51-
static inline void
52-
fd_netlink_neigh4_solicit( fd_netlink_neigh4_solicit_link_t * link,
53-
uint ip4_addr,
54-
uint if_idx,
55-
ulong tspub_comp ) {
56-
ulong seq = link->seq;
57-
ulong sig = (ulong)ip4_addr | ( (ulong)if_idx<<32 );
58-
fd_mcache_publish( link->mcache, link->depth, seq, sig, 0UL, 0UL, 0UL, 0UL, tspub_comp );
59-
link->seq = fd_seq_inc( seq, 1UL );
60-
}
61-
6236
FD_PROTOTYPES_END
6337

6438
#endif /* HEADER_fd_src_disco_netlink_fd_netlink_tile_h */

src/disco/netlink/fd_netlink_tile_private.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include "../../waltz/mib/fd_dbl_buf.h"
88
#include "../../waltz/mib/fd_netdev_tbl.h"
99
#include "../../waltz/neigh/fd_neigh4_map.h"
10-
#include "../../waltz/neigh/fd_neigh4_probe.h"
1110

1211
/* FD_NETLINK_TILE_CTX_MAGIC uniquely identifies a fd_netlink_tile_ctx_t.
1312
CHange this whenever the fd_netlink_tile_ctx_t struct changes. */
@@ -46,15 +45,10 @@ struct fd_netlink_tile_ctx {
4645
uint neigh4_ifidx;
4746
long idle_cnt;
4847

49-
/* Neighbor table prober */
50-
fd_neigh4_prober_t prober[1];
51-
5248
struct {
5349
ulong link_full_syncs;
5450
ulong route_full_syncs;
5551
ulong update_cnt[ FD_METRICS_COUNTER_NETLNK_UPDATES_CNT ];
56-
ulong neigh_solicits_sent;
57-
ulong neigh_solicits_fails;
5852
} metrics;
5953
};
6054

0 commit comments

Comments
 (0)