start doing packet stuff

This commit is contained in:
2026-01-17 21:38:11 -05:00
parent 1a817df18d
commit a33a96dafd

View File

@@ -52,7 +52,7 @@ pub fn main(init: std.process.Init) !void {
flags.relay = args[i]; flags.relay = args[i];
} else { } else {
std.debug.print("-r/--relay requires a string\n", .{}); std.debug.print("-r/--relay requires a string\n", .{});
return; return error.InvalidArguments;
} }
}, },
.dest => { .dest => {
@@ -61,7 +61,7 @@ pub fn main(init: std.process.Init) !void {
flags.dest = args[i]; flags.dest = args[i];
} else { } else {
std.debug.print("-d/--dest requires a string\n", .{}); std.debug.print("-d/--dest requires a string\n", .{});
return; return error.InvalidArguments;
} }
}, },
.connect => { .connect => {
@@ -70,20 +70,54 @@ pub fn main(init: std.process.Init) !void {
flags.connect = args[i]; flags.connect = args[i];
} else { } else {
std.debug.print("-c/--connect requires a string\n", .{}); std.debug.print("-c/--connect requires a string\n", .{});
return; return error.InvalidArguments;
} }
}, },
} }
} else { } else {
std.debug.print("Unknown argument: {s}\n", .{args[i]}); std.debug.print("Unknown argument: {s}\n", .{args[i]});
return error.InvalidArguments;
} }
} }
} }
if (flags.connect != null and (flags.relay != null or flags.dest != null)) {
std.debug.print("Incompatible arguments.\nCannot use --connect/-c with dest or relay.\n", .{});
return error.InvalidArguments;
}
std.debug.print("relay: {s}\n", .{flags.relay orelse "<null>"}); std.debug.print("relay: {s}\n", .{flags.relay orelse "<null>"});
std.debug.print("dest: {s}\n", .{flags.dest orelse "<null>"}); std.debug.print("dest: {s}\n", .{flags.dest orelse "<null>"});
std.debug.print("connect: {s}\n", .{flags.connect orelse "<null>"}); std.debug.print("connect: {s}\n", .{flags.connect orelse "<null>"});
// const net_interface: std.Io.net.Interface = .{ .index = 1 };
// std.debug.print("Interface: {s}\n", .{(try net_interface.name(init.io)).toSlice()});
const linux_socket = blk: {
const linux_socket = std.os.linux.socket(AF.PACKET, SOCK.RAW, 0);
const errno = std.os.linux.errno(linux_socket);
if (errno != .SUCCESS) {
std.debug.log("Failed to open socket: {t}\n", .{errno});
return error.Error; // TODO: better error
}
break :blk linux_socket;
};
const socket_fd = blk: {
const socket_fd = std.os.linux.bind(linux_socket, @bitCast(std.os.linux.sockaddr.ll{
.protocol = ,
.ifindex = 1,
.hatype = ,
.pkttype = ,
.halen = ,
.addr = @splat(0),
}), @sizeOf(std.os.linux.sockaddr.ll));
};
const ip: std.Io.net.IpAddress = .{ .ip4 = .unspecified(0) };
const socket = try ip.bind(init.io, .{ .mode = .raw, .protocol = .raw });
defer socket.close(init.io);
try socket.send(init.io, &.{ .ip4 = try .parse("255.255.255.255", 8888) }, "foo");
// var sock_buffer: [1500]u8 = undefined; // var sock_buffer: [1500]u8 = undefined;
// var raw_socket_writer: RawSocketWriter = try .init("enp7s0", &sock_buffer); // /proc/net/dev // var raw_socket_writer: RawSocketWriter = try .init("enp7s0", &sock_buffer); // /proc/net/dev
// var net_buffer: [1500]u8 = undefined; // var net_buffer: [1500]u8 = undefined;
@@ -135,4 +169,7 @@ const zaprus = @import("zaprus");
const SaprusClient = zaprus.Client; const SaprusClient = zaprus.Client;
const SaprusMessage = zaprus.Message; const SaprusMessage = zaprus.Message;
const RawSocketWriter = zaprus.RawSocketWriter; const RawSocketWriter = zaprus.RawSocketWriter;
const AF = std.os.linux.AF;
const SOCK = std.os.linux.SOCK;
// const NetWriter = zaprus.NetWriter; // const NetWriter = zaprus.NetWriter;