addr.h revision 2632
14166Sgblack@eecs.umich.edu/* 24166Sgblack@eecs.umich.edu * addr.h 34166Sgblack@eecs.umich.edu * 44166Sgblack@eecs.umich.edu * Network address operations. 54166Sgblack@eecs.umich.edu * 64166Sgblack@eecs.umich.edu * Copyright (c) 2000 Dug Song <dugsong@monkey.org> 74166Sgblack@eecs.umich.edu * 84166Sgblack@eecs.umich.edu * $Id: addr.h,v 1.12 2003/02/27 03:44:55 dugsong Exp $ 94166Sgblack@eecs.umich.edu */ 104166Sgblack@eecs.umich.edu 114166Sgblack@eecs.umich.edu#ifndef DNET_ADDR_H 124166Sgblack@eecs.umich.edu#define DNET_ADDR_H 134166Sgblack@eecs.umich.edu 144166Sgblack@eecs.umich.edu#define ADDR_TYPE_NONE 0 /* No address set */ 154166Sgblack@eecs.umich.edu#define ADDR_TYPE_ETH 1 /* Ethernet */ 164166Sgblack@eecs.umich.edu#define ADDR_TYPE_IP 2 /* Internet Protocol v4 */ 174166Sgblack@eecs.umich.edu#define ADDR_TYPE_IP6 3 /* Internet Protocol v6 */ 184166Sgblack@eecs.umich.edu 194166Sgblack@eecs.umich.edustruct addr { 204166Sgblack@eecs.umich.edu uint16_t addr_type; 214166Sgblack@eecs.umich.edu uint16_t addr_bits; 224166Sgblack@eecs.umich.edu union { 234166Sgblack@eecs.umich.edu eth_addr_t __eth; 244166Sgblack@eecs.umich.edu ip_addr_t __ip; 254166Sgblack@eecs.umich.edu ip6_addr_t __ip6; 264166Sgblack@eecs.umich.edu 274166Sgblack@eecs.umich.edu uint8_t __data8[16]; 284166Sgblack@eecs.umich.edu uint16_t __data16[8]; 294166Sgblack@eecs.umich.edu uint32_t __data32[4]; 304166Sgblack@eecs.umich.edu } __addr_u; 314166Sgblack@eecs.umich.edu}; 324166Sgblack@eecs.umich.edu#define addr_eth __addr_u.__eth 334166Sgblack@eecs.umich.edu#define addr_ip __addr_u.__ip 344166Sgblack@eecs.umich.edu#define addr_ip6 __addr_u.__ip6 354166Sgblack@eecs.umich.edu#define addr_data8 __addr_u.__data8 364166Sgblack@eecs.umich.edu#define addr_data16 __addr_u.__data16 374166Sgblack@eecs.umich.edu#define addr_data32 __addr_u.__data32 384166Sgblack@eecs.umich.edu 394166Sgblack@eecs.umich.edu#define addr_pack(addr, type, bits, data, len) do { \ 404166Sgblack@eecs.umich.edu (addr)->addr_type = type; \ 414166Sgblack@eecs.umich.edu (addr)->addr_bits = bits; \ 424166Sgblack@eecs.umich.edu memmove((addr)->addr_data8, (char *)data, len); \ 434166Sgblack@eecs.umich.edu} while (0) 444166Sgblack@eecs.umich.edu 454166Sgblack@eecs.umich.edu__BEGIN_DECLS 464166Sgblack@eecs.umich.eduint addr_cmp(const struct addr *a, const struct addr *b); 474166Sgblack@eecs.umich.edu 484166Sgblack@eecs.umich.eduint addr_bcast(const struct addr *a, struct addr *b); 494166Sgblack@eecs.umich.eduint addr_net(const struct addr *a, struct addr *b); 504166Sgblack@eecs.umich.edu 514166Sgblack@eecs.umich.educhar *addr_ntop(const struct addr *src, char *dst, size_t size); 524166Sgblack@eecs.umich.eduint addr_pton(const char *src, struct addr *dst); 534166Sgblack@eecs.umich.edu 544166Sgblack@eecs.umich.educhar *addr_ntoa(const struct addr *a); 554166Sgblack@eecs.umich.edu#define addr_aton addr_pton 564166Sgblack@eecs.umich.edu 574166Sgblack@eecs.umich.eduint addr_ntos(const struct addr *a, struct sockaddr *sa); 584166Sgblack@eecs.umich.eduint addr_ston(const struct sockaddr *sa, struct addr *a); 594166Sgblack@eecs.umich.edu 604166Sgblack@eecs.umich.eduint addr_btos(uint16_t bits, struct sockaddr *sa); 614166Sgblack@eecs.umich.eduint addr_stob(const struct sockaddr *sa, uint16_t *bits); 624166Sgblack@eecs.umich.edu 634166Sgblack@eecs.umich.eduint addr_btom(uint16_t bits, void *mask, size_t size); 644166Sgblack@eecs.umich.eduint addr_mtob(const void *mask, size_t size, uint16_t *bits); 654166Sgblack@eecs.umich.edu__END_DECLS 664166Sgblack@eecs.umich.edu 674166Sgblack@eecs.umich.edu#endif /* DNET_ADDR_H */ 684166Sgblack@eecs.umich.edu