aboutgitcodebugslistschat
path: root/ip.h
diff options
context:
space:
mode:
Diffstat (limited to 'ip.h')
-rw-r--r--ip.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/ip.h b/ip.h
index 9be4778..0742612 100644
--- a/ip.h
+++ b/ip.h
@@ -24,6 +24,11 @@
#define IN4ADDR_ANY_INIT \
{ .s_addr = htonl_constant(INADDR_ANY) }
+#define IN4_IS_ADDR_LINKLOCAL(a) \
+ ((ntohl(((struct in_addr *)(a))->s_addr) >> 16) == 0xa9fe)
+#define IN4_IS_PREFIX_LINKLOCAL(a, len) \
+ ((len) >= 16 && IN4_IS_ADDR_LINKLOCAL(a))
+
#define L2_BUF_IP4_INIT(proto) \
{ \
.version = 4, \
@@ -38,7 +43,11 @@
.daddr = 0, \
}
#define L2_BUF_IP4_PSUM(proto) ((uint32_t)htons_constant(0x4500) + \
- (uint32_t)htons_constant(0xff00 | (proto)))
+ (uint32_t)htons(0xff00 | (proto)))
+
+
+#define IN6_IS_PREFIX_LINKLOCAL(a, len) \
+ ((len) >= 10 && IN6_IS_ADDR_LINKLOCAL(a))
#define L2_BUF_IP6_INIT(proto) \
{ \
@@ -83,4 +92,13 @@ struct ipv6_opt_hdr {
char *ipv6_l4hdr(const struct pool *p, int idx, size_t offset, uint8_t *proto,
size_t *dlen);
+
+/* IPv6 link-local all-nodes multicast adddress, ff02::1 */
+static const struct in6_addr in6addr_ll_all_nodes = {
+ .s6_addr = {
+ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ },
+};
+
#endif /* IP_H */