mirror of
https://git.robbyzambito.me/zaprus/
synced 2026-02-04 11:44:49 +00:00
This commit is contained in:
@@ -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;
|
||||
_ = ðer_headers;
|
||||
_ = &ip_headers;
|
||||
_ = &udp_headers;
|
||||
// _ = ðer_headers;
|
||||
|
||||
// _ = try writer.write(&@as([@bitSizeOf(UdpHeaders) / 8]u8, @bitCast(headers)));
|
||||
|
||||
std.mem.byteSwapAllFields(EthernetHeaders, ðer_headers);
|
||||
try writer.writeStruct(ether_headers, native_endian);
|
||||
// std.mem.byteSwapAllFields(EthernetHeaders, ðer_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);
|
||||
|
||||
Reference in New Issue
Block a user