arm: Clean up m5ops assembly library
[gem5.git] / ext / dnet / addr.h
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
19 struct 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
46 int addr_cmp(const struct addr *a, const struct addr *b);
47
48 int addr_bcast(const struct addr *a, struct addr *b);
49 int addr_net(const struct addr *a, struct addr *b);
50
51 char *addr_ntop(const struct addr *src, char *dst, size_t size);
52 int addr_pton(const char *src, struct addr *dst);
53
54 char *addr_ntoa(const struct addr *a);
55 #define addr_aton addr_pton
56
57 int addr_ntos(const struct addr *a, struct sockaddr *sa);
58 int addr_ston(const struct sockaddr *sa, struct addr *a);
59
60 int addr_btos(uint16_t bits, struct sockaddr *sa);
61 int addr_stob(const struct sockaddr *sa, uint16_t *bits);
62
63 int addr_btom(uint16_t bits, void *mask, size_t size);
64 int addr_mtob(const void *mask, size_t size, uint16_t *bits);
65 __END_DECLS
66
67 #endif /* DNET_ADDR_H */