aos/include/netutil/types.h
2022-05-27 19:11:22 +02:00

83 lines
1.7 KiB
C

#ifndef _NETUTIL_TYPES_H_
#define _NETUTIL_TYPES_H_
#include <stdint.h>
#include <stddef.h>
struct uint16_net {
uint8_t val[2];
} __attribute__((__packed__));
static inline struct uint16_net uint16_wr(uint16_t val)
{
return (struct uint16_net){{
(val >> 8) & 0xff,
val & 0xff
}};
}
static inline uint16_t uint16_rd(struct uint16_net val_net)
{
return (
((uint16_t)val_net.val[0] << 8) |
(uint16_t)val_net.val[1]
);
}
struct uint32_net {
uint8_t val[4];
} __attribute__((__packed__));
static inline struct uint32_net uint32_wr(uint32_t val)
{
return (struct uint32_net){{
(val >> 24) & 0xff,
(val >> 16) & 0xff,
(val >> 8) & 0xff,
val & 0xff
}};
}
static inline uint32_t uint32_rd(struct uint32_net val_net)
{
return (
((uint32_t)val_net.val[0] << 24) |
((uint32_t)val_net.val[1] << 16) |
((uint32_t)val_net.val[2] << 8) |
(uint32_t)val_net.val[3]
);
}
struct eth_addr_net {
uint8_t addr[6];
} __attribute__((__packed__));
static inline struct eth_addr_net eth_addr_wr(uint64_t addr)
{
return (struct eth_addr_net){{
(addr >> 40) & 0xff,
(addr >> 32) & 0xff,
(addr >> 24) & 0xff,
(addr >> 16) & 0xff,
(addr >> 8) & 0xff,
addr & 0xff
}};
}
static inline uint64_t eth_addr_rd(struct eth_addr_net addr_net)
{
return (
((uint64_t)addr_net.addr[0] << 40) |
((uint64_t)addr_net.addr[1] << 32) |
((uint64_t)addr_net.addr[2] << 24) |
((uint64_t)addr_net.addr[3] << 16) |
((uint64_t)addr_net.addr[4] << 8) |
(uint64_t)addr_net.addr[5]
);
}
typedef uint32_t ip_addr_t;
typedef struct uint32_net ip_addr_net_t;
#endif