2 * Copyright (c) 2005 Red Hat Inc
3 * Author: Patrick Caulfield (pcaulfie@redhat.com)
5 * Copyright (c) 2006 Sun Microsystems, Inc.
9 * This software licensed under BSD license, the text of which follows:
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions are met:
14 * - Redistributions of source code must retain the above copyright notice,
15 * this list of conditions and the following disclaimer.
16 * - Redistributions in binary form must reproduce the above copyright notice,
17 * this list of conditions and the following disclaimer in the documentation
18 * and/or other materials provided with the distribution.
19 * - Neither the name of the MontaVista Software, Inc. nor the names of its
20 * contributors may be used to endorse or promote products derived from this
21 * software without specific prior written permission.
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
33 * THE POSSIBILITY OF SUCH DAMAGE.
36 /* IPv4/6 abstraction */
38 #ifndef TOTEMIP_H_DEFINED
39 #define TOTEMIP_H_DEFINED
43 #include <sys/socket.h>
44 #include <netinet/in.h>
48 #define MSG_NOSIGNAL 0
50 void totemip_nosigpipe(int s
);
52 #define totemip_nosigpipe(s)
55 #define TOTEMIP_ADDRLEN (sizeof(struct in6_addr))
57 /* These are the things that get passed around */
58 struct totem_ip_address
61 unsigned short family
;
62 unsigned char addr
[TOTEMIP_ADDRLEN
]; /* in Network Byteorder */
63 } __attribute__((packed
));
65 typedef struct totem_ip_address totem_ip_address_t
;
67 static inline void swab_totem_ip_address_t (totem_ip_address_t
*to_swab
)
69 to_swab
->nodeid
= swab32 (to_swab
->nodeid
);
70 to_swab
->family
= swab16 (to_swab
->family
);
73 extern int totemip_equal(struct totem_ip_address
*addr1
, struct totem_ip_address
*addr2
);
74 extern int totemip_compare(const void *a
, const void *b
);
75 extern void totemip_copy(struct totem_ip_address
*addr1
, struct totem_ip_address
*addr2
);
76 extern void totemip_copy_endian_convert(struct totem_ip_address
*addr1
, struct totem_ip_address
*addr2
);
77 int totemip_localhost(int family
, struct totem_ip_address
*localhost
);
78 extern int totemip_localhost_check(struct totem_ip_address
*addr
);
79 extern const char *totemip_print(struct totem_ip_address
*addr
);
80 extern int totemip_sockaddr_to_totemip_convert(struct sockaddr_storage
*saddr
, struct totem_ip_address
*ip_addr
);
81 extern int totemip_totemip_to_sockaddr_convert(struct totem_ip_address
*ip_addr
,
82 uint16_t port
, struct sockaddr_storage
*saddr
, int *addrlen
);
83 extern int totemip_parse(struct totem_ip_address
*totemip
, char *addr
, int family
);
84 extern int totemip_iface_check(struct totem_ip_address
*bindnet
, struct totem_ip_address
*boundto
, int *interface_up
, int *interface_num
);
86 /* These two simulate a zero in_addr by clearing the family field */
87 static inline void totemip_zero_set(struct totem_ip_address
*addr
)
91 static inline int totemip_zero_check(struct totem_ip_address
*addr
)
93 return (addr
->family
== 0);
96 static inline unsigned int totemip_compute_nodeid_from_addr(
97 const struct totem_ip_address
*addr
)
99 struct in_addr
*in
= (struct in_addr
*)addr
->addr
;
100 assert(addr
->family
== AF_INET
);
102 return (unsigned int)ntohl(in
->s_addr
);