summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2026-01-17 21:38:11 -0500
committerRobby Zambito <contact@robbyzambito.me>2026-01-17 21:38:23 -0500
commita33a96dafd4c483f08ad3876d1a90cd18ab12c43 (patch)
treeb07fa68c58382a28cd399848a2caaf05b9211863
parent1a817df18d096b01d3436c8caa218f6e19a3904f (diff)
start doing packet stuffzig-master
-rw-r--r--src/main.zig43
1 files changed, 40 insertions, 3 deletions
diff --git a/src/main.zig b/src/main.zig
index 064dcea..ad4d76b 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -52,7 +52,7 @@ pub fn main(init: std.process.Init) !void {
flags.relay = args[i];
} else {
std.debug.print("-r/--relay requires a string\n", .{});
- return;
+ return error.InvalidArguments;
}
},
.dest => {
@@ -61,7 +61,7 @@ pub fn main(init: std.process.Init) !void {
flags.dest = args[i];
} else {
std.debug.print("-d/--dest requires a string\n", .{});
- return;
+ return error.InvalidArguments;
}
},
.connect => {
@@ -70,20 +70,54 @@ pub fn main(init: std.process.Init) !void {
flags.connect = args[i];
} else {
std.debug.print("-c/--connect requires a string\n", .{});
- return;
+ return error.InvalidArguments;
}
},
}
} else {
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("dest: {s}\n", .{flags.dest 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 raw_socket_writer: RawSocketWriter = try .init("enp7s0", &sock_buffer); // /proc/net/dev
// var net_buffer: [1500]u8 = undefined;
@@ -135,4 +169,7 @@ const zaprus = @import("zaprus");
const SaprusClient = zaprus.Client;
const SaprusMessage = zaprus.Message;
const RawSocketWriter = zaprus.RawSocketWriter;
+
+const AF = std.os.linux.AF;
+const SOCK = std.os.linux.SOCK;
// const NetWriter = zaprus.NetWriter;