Skip to content

Commit 4290781

Browse files
committed
disco: send transactions with metadata
1 parent 06e5430 commit 4290781

22 files changed

+239
-107
lines changed

agave

contrib/tango.lua

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,7 @@ function tango.dissector (tvb, pinfo, tree)
219219
if link_name == "net_netmux" or link_name == "quic_netmux" or link_name == "shred_netmux" or link_name == "net_quic" or link_name == "quic_net" or link_name == "shred_net" or link_name == "net_shred" then
220220
local dissector = Dissector.get("eth_withoutfcs")
221221
dissector:call(dcache_contents, pinfo, dcache_tree)
222-
elseif link_name == "gossip_dedup" then
223-
local dissector = Dissector.get("solana.tpu.udp")
224-
dissector:call(dcache_contents, pinfo, dcache_tree)
225-
elseif link_name == "verify_dedup" or link_name == "dedup_pack" or link_name == "dedup_resolv" or link_name == "resolv_pack" or link_name == "bundle_verif" then
222+
elseif link_name == "verify_dedup" or link_name == "dedup_pack" or link_name == "dedup_resolv" or link_name == "resolv_pack" or link_name == "bundle_verif" or "quic_verify" or link_name == "gossip_verif" or link_name == "send_txns" or link_name == "gossip_dedup" then
226223
local dissector = Dissector.get("fd_txn_m_t")
227224
dissector:call(dcache_contents, pinfo, dcache_tree)
228225
elseif link_name == "poh_shred" then
@@ -264,9 +261,6 @@ function tango.dissector (tvb, pinfo, tree)
264261
elseif link_name == "poh_pack" then
265262
local dissector = Dissector.get("fd_became_leader_t")
266263
dissector:call(dcache_contents, pinfo, dcache_tree)
267-
elseif link_name == "quic_verify" then
268-
local dissector = Dissector.get("solana.tpu.udp")
269-
dissector:call(dcache_contents, pinfo, dcache_tree)
270264
end
271265
end
272266

