1/* 2 * addr.h 3 * 4 * Network address operations. 5 * 6 * Copyright (c) 2000 Dug Song <dugsong@monkey.org> 7 * 8 * $Id: addr.h,v 1.12 2003/02/27 03:44:55 dugsong Exp $ 9 */ 10 11#ifndef DNET_ADDR_H 12#define DNET_ADDR_H 13 14#define ADDR_TYPE_NONE 0 /* No address set */ 15#define ADDR_TYPE_ETH 1 /* Ethernet */ 16#define ADDR_TYPE_IP 2 /* Internet Protocol v4 */ 17#define ADDR_TYPE_IP6 3 /* Internet Protocol v6 */ 18 19struct addr { 20 uint16_t addr_type; 21 uint16_t addr_bits; 22 union { 23 eth_addr_t __eth; 24 ip_addr_t __ip; 25 ip6_addr_t __ip6; 26 27 uint8_t __data8[16]; 28 uint16_t __data16[8]; 29 uint32_t __data32[4]; 30 } __addr_u; 31}; 32#define addr_eth __addr_u.__eth 33#define addr_ip __addr_u.__ip 34#define addr_ip6 __addr_u.__ip6 35#define addr_data8 __addr_u.__data8 36#define addr_data16 __addr_u.__data16 37#define addr_data32 __addr_u.__data32 38 39#define addr_pack(addr, type, bits, data, len) do { \ 40 (addr)->addr_type = type; \ 41 (addr)->addr_bits = bits; \ 42 memmove((addr)->addr_data8, (char *)data, len); \ 43} while (0) 44 45__BEGIN_DECLS 46int addr_cmp(const struct addr *a, const struct addr *b); 47 48int addr_bcast(const struct addr *a, struct addr *b); 49int addr_net(const struct addr *a, struct addr *b); 50 51char *addr_ntop(const struct addr *src, char *dst, size_t size); 52int addr_pton(const char *src, struct addr *dst); 53 54char *addr_ntoa(const struct addr *a); 55#define addr_aton addr_pton 56 57int addr_ntos(const struct addr *a, struct sockaddr *sa); 58int addr_ston(const struct sockaddr *sa, struct addr *a); 59 60int addr_btos(uint16_t bits, struct sockaddr *sa); 61int addr_stob(const struct sockaddr *sa, uint16_t *bits); 62 63int addr_btom(uint16_t bits, void *mask, size_t size); 64int addr_mtob(const void *mask, size_t size, uint16_t *bits); 65__END_DECLS 66 67#endif /* DNET_ADDR_H */ 68