diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/net.h | 8 | ||||
-rw-r--r-- | lib/unaligned.h | 14 |
2 files changed, 22 insertions, 0 deletions
@@ -35,6 +35,8 @@ #define NB_MPLS (1 << NET_MPLS) #define NB_IP (NB_IP4 | NB_IP6) +#define NB_VPN (NB_VPN4 | NB_VPN6) +#define NB_FLOW (NB_FLOW4 | NB_FLOW6) #define NB_ANY 0xffffffff @@ -481,6 +483,12 @@ static inline void net_normalize_ip4(net_addr_ip4 *n) static inline void net_normalize_ip6(net_addr_ip6 *n) { n->prefix = ip6_and(n->prefix, ip6_mkmask(n->pxlen)); } +static inline void net_normalize_vpn4(net_addr_vpn4 *n) +{ net_normalize_ip4((net_addr_ip4 *) n); } + +static inline void net_normalize_vpn6(net_addr_vpn6 *n) +{ net_normalize_ip6((net_addr_ip6 *) n); } + void net_normalize(net_addr *N); diff --git a/lib/unaligned.h b/lib/unaligned.h index 4e841f3a..0da1fdb4 100644 --- a/lib/unaligned.h +++ b/lib/unaligned.h @@ -29,6 +29,13 @@ get_u16(const void *p) } static inline u32 +get_u24(const void *P) +{ + const byte *p = P; + return (p[0] << 16) + (p[1] << 8) + p[2]; +} + +static inline u32 get_u32(const void *p) { u32 x; @@ -53,6 +60,13 @@ put_u16(void *p, u16 x) } static inline void +put_u24(void *p, u32 x) +{ + x = htonl(x); + memcpy(p, ((char *) &x) + 1, 3); +} + +static inline void put_u32(void *p, u32 x) { x = htonl(x); |