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