This commit is contained in:
2025-09-23 15:01:12 -04:00
parent b5efbd6e16
commit b8313e4fa4

View File

@@ -33,23 +33,25 @@ pub fn deinit(self: *Self) void {
fn broadcastInitialInterestMessage(self: *Self, msg_bytes: []align(@alignOf(SaprusMessage)) u8) !void { fn broadcastInitialInterestMessage(self: *Self, msg_bytes: []align(@alignOf(SaprusMessage)) u8) !void {
const writer = self.writer; const writer = self.writer;
const EthernetHeaders = packed struct { // const EthernetHeaders = packed struct {
dest_mac: @Vector(6, u8), // dest_mac: @Vector(6, u8),
src_mac: @Vector(6, u8), // src_mac: @Vector(6, u8),
ether_type: u16, // ether_type: u16,
}; // };
const IpHeaders = packed struct { const IpHeaders = packed struct {
ip_version: u4, _: u8 = 0x45,
header_length: u4 = 0, // ip_version: u4,
// header_length: u4 = 0,
type_of_service: u8 = 0, type_of_service: u8 = 0,
total_length: u16, total_length: u16 = 0x04,
identification: u16 = 0, identification: u16 = 0,
ethernet_flags: u3 = 0, __: u16 = 0x0,
fragment_offset: u13 = 0, // ethernet_flags: u3 = 0,
// fragment_offset: u13 = 0,
ttl: u8 = 0, ttl: u8 = 0,
protocol: u8 = 0, protocol: u8 = 0,
@@ -67,44 +69,53 @@ fn broadcastInitialInterestMessage(self: *Self, msg_bytes: []align(@alignOf(Sapr
checksum: @Vector(2, u8) = .{ 0, 0 }, checksum: @Vector(2, u8) = .{ 0, 0 },
}; };
const total_len = (@bitSizeOf(UdpHeaders) / 8) + msg_bytes.len; // const total_len = ((@bitSizeOf(IpHeaders) + @bitSizeOf(UdpHeaders)) / 8) + msg_bytes.len;
const total_len = 130;
std.debug.assert(writer.buffer.len >= total_len); std.debug.assert(writer.buffer.len >= total_len);
_ = writer.consumeAll(); _ = writer.consumeAll();
var ether_headers: EthernetHeaders = .{ // var ether_headers: EthernetHeaders = .{
.dest_mac = .{ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff }, // .dest_mac = .{ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff },
// .src_mac = .{ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee }, // // .src_mac = .{ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee },
.src_mac = blk: { // .src_mac = blk: {
var output_bytes: [6]u8 = undefined; // var output_bytes: [6]u8 = undefined;
// const r_bytes = try writer.writableArray(6); // // const r_bytes = try writer.writableArray(6);
self.rand.bytes(&output_bytes); // self.rand.bytes(&output_bytes);
break :blk output_bytes; // break :blk output_bytes;
}, // },
.ether_type = 0x0800, // .ether_type = 0x0800,
}; // };
const ip_headers: IpHeaders = .{ var ip_headers: IpHeaders = .{
.ip_version = 0x4, // .ip_version = 0x4,
.header_length = 0x5, // .header_length = 0x5,
.total_length = @intCast(total_len - 8), // 8 is the ethernet frame length (macs + type) // .total_length = 130, //@intCast(total_len - 8), // 8 is the ethernet frame length (macs + type)
.total_length = 0x00,
.ttl = 0x64,
.protocol = 0x11, .protocol = 0x11,
.src_ip = .{ 0, 0, 0, 0 }, .src_ip = .{ 0xff, 0x02, 0x03, 0x04 },
.dest_ip = .{ 0, 0, 0, 0 }, .dest_ip = .{ 0xff, 0xff, 0xff, 0xff },
}; };
const udp_headers: UdpHeaders = .{ var udp_headers: UdpHeaders = .{
.src_port = .{ 0, 0 }, .src_port = .{ 0, 0x01 },
.dest_port = .{ 0xb8, 0x22 }, .dest_port = .{ 0xb8, 0x22 },
.length = @intCast(msg_bytes.len), .length = @intCast(msg_bytes.len),
}; };
_ = ip_headers; _ = &ip_headers;
_ = udp_headers; _ = &udp_headers;
_ = &ether_headers; // _ = &ether_headers;
// _ = try writer.write(&@as([@bitSizeOf(UdpHeaders) / 8]u8, @bitCast(headers))); // _ = try writer.write(&@as([@bitSizeOf(UdpHeaders) / 8]u8, @bitCast(headers)));
std.mem.byteSwapAllFields(EthernetHeaders, &ether_headers); // std.mem.byteSwapAllFields(EthernetHeaders, &ether_headers);
try writer.writeStruct(ether_headers, native_endian); // try writer.writeStruct(ether_headers, native_endian);
std.mem.byteSwapAllFields(IpHeaders, &ip_headers);
try writer.writeStruct(ip_headers, native_endian);
// std.mem.byteSwapAllFields(UdpHeaders, &udp_headers);
// try writer.writeStruct(udp_headers, native_endian);
// // Ensure buffer is large enough // // Ensure buffer is large enough
// std.debug.assert(writer.buffer.len > 38 + msg_bytes.len); // std.debug.assert(writer.buffer.len > 38 + msg_bytes.len);