diff options
Diffstat (limited to 'src/EthIpUdp.zig')
| -rw-r--r-- | src/EthIpUdp.zig | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/EthIpUdp.zig b/src/EthIpUdp.zig index 251ed64..a65a96f 100644 --- a/src/EthIpUdp.zig +++ b/src/EthIpUdp.zig @@ -14,6 +14,28 @@ // You should have received a copy of the GNU General Public License along with // Zaprus. If not, see <https://www.gnu.org/licenses/>. +pub const IpAddr = packed struct { + int: I, + + const V = @Vector(4, u8); + const I = u32; + + pub fn fromBytes(s: V) IpAddr { + return .{ .int = @bitCast(s) }; + } +}; + +pub const MacAddr = packed struct { + int: I, + + const V = @Vector(6, u8); + const I = @Int(.unsigned, @bitSizeOf(V)); + + pub fn fromBytes(s: V) MacAddr { + return .{ .int = @bitCast(s) }; + } +}; + pub const EthIpUdp = packed struct(u336) { // 42 bytes * 8 bits = 336 // --- UDP (Last in memory, defined first for LSB->MSB) --- udp: packed struct { @@ -25,8 +47,8 @@ pub const EthIpUdp = packed struct(u336) { // 42 bytes * 8 bits = 336 // --- IP --- ip: packed struct { - dst_addr: u32, - src_addr: u32, + dst_addr: IpAddr, + src_addr: IpAddr, header_checksum: u16 = 0, protocol: u8 = 17, // udp ttl: u8 = 0x40, @@ -53,8 +75,8 @@ 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 = .fromBytes(@splat(0xff)), pub fn toBytes(self: @This()) [336 / 8]u8 { var res: [336 / 8]u8 = undefined; |
