libosmocore
1.5.1
Osmocom core library
|
Files | |
file | socket.h |
file | socket.c |
Data Structures | |
struct | osmo_sockaddr |
Macros | |
#define | OSMO_SOCK_NAME_MAXLEN (2 + INET6_ADDRSTRLEN + 1 + 5 + 3 + 2 + INET6_ADDRSTRLEN + 1 + 5 + 1) |
maximum length of a socket name ("r=1.2.3.4:123<->l=5.6.7.8:987") More... | |
#define | OSMO_SOCK_F_CONNECT (1 << 0) |
connect the socket to a remote peer More... | |
#define | OSMO_SOCK_F_BIND (1 << 1) |
bind the socket to a local address/port More... | |
#define | OSMO_SOCK_F_NONBLOCK (1 << 2) |
switch socket to non-blocking mode More... | |
#define | OSMO_SOCK_F_NO_MCAST_LOOP (1 << 3) |
disable multiast loop (IP_MULTICAST_LOOP) More... | |
#define | OSMO_SOCK_F_NO_MCAST_ALL (1 << 4) |
disable receiving all multiast even for non-subscribed groups More... | |
#define | OSMO_SOCK_F_UDP_REUSEADDR (1 << 5) |
use SO_REUSEADDR on UDP ports (required for multicast) More... | |
#define | OSMO_SOCK_MAX_ADDRS 32 |
maximum number of local or remote addresses supported by an osmo_sock instance More... | |
#define | _SOCKADDR_TO_STR(dest, sockaddr) |
Functions | |
int | osmo_sock_init (uint16_t family, uint16_t type, uint8_t proto, const char *host, uint16_t port, unsigned int flags) |
Initialize a socket (including bind/connect) More... | |
int | osmo_sock_init2 (uint16_t family, uint16_t type, uint8_t proto, const char *local_host, uint16_t local_port, const char *remote_host, uint16_t remote_port, unsigned int flags) |
Initialize a socket (including bind and/or connect) More... | |
int | osmo_sock_init2_multiaddr (uint16_t family, uint16_t type, uint8_t proto, const char **local_hosts, size_t local_hosts_cnt, uint16_t local_port, const char **remote_hosts, size_t remote_hosts_cnt, uint16_t remote_port, unsigned int flags) |
Initialize a socket (including bind and/or connect) with multiple local or remote addresses. More... | |
int | osmo_sock_init_osa (uint16_t type, uint8_t proto, const struct osmo_sockaddr *local, const struct osmo_sockaddr *remote, unsigned int flags) |
Initialize a socket (including bind and/or connect) More... | |
int | osmo_sock_init_ofd (struct osmo_fd *ofd, int family, int type, int proto, const char *host, uint16_t port, unsigned int flags) |
Initialize a socket and fill osmo_fd. More... | |
int | osmo_sock_init2_ofd (struct osmo_fd *ofd, int family, int type, int proto, const char *local_host, uint16_t local_port, const char *remote_host, uint16_t remote_port, unsigned int flags) |
Initialize a socket and fill osmo_fd. More... | |
int | osmo_sock_init_osa_ofd (struct osmo_fd *ofd, int type, int proto, const struct osmo_sockaddr *local, const struct osmo_sockaddr *remote, unsigned int flags) |
int | osmo_sock_init_sa (struct sockaddr *ss, uint16_t type, uint8_t proto, unsigned int flags) |
Initialize a socket and fill sockaddr. More... | |
int | osmo_sockaddr_is_local (struct sockaddr *addr, unsigned int addrlen) |
Determine if the given address is a local address. More... | |
unsigned int | osmo_sockaddr_to_str_and_uint (char *addr, unsigned int addr_len, uint16_t *port, const struct sockaddr *sa) |
Convert sockaddr to IP address as char string and port as uint16_t. More... | |
size_t | osmo_sockaddr_in_to_str_and_uint (char *addr, unsigned int addr_len, uint16_t *port, const struct sockaddr_in *sin) |
Convert sockaddr_in to IP address as char string and port as uint16_t. More... | |
const char * | osmo_sockaddr_ntop (const struct sockaddr *sa, char *dst) |
inet_ntop() wrapper for a struct sockaddr. More... | |
uint16_t | osmo_sockaddr_port (const struct sockaddr *sa) |
Get sockaddr port content (in host byte order) More... | |
int | osmo_sock_unix_init (uint16_t type, uint8_t proto, const char *socket_path, unsigned int flags) |
Initialize a unix domain socket (including bind/connect) More... | |
int | osmo_sock_unix_init_ofd (struct osmo_fd *ofd, uint16_t type, uint8_t proto, const char *socket_path, unsigned int flags) |
Initialize a unix domain socket and fill osmo_fd. More... | |
char * | osmo_sock_get_name (const void *ctx, int fd) |
Get address/port information on socket in dyn-alloc string like "(r=1.2.3.4:5<->l=6.7.8.9:10)". More... | |
const char * | osmo_sock_get_name2 (int fd) |
Get address/port information on socket in static string, like "r=1.2.3.4:5<->l=6.7.8.9:10". More... | |
char * | osmo_sock_get_name2_c (const void *ctx, int fd) |
Get address/port information on socket in static string, like "r=1.2.3.4:5<->l=6.7.8.9:10". More... | |
int | osmo_sock_get_name_buf (char *str, size_t str_len, int fd) |
Get address/port information on socket in provided string buffer, like "r=1.2.3.4:5<->l=6.7.8.9:10". More... | |
int | osmo_sock_get_ip_and_port (int fd, char *ip, size_t ip_len, char *port, size_t port_len, bool local) |
Get the IP and/or port number on socket in separate string buffers. More... | |
int | osmo_sock_get_local_ip (int fd, char *ip, size_t len) |
Get local IP address on socket. More... | |
int | osmo_sock_get_local_ip_port (int fd, char *port, size_t len) |
Get local port on socket. More... | |
int | osmo_sock_get_remote_ip (int fd, char *ip, size_t len) |
Get remote IP address on socket. More... | |
int | osmo_sock_get_remote_ip_port (int fd, char *port, size_t len) |
Get remote port on socket. More... | |
int | osmo_sock_mcast_loop_set (int fd, bool enable) |
Activate or de-activate local loop-back of transmitted multicast packets. More... | |
int | osmo_sock_mcast_ttl_set (int fd, uint8_t ttl) |
Set the TTL of outbound multicast packets. More... | |
int | osmo_sock_mcast_all_set (int fd, bool enable) |
Enable/disable receiving all multicast packets, even for non-subscribed groups. More... | |
int | osmo_sock_mcast_iface_set (int fd, const char *ifname) |
Set the network device to which we should bind the multicast socket. More... | |
int | osmo_sock_mcast_subscribe (int fd, const char *grp_addr) |
Subscribe to the given IP multicast group. More... | |
int | osmo_sock_local_ip (char *local_ip, const char *remote_ip) |
Determine the matching local IP-address for a given remote IP-Address. More... | |
int | osmo_sockaddr_local_ip (struct osmo_sockaddr *local_ip, const struct osmo_sockaddr *remote_ip) |
Determine the matching local address for a given remote address. More... | |
int | osmo_sockaddr_cmp (const struct osmo_sockaddr *a, const struct osmo_sockaddr *b) |
Compare two osmo_sockaddr. More... | |
const char * | osmo_sockaddr_to_str (const struct osmo_sockaddr *sockaddr) |
string-format a given osmo_sockaddr address More... | |
char * | osmo_sockaddr_to_str_buf (char *buf, size_t buf_len, const struct osmo_sockaddr *sockaddr) |
string-format a given osmo_sockaddr address into a user-supplied buffer More... | |
static struct addrinfo * | addrinfo_helper (uint16_t family, uint16_t type, uint8_t proto, const char *host, uint16_t port, bool passive) |
static int | addrinfo_helper_multi (struct addrinfo **addrinfo, uint16_t family, uint16_t type, uint8_t proto, const char **hosts, size_t host_cnt, uint16_t port, bool passive) |
Retrieve an array of addrinfo with specified hints, one for each host in the hosts array. More... | |
static int | socket_helper (const struct addrinfo *rp, unsigned int flags) |
static int | socket_helper_osa (const struct osmo_sockaddr *addr, uint16_t type, uint8_t proto, unsigned int flags) |
static int | multiaddr_snprintf (char *buf, size_t buf_len, const char **hosts, size_t host_cnt) |
static int | osmo_sock_init_tail (int fd, uint16_t type, unsigned int flags) |
static void | addrinfo_has_v4v6addr (const struct addrinfo **result, size_t result_count, bool *has_v4, bool *has_v6) |
static bool | addrinfo_has_in6addr_any (const struct addrinfo **result, size_t result_count) |
static int | socket_helper_multiaddr (uint16_t family, uint16_t type, uint8_t proto, unsigned int flags) |
static int | addrinfo_to_sockaddr (uint16_t family, const struct addrinfo **result, const char **hosts, int host_cont, uint8_t *addrs_buf, size_t addrs_buf_len) |
static int | osmo_fd_init_ofd (struct osmo_fd *ofd, int sfd) |
fill osmo_fd for a give sfd More... | |
static int | sockaddr_equal (const struct sockaddr *a, const struct sockaddr *b, unsigned int len) |
static int | sock_get_domain (int fd) |
Osmocom socket convenience functions.
#define _SOCKADDR_TO_STR | ( | dest, | |
sockaddr | |||
) |
#define OSMO_SOCK_F_BIND (1 << 1) |
bind the socket to a local address/port
#define OSMO_SOCK_F_CONNECT (1 << 0) |
connect the socket to a remote peer
#define OSMO_SOCK_F_NO_MCAST_ALL (1 << 4) |
disable receiving all multiast even for non-subscribed groups
#define OSMO_SOCK_F_NO_MCAST_LOOP (1 << 3) |
disable multiast loop (IP_MULTICAST_LOOP)
#define OSMO_SOCK_F_NONBLOCK (1 << 2) |
switch socket to non-blocking mode
#define OSMO_SOCK_F_UDP_REUSEADDR (1 << 5) |
use SO_REUSEADDR on UDP ports (required for multicast)
#define OSMO_SOCK_MAX_ADDRS 32 |
maximum number of local or remote addresses supported by an osmo_sock instance
#define OSMO_SOCK_NAME_MAXLEN (2 + INET6_ADDRSTRLEN + 1 + 5 + 3 + 2 + INET6_ADDRSTRLEN + 1 + 5 + 1) |
maximum length of a socket name ("r=1.2.3.4:123<->l=5.6.7.8:987")
|
static |
Referenced by osmo_sock_init2_multiaddr().
|
static |
Referenced by osmo_sock_init2_multiaddr().
|
static |
References DLGLOBAL, LOGL_ERROR, LOGP, proto, and type.
Referenced by addrinfo_helper_multi(), osmo_sock_init(), and osmo_sock_init2().
|
static |
Retrieve an array of addrinfo with specified hints, one for each host in the hosts array.
[out] | addrinfo | array of addrinfo pointers, will be filled by the function on success. Its size must be at least the one of hosts. |
[in] | family | Socket family like AF_INET, AF_INET6. |
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM. |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP. |
[in] | hosts | array of char pointers (strings) containing the addresses to query. |
[in] | host_cnt | length of the hosts array (in items). |
[in] | port | port number in host byte order. |
[in] | passive | whether to include the AI_PASSIVE flag in getaddrinfo() hints. |
References addrinfo_helper(), proto, and type.
Referenced by osmo_sock_init2_multiaddr().
|
static |
References DLGLOBAL, LOGL_ERROR, and LOGP.
Referenced by osmo_sock_init2_multiaddr().
|
static |
References len(), and OSMO_SNPRINTF_RET.
Referenced by osmo_sock_init2_multiaddr().
|
inlinestatic |
fill osmo_fd for a give sfd
[out] | ofd | file descriptor (will be filled in) |
[in] | sfd | socket file descriptor |
This function fills the ofd structure.
References osmo_fd::fd, OSMO_FD_READ, osmo_fd_register(), and osmo_fd::when.
Referenced by osmo_sock_init2_ofd(), osmo_sock_init_ofd(), osmo_sock_init_osa_ofd(), and osmo_sock_unix_init_ofd().
int osmo_sock_get_ip_and_port | ( | int | fd, |
char * | ip, | ||
size_t | ip_len, | ||
char * | port, | ||
size_t | port_len, | ||
bool | local | ||
) |
Get the IP and/or port number on socket in separate string buffers.
[in] | fd | file descriptor of socket |
[out] | ip | IP address (will be filled in when not NULL) |
[in] | ip_len | length of the ip buffer |
[out] | port | number (will be filled in when not NULL) |
[in] | port_len | length of the port buffer |
[in] | local | (true) or remote (false) name will get looked at |
References len().
Referenced by osmo_sock_get_local_ip(), osmo_sock_get_local_ip_port(), osmo_sock_get_name_buf(), osmo_sock_get_remote_ip(), and osmo_sock_get_remote_ip_port().
int osmo_sock_get_local_ip | ( | int | fd, |
char * | ip, | ||
size_t | len | ||
) |
Get local IP address on socket.
[in] | fd | file descriptor of socket |
[out] | ip | IP address (will be filled in) |
[in] | len | length of the output buffer |
References len(), and osmo_sock_get_ip_and_port().
int osmo_sock_get_local_ip_port | ( | int | fd, |
char * | port, | ||
size_t | len | ||
) |
Get local port on socket.
[in] | fd | file descriptor of socket |
[out] | port | number (will be filled in) |
[in] | len | length of the output buffer |
References len(), and osmo_sock_get_ip_and_port().
char * osmo_sock_get_name | ( | const void * | ctx, |
int | fd | ||
) |
Get address/port information on socket in dyn-alloc string like "(r=1.2.3.4:5<->l=6.7.8.9:10)".
Usually, it is better to use osmo_sock_get_name2() for a static string buffer or osmo_sock_get_name_buf() for a caller provided string buffer, to avoid the dynamic talloc allocation.
[in] | ctx | talloc context from which to allocate string buffer |
[in] | fd | file descriptor of socket |
References osmo_sock_get_name_buf(), and OSMO_SOCK_NAME_MAXLEN.
const char * osmo_sock_get_name2 | ( | int | fd | ) |
Get address/port information on socket in static string, like "r=1.2.3.4:5<->l=6.7.8.9:10".
This does not include braces like osmo_sock_get_name().
[in] | fd | File descriptor of socket. |
References osmo_sock_get_name_buf(), and OSMO_SOCK_NAME_MAXLEN.
char * osmo_sock_get_name2_c | ( | const void * | ctx, |
int | fd | ||
) |
Get address/port information on socket in static string, like "r=1.2.3.4:5<->l=6.7.8.9:10".
This does not include braces like osmo_sock_get_name().
[in] | fd | File descriptor of socket. |
References osmo_sock_get_name_buf(), and OSMO_SOCK_NAME_MAXLEN.
int osmo_sock_get_name_buf | ( | char * | str, |
size_t | str_len, | ||
int | fd | ||
) |
Get address/port information on socket in provided string buffer, like "r=1.2.3.4:5<->l=6.7.8.9:10".
This does not include braces like osmo_sock_get_name().
[out] | str | Destination string buffer. |
[in] | str_len | sizeof(str). |
[in] | fd | File descriptor of socket. |
References osmo_sock_get_ip_and_port(), and osmo_strlcpy().
Referenced by osmo_sock_get_name(), osmo_sock_get_name2(), and osmo_sock_get_name2_c().
int osmo_sock_get_remote_ip | ( | int | fd, |
char * | ip, | ||
size_t | len | ||
) |
Get remote IP address on socket.
[in] | fd | file descriptor of socket |
[out] | ip | IP address (will be filled in) |
[in] | len | length of the output buffer |
References len(), and osmo_sock_get_ip_and_port().
int osmo_sock_get_remote_ip_port | ( | int | fd, |
char * | port, | ||
size_t | len | ||
) |
Get remote port on socket.
[in] | fd | file descriptor of socket |
[out] | port | number (will be filled in) |
[in] | len | length of the output buffer |
References len(), and osmo_sock_get_ip_and_port().
int osmo_sock_init | ( | uint16_t | family, |
uint16_t | type, | ||
uint8_t | proto, | ||
const char * | host, | ||
uint16_t | port, | ||
unsigned int | flags | ||
) |
Initialize a socket (including bind/connect)
[in] | family | Address Family like AF_INET, AF_INET6, AF_UNSPEC |
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP |
[in] | host | remote host name or IP address in string form |
[in] | port | remote port number in host byte order |
[in] | flags | flags like OSMO_SOCK_F_CONNECT |
This function creates a new socket of the designated family, type and proto and optionally binds or connects it, depending on the value of flags parameter.
References addrinfo_helper(), DLGLOBAL, flags, LOGL_ERROR, LOGP, OSMO_SOCK_F_BIND, OSMO_SOCK_F_CONNECT, OSMO_SOCK_F_UDP_REUSEADDR, osmo_sock_init_tail(), proto, socket_helper(), and type.
Referenced by gsmtap_source_init_fd(), osmo_sock_init_ofd(), and osmo_sock_init_sa().
int osmo_sock_init2 | ( | uint16_t | family, |
uint16_t | type, | ||
uint8_t | proto, | ||
const char * | local_host, | ||
uint16_t | local_port, | ||
const char * | remote_host, | ||
uint16_t | remote_port, | ||
unsigned int | flags | ||
) |
Initialize a socket (including bind and/or connect)
[in] | family | Address Family like AF_INET, AF_INET6, AF_UNSPEC |
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP |
[in] | local_host | local host name or IP address in string form |
[in] | local_port | local port number in host byte order |
[in] | remote_host | remote host name or IP address in string form |
[in] | remote_port | remote port number in host byte order |
[in] | flags | flags like OSMO_SOCK_F_CONNECT |
This function creates a new socket of the designated family, type and proto and optionally binds it to the local_host and local_port as well as optionally connects it to the remote_host and \q remote_port, depending on the value * of flags parameter.
As opposed to osmo_sock_init(), this function allows to combine the OSMO_SOCK_F_BIND and OSMO_SOCK_F_CONNECT flags. This is useful if you want to connect to a remote host/port, but still want to bind that socket to either a specific local alias IP and/or a specific local source port.
You must specify either OSMO_SOCK_F_BIND, or OSMO_SOCK_F_CONNECT, or both.
If OSMO_SOCK_F_NONBLOCK is specified, the socket will be set to non-blocking mode.
References addrinfo_helper(), DLGLOBAL, flags, LOGL_ERROR, LOGP, OSMO_SOCK_F_BIND, OSMO_SOCK_F_CONNECT, OSMO_SOCK_F_UDP_REUSEADDR, osmo_sock_init_tail(), proto, socket_helper(), and type.
Referenced by osmo_sock_init2_ofd(), and osmo_sock_local_ip().
int osmo_sock_init2_multiaddr | ( | uint16_t | family, |
uint16_t | type, | ||
uint8_t | proto, | ||
const char ** | local_hosts, | ||
size_t | local_hosts_cnt, | ||
uint16_t | local_port, | ||
const char ** | remote_hosts, | ||
size_t | remote_hosts_cnt, | ||
uint16_t | remote_port, | ||
unsigned int | flags | ||
) |
Initialize a socket (including bind and/or connect) with multiple local or remote addresses.
[in] | family | Address Family like AF_INET, AF_INET6, AF_UNSPEC |
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP |
[in] | local_hosts | array of char pointers (strings), each containing local host name or IP address in string form |
[in] | local_hosts_cnt | length of local_hosts (in items) |
[in] | local_port | local port number in host byte order |
[in] | remote_host | array of char pointers (strings), each containing remote host name or IP address in string form |
[in] | remote_hosts_cnt | length of remote_hosts (in items) |
[in] | remote_port | remote port number in host byte order |
[in] | flags | flags like OSMO_SOCK_F_CONNECT |
This function is similar to osmo_sock_init2(), but can be passed an array of local or remote addresses for protocols supporting multiple addresses per socket, like SCTP (currently only one supported). This function should not be used by protocols not supporting this kind of features, but rather osmo_sock_init2() should be used instead. See osmo_sock_init2() for more information on flags and general behavior.
References addrinfo_has_in6addr_any(), addrinfo_has_v4v6addr(), addrinfo_helper_multi(), addrinfo_to_sockaddr(), DLGLOBAL, ENOTSUP, flags, LOGL_ERROR, LOGL_NOTICE, LOGP, multiaddr_snprintf(), OSMO_SOCK_F_BIND, OSMO_SOCK_F_CONNECT, osmo_sock_init_tail(), OSMO_SOCK_MAX_ADDRS, proto, socket_helper_multiaddr(), and type.
int osmo_sock_init2_ofd | ( | struct osmo_fd * | ofd, |
int | family, | ||
int | type, | ||
int | proto, | ||
const char * | local_host, | ||
uint16_t | local_port, | ||
const char * | remote_host, | ||
uint16_t | remote_port, | ||
unsigned int | flags | ||
) |
Initialize a socket and fill osmo_fd.
[out] | ofd | file descriptor (will be filled in) |
[in] | family | Address Family like AF_INET, AF_INET6, AF_UNSPEC |
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP |
[in] | local_host | local host name or IP address in string form |
[in] | local_port | local port number in host byte order |
[in] | remote_host | remote host name or IP address in string form |
[in] | remote_port | remote port number in host byte order |
[in] | flags | flags like OSMO_SOCK_F_CONNECT |
This function creates (and optionall binds/connects) a socket using osmo_sock_init2, but also fills the ofd structure.
References flags, osmo_fd_init_ofd(), osmo_sock_init2(), proto, and type.
int osmo_sock_init_ofd | ( | struct osmo_fd * | ofd, |
int | family, | ||
int | type, | ||
int | proto, | ||
const char * | host, | ||
uint16_t | port, | ||
unsigned int | flags | ||
) |
Initialize a socket and fill osmo_fd.
[out] | ofd | file descriptor (will be filled in) |
[in] | family | Address Family like AF_INET, AF_INET6, AF_UNSPEC |
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP |
[in] | host | remote host name or IP address in string form |
[in] | port | remote port number in host byte order |
[in] | flags | flags like OSMO_SOCK_F_CONNECT |
This function creates (and optionall binds/connects) a socket using osmo_sock_init, but also fills the ofd structure.
References flags, osmo_fd_init_ofd(), osmo_sock_init(), proto, and type.
int osmo_sock_init_osa | ( | uint16_t | type, |
uint8_t | proto, | ||
const struct osmo_sockaddr * | local, | ||
const struct osmo_sockaddr * | remote, | ||
unsigned int | flags | ||
) |
Initialize a socket (including bind and/or connect)
[in] | family | Address Family like AF_INET, AF_INET6, AF_UNSPEC |
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP |
[in] | local | local address |
[in] | remote | remote address |
[in] | flags | flags like OSMO_SOCK_F_CONNECT |
This function creates a new socket of the type and proto and optionally binds it to the local as well as optionally connects it to the remote depending on the value * of flags parameter.
As opposed to osmo_sock_init(), this function allows to combine the OSMO_SOCK_F_BIND and OSMO_SOCK_F_CONNECT flags. This is useful if you want to connect to a remote host/port, but still want to bind that socket to either a specific local alias IP and/or a specific local source port.
You must specify either OSMO_SOCK_F_BIND, or OSMO_SOCK_F_CONNECT, or both.
If OSMO_SOCK_F_NONBLOCK is specified, the socket will be set to non-blocking mode.
References _SOCKADDR_TO_STR, DLGLOBAL, flags, osmo_sockaddr_str::ip, LOGL_ERROR, LOGP, OSMO_SOCK_F_BIND, OSMO_SOCK_F_CONNECT, OSMO_SOCK_F_UDP_REUSEADDR, osmo_sock_init_tail(), osmo_sockaddr_str::port, proto, osmo_sockaddr::sa, socket_helper_osa(), type, and osmo_sockaddr::u.
Referenced by osmo_sock_init_osa_ofd(), and osmo_sockaddr_local_ip().
int osmo_sock_init_osa_ofd | ( | struct osmo_fd * | ofd, |
int | type, | ||
int | proto, | ||
const struct osmo_sockaddr * | local, | ||
const struct osmo_sockaddr * | remote, | ||
unsigned int | flags | ||
) |
References flags, osmo_fd_init_ofd(), osmo_sock_init_osa(), proto, and type.
int osmo_sock_init_sa | ( | struct sockaddr * | ss, |
uint16_t | type, | ||
uint8_t | proto, | ||
unsigned int | flags | ||
) |
Initialize a socket and fill sockaddr.
[out] | ss | socket address (will be filled in) |
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP |
[in] | flags | flags like OSMO_SOCK_F_CONNECT |
This function creates (and optionall binds/connects) a socket using osmo_sock_init, but also fills the ss structure.
References DLGLOBAL, flags, LOGL_ERROR, LOGP, osmo_sock_init(), proto, and type.
Referenced by gsmtap_source_add_sink_fd().
|
static |
References DLGLOBAL, flags, LOGL_ERROR, LOGP, OSMO_SOCK_F_BIND, OSMO_SOCK_F_CONNECT, OSMO_SOCK_F_NO_MCAST_ALL, OSMO_SOCK_F_NO_MCAST_LOOP, osmo_sock_mcast_all_set(), osmo_sock_mcast_loop_set(), and type.
Referenced by osmo_sock_init(), osmo_sock_init2(), osmo_sock_init2_multiaddr(), osmo_sock_init_osa(), and osmo_sock_unix_init().
int osmo_sock_local_ip | ( | char * | local_ip, |
const char * | remote_ip | ||
) |
Determine the matching local IP-address for a given remote IP-Address.
[out] | local_ip | caller provided memory for resulting local IP-address |
[in] | remote_ip | remote IP-address |
The function accepts IPv4 and IPv6 address strings. The caller must provide at least INET6_ADDRSTRLEN bytes for local_ip if an IPv6 is expected as as result. For IPv4 addresses the required amount is INET_ADDRSTRLEN.
References OSMO_SOCK_F_CONNECT, and osmo_sock_init2().
int osmo_sock_mcast_all_set | ( | int | fd, |
bool | enable | ||
) |
Enable/disable receiving all multicast packets, even for non-subscribed groups.
[in] | fd | file descriptor of related socket |
[in] | enable | Enable or Disable receiving of all packets |
References sock_get_domain().
Referenced by osmo_sock_init_tail().
int osmo_sock_mcast_iface_set | ( | int | fd, |
const char * | ifname | ||
) |
Set the network device to which we should bind the multicast socket.
[in] | fd | file descriptor of related socket |
[in] | ifname | name of network interface to user for multicast |
int osmo_sock_mcast_loop_set | ( | int | fd, |
bool | enable | ||
) |
Activate or de-activate local loop-back of transmitted multicast packets.
[in] | fd | file descriptor of related socket |
[in] | enable | Enable (true) or disable (false) loop-back |
References sock_get_domain().
Referenced by osmo_sock_init_tail().
int osmo_sock_mcast_subscribe | ( | int | fd, |
const char * | grp_addr | ||
) |
Subscribe to the given IP multicast group.
[in] | fd | file descriptor of related scoket |
[in] | grp_addr | ASCII representation of the multicast group address |
References sock_get_domain().
int osmo_sock_mcast_ttl_set | ( | int | fd, |
uint8_t | ttl | ||
) |
Set the TTL of outbound multicast packets.
[in] | fd | file descriptor of related socket |
[in] | ttl | TTL of to-be-sent multicast packets |
References sock_get_domain().
int osmo_sock_unix_init | ( | uint16_t | type, |
uint8_t | proto, | ||
const char * | socket_path, | ||
unsigned int | flags | ||
) |
Initialize a unix domain socket (including bind/connect)
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP |
[in] | socket_path | path to identify the socket |
[in] | flags | flags like OSMO_SOCK_F_CONNECT |
This function creates a new unix domain socket, type and proto and optionally binds or connects it, depending on the value of flags parameter.
References DLGLOBAL, flags, LOGL_ERROR, LOGP, OSMO_SOCK_F_BIND, OSMO_SOCK_F_CONNECT, OSMO_SOCK_F_NONBLOCK, osmo_sock_init_tail(), osmo_strlcpy(), proto, and type.
Referenced by osmo_sock_unix_init_ofd().
int osmo_sock_unix_init_ofd | ( | struct osmo_fd * | ofd, |
uint16_t | type, | ||
uint8_t | proto, | ||
const char * | socket_path, | ||
unsigned int | flags | ||
) |
Initialize a unix domain socket and fill osmo_fd.
[out] | ofd | file descriptor (will be filled in) |
[in] | type | Socket type like SOCK_DGRAM, SOCK_STREAM |
[in] | proto | Protocol like IPPROTO_TCP, IPPROTO_UDP |
[in] | socket_path | path to identify the socket |
[in] | flags | flags like OSMO_SOCK_F_CONNECT |
This function creates (and optionally binds/connects) a socket using osmo_sock_unix_init, but also fills the ofd structure.
References flags, osmo_fd_init_ofd(), osmo_sock_unix_init(), proto, and type.
int osmo_sockaddr_cmp | ( | const struct osmo_sockaddr * | a, |
const struct osmo_sockaddr * | b | ||
) |
Compare two osmo_sockaddr.
[in] | a | |
[in] | b |
References OSMO_CMP, osmo_sockaddr::sa, osmo_sockaddr::sin, osmo_sockaddr::sin6, and osmo_sockaddr::u.
size_t osmo_sockaddr_in_to_str_and_uint | ( | char * | addr, |
unsigned int | addr_len, | ||
uint16_t * | port, | ||
const struct sockaddr_in * | sin | ||
) |
Convert sockaddr_in to IP address as char string and port as uint16_t.
[out] | addr | String buffer to write IP address to, or NULL. |
[out] | addr_len | Size of addr. |
[out] | port | Pointer to uint16_t to write the port number to, or NULL. |
[in] | sin | Sockaddr to convert. |
References osmo_strlcpy().
Referenced by osmo_sockaddr_to_str_and_uint().
int osmo_sockaddr_is_local | ( | struct sockaddr * | addr, |
unsigned int | addrlen | ||
) |
Determine if the given address is a local address.
[in] | addr | Socket Address |
[in] | addrlen | Length of socket address in bytes |
References DLGLOBAL, LOGL_ERROR, LOGP, and sockaddr_equal().
Referenced by gsmtap_source_add_sink_fd().
int osmo_sockaddr_local_ip | ( | struct osmo_sockaddr * | local_ip, |
const struct osmo_sockaddr * | remote_ip | ||
) |
Determine the matching local address for a given remote address.
[out] | local_ip | caller provided memory for resulting local address |
[in] | remote_ip | remote address |
References OSMO_SOCK_F_CONNECT, and osmo_sock_init_osa().
const char * osmo_sockaddr_ntop | ( | const struct sockaddr * | sa, |
char * | dst | ||
) |
inet_ntop() wrapper for a struct sockaddr.
[in] | sa | source sockaddr to get the address from. |
[out] | dst | string buffer of at least INET6_ADDRSTRLEN size. |
References osmo_sockaddr::sa, osmo_sockaddr::sin, osmo_sockaddr::sin6, and osmo_sockaddr::u.
uint16_t osmo_sockaddr_port | ( | const struct sockaddr * | sa | ) |
Get sockaddr port content (in host byte order)
[in] | sa | source sockaddr to get the port from. |
References osmo_sockaddr::sa, osmo_sockaddr::sin, osmo_sockaddr::sin6, and osmo_sockaddr::u.
const char * osmo_sockaddr_to_str | ( | const struct osmo_sockaddr * | sockaddr | ) |
string-format a given osmo_sockaddr address
[in] | sockaddr | the osmo_sockaddr to print |
References osmo_sockaddr_to_str_buf().
unsigned int osmo_sockaddr_to_str_and_uint | ( | char * | addr, |
unsigned int | addr_len, | ||
uint16_t * | port, | ||
const struct sockaddr * | sa | ||
) |
Convert sockaddr to IP address as char string and port as uint16_t.
[out] | addr | String buffer to write IP address to, or NULL. |
[out] | addr_len | Size of addr. |
[out] | port | Pointer to uint16_t to write the port number to, or NULL. |
[in] | sa | Sockaddr to convert. |
References osmo_sockaddr_in_to_str_and_uint().
Referenced by osmo_sockaddr_to_str_buf().
char * osmo_sockaddr_to_str_buf | ( | char * | buf, |
size_t | buf_len, | ||
const struct osmo_sockaddr * | sockaddr | ||
) |
string-format a given osmo_sockaddr address into a user-supplied buffer
[in] | buf | user-supplied output buffer |
[in] | buf_len | size of the user-supplied output buffer in bytes |
[in] | sockaddr | the osmo_sockaddr to print |
References osmo_sockaddr_to_str_and_uint(), osmo_sockaddr::sa, and osmo_sockaddr::u.
Referenced by osmo_sockaddr_to_str().
|
static |
|
static |
Referenced by osmo_sockaddr_is_local().
|
static |
References DLGLOBAL, flags, LOGL_ERROR, LOGP, and OSMO_SOCK_F_NONBLOCK.
Referenced by osmo_sock_init(), and osmo_sock_init2().
|
static |
References DLGLOBAL, flags, LOGL_ERROR, LOGP, OSMO_SOCK_F_NONBLOCK, proto, and type.
Referenced by osmo_sock_init2_multiaddr().
|
static |
References DLGLOBAL, flags, LOGL_ERROR, LOGP, OSMO_SOCK_F_NONBLOCK, proto, osmo_sockaddr::sa, type, and osmo_sockaddr::u.
Referenced by osmo_sock_init_osa().