OpenMPI  0.1.1
net.h
1 /*
2  * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
3  * University Research and Technology
4  * Corporation. All rights reserved.
5  * Copyright (c) 2004-2005 The University of Tennessee and The University
6  * of Tennessee Research Foundation. All rights
7  * reserved.
8  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
9  * University of Stuttgart. All rights reserved.
10  * Copyright (c) 2004-2005 The Regents of the University of California.
11  * All rights reserved.
12  * Copyright (c) 2007 Los Alamos National Security, LLC. All rights
13  * reserved.
14  * $COPYRIGHT$
15  *
16  * Additional copyrights may follow
17  *
18  * $HEADER$
19  */
20 
21 /* @file */
22 
23 #ifndef OPAL_UTIL_NET_H
24 #define OPAL_UTIL_NET_H
25 
26 #include "opal_config.h"
27 
28 #ifdef HAVE_SYS_TYPES_H
29 #include <sys/types.h>
30 #endif
31 #ifdef HAVE_SYS_SOCKET_H
32 #include <sys/socket.h>
33 #endif
34 #ifdef HAVE_NETINET_IN_H
35 #include <netinet/in.h>
36 #endif
37 
38 BEGIN_C_DECLS
39 
40 /**
41  * Intiailize the network helper subsystem
42  *
43  * Initialize the network helper subsystem. Should be called exactly
44  * once for any process that will use any function in the network
45  * helper subsystem.
46  *
47  * @retval OPAL_SUCCESS Success
48  * @retval OPAL_ERR_TEMP_OUT_OF_RESOURCE Not enough memory for static
49  * buffer creation
50  */
51 OPAL_DECLSPEC int opal_net_init(void);
52 
53 
54 /**
55  * Finalize the network helper subsystem
56  *
57  * Finalize the network helper subsystem. Should be called exactly
58  * once for any process that will use any function in the network
59  * helper subsystem.
60  *
61  * @retval OPAL_SUCCESS Success
62  */
63 OPAL_DECLSPEC int opal_net_finalize(void);
64 
65 
66 /**
67  * Calculate netmask in network byte order from CIDR notation
68  *
69  * @param prefixlen (IN) CIDR prefixlen
70  * @return netmask in network byte order
71  */
72 OPAL_DECLSPEC uint32_t opal_net_prefix2netmask(uint32_t prefixlen);
73 
74 
75 /**
76  * Determine if given IP address is in the localhost range
77  *
78  * Determine if the given IP address is in the localhost range
79  * (127.0.0.0/8), meaning that it can't be used to connect to machines
80  * outside the current host.
81  *
82  * @param addr struct sockaddr_in of IP address
83  * @return true if \c addr is a localhost address,
84  * false otherwise.
85  */
86 OPAL_DECLSPEC bool opal_net_islocalhost(const struct sockaddr *addr);
87 
88 
89 /**
90  * Are we on the same network?
91  *
92  * For IPv6, we only need to check for /64, there are no other
93  * local netmasks.
94  *
95  * @param addr1 struct sockaddr of address
96  * @param addr2 struct sockaddr of address
97  * @param prefixlen netmask (either CIDR oder IPv6 prefixlen)
98  * @return true if \c addr1 and \c addr2 are on the
99  * same net, false otherwise.
100  */
101 OPAL_DECLSPEC bool opal_net_samenetwork(const struct sockaddr *addr1,
102  const struct sockaddr *addr2,
103  uint32_t prefixlen);
104 
105 
106 /**
107  * Is the given address a public IPv4 address? Returns false for IPv6
108  * address.
109  *
110  * @param addr address as struct sockaddr
111  * @return true, if \c addr is IPv4 public, false otherwise
112  */
113 OPAL_DECLSPEC bool opal_net_addr_isipv4public(const struct sockaddr *addr);
114 
115 
116 /**
117  * Get string version of address
118  *
119  * Return the un-resolved address in a string format. The string will
120  * be returned in a per-thread static buffer and should not be freed
121  * by the user.
122  *
123  * @param addr struct sockaddr of address
124  * @return literal representation of \c addr
125  */
126 OPAL_DECLSPEC char* opal_net_get_hostname(const struct sockaddr *addr);
127 
128 
129 /**
130  * Get port number from struct sockaddr
131  *
132  * Return the port number (as an integr) from either a struct
133  * sockaddr_in or a struct sockaddr_in6.
134  *
135  * @param addr struct sockaddr containing address
136  * @return port number from \addr
137  */
138 OPAL_DECLSPEC int opal_net_get_port(const struct sockaddr *addr);
139 
140 END_C_DECLS
141 
142 #endif /* OPAL_UTIL_NET_H */