@@ -544,6 +538,16 @@ local fd_txnm = Proto("fd_txn_m_t", "FD Transaction with Payload and Metadata")
544538
-- Define fields
545539
local f_ref_slot = ProtoField.uint64("fd_txn_m_t.reference_slot", "Reference Slot" )
546540
local f_txn_t_sz = ProtoField.uint16("fd_txn_m_t.txn_t_sz", "Size of fd_txn_t")
541+
local f_source_ipv4 = ProtoField.ipv4("fd_txn_m_t.source_ipv4", "IP Address")
542+
543+
local source_tpu_enum = {
544+
[1] = "QUIC",
545+
[2] = "UDP",
546+
[4] = "GOSSIP",
547+
[8] = "BUNDLE",
548+
[16] = "SEND"
549+
}
550+
local f_source_tpu = ProtoField.uint8("fd_txn_m_t.source_tpu", "Source TPU", base.DEC, source_tpu_enum)
547551
local f_payload_sz = ProtoField.uint16("fd_txn_m_t.payload_sz", "Size of payload")
548552
local f_bundle_id = ProtoField.uint64("fd_txn_m_t.bundle_id", "Bundle ID")
549553
local f_bundle_txn_cnt = ProtoField.uint64("fd_txn_m_t.bundle_txn_cnt", "Bundle Transaction Count")
@@ -552,7 +556,7 @@ local f_bundle_pubkey = ProtoField.bytes("fd_txn_m_t.bundle_commission_pubkey",
552556
local f_alt_entry = ProtoField.bytes("fd_txn_m_t.alt_entry", "Address Lookup Table Account Address")
553557

554558
-- Add the fields to the protocol
555-
fd_txnm.fields = { f_ref_slot, f_txn_t_sz, f_payload_sz, f_bundle_id, f_bundle_txn_cnt, f_bundle_commission, f_bundle_pubkey, f_alt_entry }
559+
fd_txnm.fields = { f_ref_slot, f_txn_t_sz, f_source_ipv4, f_source_tpu, f_payload_sz, f_bundle_id, f_bundle_txn_cnt, f_bundle_commission, f_bundle_pubkey, f_alt_entry }
556560

557561
function fd_txnm.dissector(buffer, pinfo, tree)
558562
local subtree = tree:add(fd_txnm, buffer(), "fd_txn_m_t")
@@ -563,21 +567,26 @@ function fd_txnm.dissector(buffer, pinfo, tree)
563567
subtree:add_le(f_ref_slot, buffer(0, 8))
564568
subtree:add_le(f_payload_sz, buffer(8, 2))
565569
subtree:add_le(f_txn_t_sz, buffer(10, 2))
570+
subtree:add(f_source_ipv4, buffer(12, 4))
571+
subtree:add_le(f_source_tpu, buffer(16, 1))
572+
573+
subtree:add_le(f_bundle_id, buffer(24, 8))
574+
subtree:add_le(f_bundle_txn_cnt, buffer(32, 8))
575+
subtree:add_le(f_bundle_commission, buffer(40, 1))
576+
subtree:add(f_bundle_pubkey, buffer(41, 32))
577+
local payload_start = 80
566578

567-
local payload_start = 16
568-
if true then
569-
subtree:add_le(f_bundle_id, buffer(16, 8))
570-
subtree:add_le(f_bundle_txn_cnt, buffer(24, 8))
571-
subtree:add_le(f_bundle_commission, buffer(32, 1))
572-
subtree:add(f_bundle_pubkey, buffer(33, 32))
573-
payload_start = 72
574-
end
575-
576579
local payload_tree = tree:add(buffer(payload_start,payload_sz), "Solana Transaction")
577580
local udp_dissector = Dissector.get("solana.tpu.udp")
578581
udp_dissector:call(buffer(payload_start,payload_sz):tvb(), pinfo, payload_tree)
579582

580583
local offset = payload_start + payload_sz
584+
585+
-- pre-dedup frags don't have fields after the payload
586+
if offset == buffer:len() then
587+
return
588+
end
589+
581590
-- Align to 2
582591
if offset % 2 == 1 then
583592
offset = offset+1
@@ -602,6 +611,5 @@ function fd_txnm.dissector(buffer, pinfo, tree)
602611
end
603612

604613

605-
606614
local udp_port = DissectorTable.get("udp.port")
607615
udp_port:add(9001, Dissector.get("solana.tpu.udp"))

src/app/fdctl/topology.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ fd_topo_initialize( config_t * config ) {
8585
FOR(shred_tile_cnt) fd_topob_link( topo, "shred_net", "net_shred", 32768UL, FD_NET_MTU, 1UL );
8686
FOR(quic_tile_cnt) fd_topob_link( topo, "quic_verify", "quic_verify", config->tiles.verify.receive_buffer_size, FD_TPU_REASM_MTU, config->tiles.quic.txn_reassembly_count );
8787
FOR(verify_tile_cnt) fd_topob_link( topo, "verify_dedup", "verify_dedup", config->tiles.verify.receive_buffer_size, FD_TPU_PARSED_MTU, 1UL );
88-
/**/ fd_topob_link( topo, "gossip_dedup", "gossip_dedup", 2048UL, FD_TPU_MTU, 1UL );
88+
/**/ fd_topob_link( topo, "gossip_dedup", "gossip_dedup", 2048UL, FD_TPU_RAW_MTU, 1UL );
8989
/* dedup_pack is large currently because pack can encounter stalls when running at very high throughput rates that would
9090
otherwise cause drops. */
9191
/**/ fd_topob_link( topo, "dedup_resolv", "dedup_resolv", 65536UL, FD_TPU_PARSED_MTU, 1UL );

src/app/firedancer/topology.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ fd_topo_initialize( config_t * config ) {
335335

336336
FOR(exec_tile_cnt) fd_topob_link( topo, "exec_writer", "exec_writer", 128UL, FD_EXEC_WRITER_MTU, 1UL );
337337
338-
/**/ fd_topob_link( topo, "gossip_verif", "gossip_verif", config->tiles.verify.receive_buffer_size, FD_TPU_MTU, 1UL );
338+
/**/ fd_topob_link( topo, "gossip_verif", "gossip_verif", config->tiles.verify.receive_buffer_size, FD_TPU_RAW_MTU, 1UL );
339339
/**/ fd_topob_link( topo, "gossip_tower", "gossip_tower", 128UL, FD_TPU_MTU, 1UL );
340340
/**/ fd_topob_link( topo, "replay_tower", "replay_tower", 128UL, 65536UL, 1UL );
341341
/**/ fd_topob_link( topo, "tower_replay", "replay_tower", 128UL, 0, 1UL );
@@ -359,7 +359,7 @@ fd_topo_initialize( config_t * config ) {
359359
FOR(bank_tile_cnt) fd_topob_link( topo, "replay_poh", "replay_poh", 128UL, (4096UL*sizeof(fd_txn_p_t))+sizeof(fd_microblock_trailer_t), 1UL );
360360

361361
/**/ fd_topob_link( topo, "tower_send", "tower_send", 65536UL, sizeof(fd_txn_p_t), 1UL );
362-
/**/ fd_topob_link( topo, "send_txns", "send_txns", 128UL, FD_TXN_MTU, 1UL );
362+
/**/ fd_topob_link( topo, "send_txns", "send_txns", 128UL, FD_TPU_RAW_MTU, 1UL );
363363
/**/ fd_topob_link( topo, "send_sign", "send_sign", 128UL, FD_TXN_MTU, 1UL );
364364
/**/ fd_topob_link( topo, "sign_send", "sign_send", 128UL, 64UL, 1UL );
365365

src/disco/bundle/fd_bundle_client.c

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,8 @@ fd_bundle_tile_publish_bundle_txn(
446446
fd_bundle_tile_t * ctx,
447447
void const * txn,
448448
ulong txn_sz, /* <=FD_TXN_MTU */
449-
ulong bundle_txn_cnt
449+
ulong bundle_txn_cnt,
450+
uint source_ipv4
450451
) {
451452
if( FD_UNLIKELY( !ctx->builder_info_avail ) ) {
452453
ctx->metrics.missing_builder_info_fail_cnt++; /* unreachable */
@@ -457,7 +458,9 @@ fd_bundle_tile_publish_bundle_txn(
457458
*txnm = (fd_txn_m_t) {
458459
.reference_slot = 0UL,
459460
.payload_sz = (ushort)txn_sz,
460-
.txn_t_sz = 0,
461+
.txn_t_sz = 0U,
462+
.source_ipv4 = source_ipv4,
463+
.source_tpu = FD_TXN_M_TPU_SOURCE_BUNDLE,
461464
.block_engine = {
462465
.bundle_id = ctx->bundle_seq,
463466
.bundle_txn_cnt = bundle_txn_cnt,
@@ -486,18 +489,21 @@ static void
486489
fd_bundle_tile_publish_txn(
487490
fd_bundle_tile_t * ctx,
488491
void const * txn,
489-
ulong txn_sz /* <=FD_TXN_MTU */
492+
ulong txn_sz, /* <=FD_TXN_MTU */
493+
uint source_ipv4
490494
) {
491495
fd_txn_m_t * txnm = fd_chunk_to_laddr( ctx->verify_out.mem, ctx->verify_out.chunk );
492496
*txnm = (fd_txn_m_t) {
493497
.reference_slot = 0UL,
494498
.payload_sz = (ushort)txn_sz,
495-
.txn_t_sz = 0,
499+
.txn_t_sz = 0U,
500+
.source_ipv4 = source_ipv4,
501+
.source_tpu = FD_TXN_M_TPU_SOURCE_BUNDLE,
496502
.block_engine = {
497503
.bundle_id = 0UL,
498504
.bundle_txn_cnt = 1UL,
499-
.commission = 0,
500-
.commission_pubkey = {0}
505+
.commission = 0U,
506+
.commission_pubkey = {0U}
501507
},
502508
};
503509
fd_memcpy( fd_txn_m_payload( txnm ), txn, txn_sz );
@@ -549,15 +555,22 @@ fd_bundle_client_visit_pb_bundle_txn(
549555
return false;
550556
}
551557

558+
if( FD_UNLIKELY( packet.data.size == 0 ) ) {
559+
FD_LOG_WARNING(( "Bundle server delivered an empty packet, ignoring" ));
560+
return true;
561+
}
562+
552563
if( FD_UNLIKELY( packet.data.size > FD_TXN_MTU ) ) {
553564
FD_LOG_WARNING(( "Bundle server delivered an oversize transaction, ignoring" ));
554565
return true;
555566
}
556567

568+
uint _ip4; uint ip4 = fd_uint_if( packet.has_meta, fd_cstr_to_ip4_addr( packet.meta.addr, &_ip4 ) ? _ip4 : 0U, 0U );
557569
fd_bundle_tile_publish_bundle_txn(
558570
ctx,
559571
packet.data.bytes, packet.data.size,
560-
ctx->bundle_txn_cnt
572+
ctx->bundle_txn_cnt,
573+
ip4
561574
);
562575

563576
return true;
@@ -672,12 +685,19 @@ fd_bundle_client_visit_pb_packet(
672685
return false;
673686
}
674687

688+
if( FD_UNLIKELY( packet.data.size == 0 ) ) {
689+
FD_LOG_WARNING(( "Bundle server delivered an empty packet, ignoring" ));
690+
return true;
691+
}
692+
675693
if( FD_UNLIKELY( packet.data.size > FD_TXN_MTU ) ) {
676694
FD_LOG_WARNING(( "Bundle server delivered an oversize transaction, ignoring" ));
677695
return true;
678696
}
679697

680-
fd_bundle_tile_publish_txn( ctx, packet.data.bytes, packet.data.size );
698+
699+
uint _ip4; uint ip4 = fd_uint_if( packet.has_meta, fd_cstr_to_ip4_addr( packet.meta.addr, &_ip4 ) ? _ip4 : 0U, 0U );
700+
fd_bundle_tile_publish_txn( ctx, packet.data.bytes, packet.data.size, ip4 );
681701
ctx->metrics.packet_received_cnt++;
682702

683703
return true;

src/disco/bundle/test_bundle_client.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ test_bundle_rx( fd_wksp_t * wksp ) {
2222
test_bundle_env_t env[1]; test_bundle_env_create( env, wksp );
2323
fd_bundle_tile_t * state = env->state;
2424

25+
/* A SubscribePacketsResponse message with 2 packets included. The
26+
first packet is 1 byte { 0x48 }, the second packet is 2 bytes
27+
{0x48, 0x48}.
28+
29+
message SubscribePacketsResponse {
30+
shared.Header header = 1;
31+
packet.PacketBatch batch = 2;
32+
}
33+
*/
2534
static uchar subscribe_packets_msg[] = {
2635
0x12, 0x13, 0x0a, 0x07, 0x0a, 0x01, 0x48, 0x12,
2736
0x02, 0x08, 0x01, 0x0a, 0x08, 0x0a, 0x02, 0x48,
@@ -39,9 +48,11 @@ test_bundle_rx( fd_wksp_t * wksp ) {
3948
env->out_mcache[ i ].tspub = 0U;
4049
}
4150

51+
const ulong packet1_sz = 1UL;
52+
const ulong packet2_sz = 2UL;
4253
fd_frag_meta_t expected[2] = {
43-
{ .seq=0UL, .sig=0UL, .chunk=0, .sz=sizeof(fd_txn_m_t)+8, .ctl=0 },
44-
{ .seq=1UL, .sig=0UL, .chunk=2, .sz=sizeof(fd_txn_m_t)+8, .ctl=0 }
54+
{ .seq=0UL, .sig=0UL, .chunk=0, .sz=sizeof(fd_txn_m_t)+packet1_sz, .ctl=0 },
55+
{ .seq=1UL, .sig=0UL, .chunk=2, .sz=sizeof(fd_txn_m_t)+packet2_sz, .ctl=0 }
4556
};
4657
FD_TEST( fd_memeq( env->out_mcache, expected, 2*sizeof(fd_frag_meta_t) ) );
4758

src/disco/dedup/fd_dedup_tile.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,18 @@ during_frag( fd_dedup_ctx_t * ctx,
111111
uchar * dst = (uchar *)fd_chunk_to_laddr( ctx->out_mem, ctx->out_chunk );
112112

113113
if( FD_UNLIKELY( ctx->in_kind[ in_idx ]==IN_KIND_GOSSIP ) ) {
114-
if( FD_UNLIKELY( sz>FD_TPU_MTU ) ) FD_LOG_ERR(( "received a gossip transaction that was too large" ));
114+
if( FD_UNLIKELY( sz>FD_TPU_RAW_MTU ) ) FD_LOG_ERR(( "received a gossip transaction that was too large" ));
115+
fd_memcpy( dst, src, sz );
115116

116-
fd_txn_m_t * txnm = (fd_txn_m_t *)dst;
117-
txnm->payload_sz = (ushort)sz;
118-
fd_memcpy( fd_txn_m_payload( txnm ), src, sz );
119-
txnm->block_engine.bundle_id = 0UL;
117+
fd_txn_m_t const * txnm = (fd_txn_m_t const *)dst;
118+
if( FD_UNLIKELY( txnm->payload_sz>FD_TPU_MTU ) ) {
119+
FD_LOG_ERR(( "vote txn payload size %hu exceeds max %lu", txnm->payload_sz, FD_TPU_MTU ));
120+
}
120121
} else if( FD_UNLIKELY( ctx->in_kind[ in_idx ]==IN_KIND_EXECUTED_TXN ) ) {
122+
if( FD_UNLIKELY( sz!=FD_TXN_SIGNATURE_SZ ) ) FD_LOG_ERR(( "received an executed transaction signature message with the wrong size %lu", sz ));
121123
/* Executed txns just have their signature inserted into the tcache
122124
so we can dedup them easily. */
123-
ulong ha_dedup_tag = fd_hash( ctx->hashmap_seed, src+64UL, 64UL );
125+
ulong ha_dedup_tag = fd_hash( ctx->hashmap_seed, src+FD_TXN_SIGNATURE_SZ, FD_TXN_SIGNATURE_SZ );
124126
int _is_dup;
125127
FD_TCACHE_INSERT( _is_dup, *ctx->tcache_sync, ctx->tcache_ring, ctx->tcache_depth, ctx->tcache_map, ctx->tcache_map_cnt, ha_dedup_tag );
126128
(void)_is_dup;

src/disco/fd_disco_base.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ FD_PROTOTYPES_BEGIN
7575
FD_FN_CONST static inline ulong
7676
fd_disco_netmux_sig( uint hash_ip_addr,
7777
ushort hash_port,
78-
uint dst_ip_addr,
78+
uint ip_addr,
7979
ulong proto,
8080
ulong hdr_sz ) {
8181
/* The size of an Ethernet header is 14+4k bytes, where 0<=k<=3 (?) is
@@ -86,12 +86,12 @@ fd_disco_netmux_sig( uint hash_ip_addr,
8686
size by just storing i. */
8787
ulong hdr_sz_i = ((hdr_sz - 42UL)>>2)&0xFUL;
8888
ulong hash = 0xfffffUL & fd_ulong_hash( (ulong)hash_ip_addr | ((ulong)hash_port<<32) );
89-
return (hash<<44) | ((hdr_sz_i&0xFUL)<<40UL) | ((proto&0xFFUL)<<32UL) | ((ulong)dst_ip_addr);
89+
return (hash<<44) | ((hdr_sz_i&0xFUL)<<40UL) | ((proto&0xFFUL)<<32UL) | ((ulong)ip_addr);
9090
}
9191

92-
FD_FN_CONST static inline ulong fd_disco_netmux_sig_hash ( ulong sig ) { return (sig>>44UL); }
93-
FD_FN_CONST static inline ulong fd_disco_netmux_sig_proto ( ulong sig ) { return (sig>>32UL) & 0xFFUL; }
94-
FD_FN_CONST static inline uint fd_disco_netmux_sig_dst_ip( ulong sig ) { return (uint)(sig & 0xFFFFFFFFUL); }
92+
FD_FN_CONST static inline ulong fd_disco_netmux_sig_hash ( ulong sig ) { return (sig>>44UL); }
93+
FD_FN_CONST static inline ulong fd_disco_netmux_sig_proto( ulong sig ) { return (sig>>32UL) & 0xFFUL; }
94+
FD_FN_CONST static inline uint fd_disco_netmux_sig_ip ( ulong sig ) { return (uint)(sig & 0xFFFFFFFFUL); }
9595

9696
/* fd_disco_netmux_sig_hdr_sz extracts the total size of the Ethernet,
9797
IP, and UDP headers from the netmux signature field. The UDP payload

src/disco/fd_txn_m_t.h

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66

77
#include "../ballet/txn/fd_txn.h"
88

9+
#define FD_TXN_M_TPU_SOURCE_QUIC (1UL)
10+
#define FD_TXN_M_TPU_SOURCE_UDP (2UL)
11+
#define FD_TXN_M_TPU_SOURCE_GOSSIP (3UL)
12+
#define FD_TXN_M_TPU_SOURCE_BUNDLE (4UL)
13+
#define FD_TXN_M_TPU_SOURCE_SEND (5UL)
14+
915
struct fd_txn_m {
1016
/* The computed slot that this transaction is referencing, aka. the
1117
slot number of the reference_blockhash. If it could not be
@@ -18,7 +24,12 @@ struct fd_txn_m {
1824
so we just store this redundantly. */
1925
ushort txn_t_sz;
2026

21-
/* 4 bytes of padding here */
27+
/* Source tpu and IP address for this transaction. Note that
28+
source_ipv4 is in big endian. */
29+
uint source_ipv4;
30+
uchar source_tpu;
31+
32+
/* 7 bytes of padding here */
2233

2334
struct {
2435
/* If the transaction is part of a bundle, the bundle_id will be
@@ -44,12 +55,14 @@ struct fd_txn_m {
4455
ulong bundle_txn_cnt;
4556
uchar commission;
4657
uchar commission_pubkey[ 32 ];
47-
} block_engine;
4858

49-
/* alignof is 8, so 7 bytes of padding here */
59+
/* alignof is 8, so 7 bytes of padding here */
60+
61+
} block_engine;
5062

5163
/* There are three additional fields at the end here, which are
52-
variable length and not included in the size of this struct.
64+
variable length and not included in the size of this struct. txn_t
65+
and alut are only found in frags after the verify step.
5366
uchar payload[ ]
5467
fd_txn_t txn_t[ ]
5568
fd_acct_addr_t alut[ ] */
@@ -100,15 +113,21 @@ fd_txn_m_realized_footprint( fd_txn_m_t const * txnm,
100113
int include_txn_t,
101114
int include_alut ) {
102115
if( FD_LIKELY( include_txn_t ) ) {
103-
return fd_txn_m_footprint( txnm->payload_sz,
104-
fd_txn_m_txn_t_const( txnm )->instr_cnt,
105-
fd_txn_m_txn_t_const( txnm )->addr_table_lookup_cnt,
106-
include_alut ? fd_txn_m_txn_t_const( txnm )->addr_table_adtl_cnt : 0UL );
116+
ulong l = FD_LAYOUT_INIT;
117+
l = FD_LAYOUT_APPEND( l, alignof(fd_txn_m_t), sizeof(fd_txn_m_t) );
118+
l = FD_LAYOUT_APPEND( l, 1UL, txnm->payload_sz );
119+
l = FD_LAYOUT_APPEND( l, fd_txn_align(), fd_txn_footprint( fd_txn_m_txn_t_const( txnm )->instr_cnt, fd_txn_m_txn_t_const( txnm )->addr_table_lookup_cnt ) );
120+
l = FD_LAYOUT_APPEND( l, alignof(fd_acct_addr_t), fd_uchar_if(include_alut, fd_txn_m_txn_t_const( txnm )->addr_table_adtl_cnt, 0U)*sizeof(fd_acct_addr_t) );
121+
122+
/* FD_LAYOUT_FINI is not included since the _realized_ footprint
123+
should not include the extra padding typically added after the
124+
last struct used to align the entire footprint. */
125+
return l;
107126
} else {
108127
ulong l = FD_LAYOUT_INIT;
109128
l = FD_LAYOUT_APPEND( l, alignof(fd_txn_m_t), sizeof(fd_txn_m_t) );
110-
l = FD_LAYOUT_APPEND( l, 1UL, txnm->payload_sz );
111-
return FD_LAYOUT_FINI( l, fd_txn_m_align() );
129+
l = FD_LAYOUT_APPEND( l, 1UL, txnm->payload_sz );
130+
return l;
112131
}
113132
}
114133

src/disco/net/sock/fd_sock_tile.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ poll_rx_socket( fd_sock_tile_t * ctx,
408408

409409
ctx->metrics.rx_pkt_cnt++;
410410
ulong chunk = fd_laddr_to_chunk( base, eth_hdr );
411-
ulong sig = fd_disco_netmux_sig( sa->sin_addr.s_addr, fd_ushort_bswap( sa->sin_port ), 0U, proto, hdr_sz );
411+
ulong sig = fd_disco_netmux_sig( sa->sin_addr.s_addr, fd_ushort_bswap( sa->sin_port ), sa->sin_addr.s_addr, proto, hdr_sz );
412412
ulong tspub = fd_frag_meta_ts_comp( ts );
413413

414414
/* default for repair intake is to send to [shreds] to shred tile.

0 commit comments

Comments
 (0)