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