12632SN/A/* 22632SN/A * addr.h 32632SN/A * 42632SN/A * Network address operations. 52632SN/A * 62632SN/A * Copyright (c) 2000 Dug Song <dugsong@monkey.org> 72632SN/A * 82632SN/A * $Id: addr.h,v 1.12 2003/02/27 03:44:55 dugsong Exp $ 92632SN/A */ 102632SN/A 112632SN/A#ifndef DNET_ADDR_H 122632SN/A#define DNET_ADDR_H 132632SN/A 142632SN/A#define ADDR_TYPE_NONE 0 /* No address set */ 152632SN/A#define ADDR_TYPE_ETH 1 /* Ethernet */ 162632SN/A#define ADDR_TYPE_IP 2 /* Internet Protocol v4 */ 172632SN/A#define ADDR_TYPE_IP6 3 /* Internet Protocol v6 */ 182632SN/A 192632SN/Astruct addr { 202632SN/A uint16_t addr_type; 212632SN/A uint16_t addr_bits; 222632SN/A union { 232632SN/A eth_addr_t __eth; 242632SN/A ip_addr_t __ip; 252632SN/A ip6_addr_t __ip6; 262632SN/A 272632SN/A uint8_t __data8[16]; 282632SN/A uint16_t __data16[8]; 292632SN/A uint32_t __data32[4]; 302632SN/A } __addr_u; 312632SN/A}; 322632SN/A#define addr_eth __addr_u.__eth 332632SN/A#define addr_ip __addr_u.__ip 342632SN/A#define addr_ip6 __addr_u.__ip6 352632SN/A#define addr_data8 __addr_u.__data8 362632SN/A#define addr_data16 __addr_u.__data16 372632SN/A#define addr_data32 __addr_u.__data32 382632SN/A 392632SN/A#define addr_pack(addr, type, bits, data, len) do { \ 402632SN/A (addr)->addr_type = type; \ 412632SN/A (addr)->addr_bits = bits; \ 422632SN/A memmove((addr)->addr_data8, (char *)data, len); \ 432632SN/A} while (0) 442632SN/A 452632SN/A__BEGIN_DECLS 462632SN/Aint addr_cmp(const struct addr *a, const struct addr *b); 472632SN/A 482632SN/Aint addr_bcast(const struct addr *a, struct addr *b); 492632SN/Aint addr_net(const struct addr *a, struct addr *b); 502632SN/A 512632SN/Achar *addr_ntop(const struct addr *src, char *dst, size_t size); 522632SN/Aint addr_pton(const char *src, struct addr *dst); 532632SN/A 542632SN/Achar *addr_ntoa(const struct addr *a); 552632SN/A#define addr_aton addr_pton 562632SN/A 572632SN/Aint addr_ntos(const struct addr *a, struct sockaddr *sa); 582632SN/Aint addr_ston(const struct sockaddr *sa, struct addr *a); 592632SN/A 602632SN/Aint addr_btos(uint16_t bits, struct sockaddr *sa); 612632SN/Aint addr_stob(const struct sockaddr *sa, uint16_t *bits); 622632SN/A 632632SN/Aint addr_btom(uint16_t bits, void *mask, size_t size); 642632SN/Aint addr_mtob(const void *mask, size_t size, uint16_t *bits); 652632SN/A__END_DECLS 662632SN/A 672632SN/A#endif /* DNET_ADDR_H */ 68