aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Client.zig4
-rw-r--r--src/EthIpUdp.zig15
2 files changed, 15 insertions, 4 deletions
diff --git a/src/Client.zig b/src/Client.zig
index 2344f83..cbe4d17 100644
--- a/src/Client.zig
+++ b/src/Client.zig
@@ -46,7 +46,7 @@ pub fn sendRelay(self: *Client, io: Io, payload: []const u8, dest: [4]u8) !void
const rand = io_source.interface();
var headers: EthIpUdp = .{
- .src_mac = self.socket.mac,
+ .src_mac = .fromSlice(self.socket.mac),
.ip = .{
.id = rand.int(u16),
.src_addr = 0, //rand.int(u32),
@@ -86,7 +86,7 @@ pub fn connect(self: Client, io: Io, payload: []const u8) (error{ BpfAttachFaile
const rand = io_source.interface();
var headers: EthIpUdp = .{
- .src_mac = self.socket.mac,
+ .src_mac = .fromSlice(self.socket.mac),
.ip = .{
.id = rand.int(u16),
.src_addr = 0, //rand.int(u32),
diff --git a/src/EthIpUdp.zig b/src/EthIpUdp.zig
index 251ed64..b286db2 100644
--- a/src/EthIpUdp.zig
+++ b/src/EthIpUdp.zig
@@ -53,8 +53,19 @@ pub const EthIpUdp = packed struct(u336) { // 42 bytes * 8 bits = 336
// --- Ethernet ---
eth_type: u16 = std.os.linux.ETH.P.IP,
- src_mac: @Vector(6, u8),
- dst_mac: @Vector(6, u8) = @splat(0xff),
+ src_mac: MacAddr,
+ dst_mac: MacAddr = .fromSlice(@splat(0xff)),
+
+ pub const MacAddr = packed struct {
+ int: I,
+
+ pub const V = @Vector(6, u8);
+ pub const I = @Int(.unsigned, @bitSizeOf(V));
+
+ pub fn fromSlice(s: V) MacAddr {
+ return .{ .int = @bitCast(s) };
+ }
+ };
pub fn toBytes(self: @This()) [336 / 8]u8 {
var res: [336 / 8]u8 = undefined;