libosmocore 1.11.0.24-ece60
Osmocom core library
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Socket convenience functions

Osmocom socket convenience functions. More...

Files

file  socket.h
 Osmocom socket convenience functions.
 
file  socket.c
 

Data Structures

struct  osmo_sockaddr
 
struct  osmo_sock_init2_multiaddr_pars
 

Macros

#define OSMO_SOCK_MAX_ADDRS   32
 maximum number of local or remote addresses supported by an osmo_sock instance More...
 
#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_MULTIADDR_PEER_STR_MAXLEN   (INET6_ADDRSTRLEN * OSMO_SOCK_MAX_ADDRS + INET6_ADDRSTRLEN + 2 + 6 + 1)
 maximum length of a multi-address socket peer (endpoint) name: (5.6.7.8|::9):987 char '(' + OSMO_STREAM_MAX_ADDRS - 1 addr separators + chars "):" + port buffer + char '\0' More...
 
#define OSMO_SOCK_MULTIADDR_NAME_MAXLEN   (OSMO_SOCK_MULTIADDR_PEER_STR_MAXLEN + 7)
 maximum length of a multia-address socket name ("r=(::2|1.2.3.4):123<->l=(5.6.7.8|::9):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_F_DSCP(x)   (((x)&0x3f) << 24)
 use OSMO_SOCK_F_DSCP(x) to set IP DSCP 'x' for packets transmitted on the socket More...
 
#define GET_OSMO_SOCK_F_DSCP(f)   (((f) >> 24) & 0x3f)
 
#define OSMO_SOCK_F_PRIO(x)   (((x)&0xff) << 16)
 use OSMO_SOCK_F_PRIO(x) to set priority 'x' for packets transmitted on the socket More...
 
#define GET_OSMO_SOCK_F_PRIO(f)   (((f) >> 16) & 0xff)
 

Functions

int osmo_sockaddr_is_local (struct sockaddr *addr, unsigned int addrlen)
 
int osmo_sockaddr_is_any (const struct osmo_sockaddr *addr)
 
static socklen_t osmo_sockaddr_size (const struct osmo_sockaddr *addr)
 Return the size of the variant used in the address NOTE: This does not return the size of the in{,6}_addr, but rather the size of the surrounding sockaddr_in{,6}. More...
 
unsigned int osmo_sockaddr_to_str_and_uint (char *addr, unsigned int addr_len, uint16_t *port, const struct sockaddr *sa)
 
size_t osmo_sockaddr_in_to_str_and_uint (char *addr, unsigned int addr_len, uint16_t *port, const struct sockaddr_in *sin)
 
const char * osmo_sockaddr_ntop (const struct sockaddr *sa, char *dst)
 
uint16_t osmo_sockaddr_port (const struct sockaddr *sa)
 
void osmo_sockaddr_set_port (struct sockaddr *sa, uint16_t port)
 
int osmo_sockaddr_local_ip (struct osmo_sockaddr *local_ip, const struct osmo_sockaddr *remote_ip)
 
int osmo_sockaddr_cmp (const struct osmo_sockaddr *a, const struct osmo_sockaddr *b)
 
int osmo_sockaddr_to_octets (uint8_t *dst, size_t dst_maxlen, const struct osmo_sockaddr *os)
 
int osmo_sockaddr_from_octets (struct osmo_sockaddr *os, const void *src, size_t src_len)
 
int osmo_sockaddr_from_str_and_uint (struct osmo_sockaddr *osa_out, const char *ipstr, uint16_t port)
 
int osmo_sockaddr_netmask_to_prefixlen (const struct osmo_sockaddr *addr)
 
const char * osmo_sockaddr_to_str (const struct osmo_sockaddr *sockaddr)
 
char * osmo_sockaddr_to_str_buf (char *buf, size_t buf_len, const struct osmo_sockaddr *sockaddr)
 
int osmo_sockaddr_to_str_buf2 (char *buf, size_t buf_len, const struct osmo_sockaddr *sockaddr)
 
char * osmo_sockaddr_to_str_c (void *ctx, const struct osmo_sockaddr *sockaddr)
 
int osmo_sock_init (uint16_t family, uint16_t type, uint8_t proto, const char *host, uint16_t port, unsigned int flags)
 
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)
 
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) OSMO_DEPRECATED_OUTSIDE("Use osmo_sock_init2_multiaddr2() instead")
 
int osmo_sock_init2_multiaddr2 (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, struct osmo_sock_init2_multiaddr_pars *pars)
 
int osmo_sock_init_osa (uint16_t type, uint8_t proto, const struct osmo_sockaddr *local, const struct osmo_sockaddr *remote, unsigned int flags)
 
int osmo_sock_init_ofd (struct osmo_fd *ofd, int family, int type, int proto, const char *host, uint16_t port, unsigned int flags)
 
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)
 
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)
 
int osmo_sock_unix_init (uint16_t type, uint8_t proto, const char *socket_path, unsigned int flags)
 
int osmo_sock_unix_init_ofd (struct osmo_fd *ofd, uint16_t type, uint8_t proto, const char *socket_path, unsigned int flags)
 
char * osmo_sock_get_name (const void *ctx, int fd)
 
const char * osmo_sock_get_name2 (int fd)
 
char * osmo_sock_get_name2_c (const void *ctx, int fd)
 
int osmo_sock_get_name_buf (char *str, size_t str_len, int fd)
 
int osmo_sock_get_ip_and_port (int fd, char *ip, size_t ip_len, char *port, size_t port_len, bool local)
 
int osmo_sock_get_local_ip (int fd, char *host, size_t len)
 
int osmo_sock_get_local_ip_port (int fd, char *port, size_t len)
 
int osmo_sock_get_remote_ip (int fd, char *host, size_t len)
 
int osmo_sock_get_remote_ip_port (int fd, char *port, size_t len)
 
int osmo_sock_multiaddr_get_ip_and_port (int fd, int ip_proto, char *ip, size_t *ip_cnt, size_t ip_len, char *port, size_t port_len, bool local)
 
int osmo_multiaddr_ip_and_port_snprintf (char *str, size_t str_len, const char *ip, size_t ip_cnt, size_t ip_len, const char *portbuf)
 
int osmo_sock_multiaddr_get_name_buf (char *str, size_t str_len, int fd, int sk_proto)
 
int osmo_sock_multiaddr_add_local_addr (int sfd, const char **addrs, size_t addrs_cnt)
 
int osmo_sock_multiaddr_del_local_addr (int sfd, const char **addrs, size_t addrs_cnt)
 
int osmo_sock_mcast_loop_set (int fd, bool enable)
 
int osmo_sock_mcast_ttl_set (int fd, uint8_t ttl)
 
int osmo_sock_mcast_all_set (int fd, bool enable)
 
int osmo_sock_mcast_iface_set (int fd, const char *ifname)
 
int osmo_sock_mcast_subscribe (int fd, const char *grp_addr)
 
int osmo_sock_local_ip (char *local_ip, const char *remote_ip)
 
int osmo_sock_set_dscp (int fd, uint8_t dscp)
 
int osmo_sock_set_priority (int fd, int prio)
 
int osmo_sock_sctp_get_peer_addr_info (int fd, struct sctp_paddrinfo *pinfo, size_t *pinfo_cnt)
 

Detailed Description

Osmocom socket convenience functions.

Macro Definition Documentation

◆ GET_OSMO_SOCK_F_DSCP

#define GET_OSMO_SOCK_F_DSCP (   f)    (((f) >> 24) & 0x3f)

◆ GET_OSMO_SOCK_F_PRIO

#define GET_OSMO_SOCK_F_PRIO (   f)    (((f) >> 16) & 0xff)

◆ OSMO_SOCK_F_BIND

#define OSMO_SOCK_F_BIND   (1 << 1)

bind the socket to a local address/port

◆ OSMO_SOCK_F_CONNECT

#define OSMO_SOCK_F_CONNECT   (1 << 0)

connect the socket to a remote peer

◆ OSMO_SOCK_F_DSCP

#define OSMO_SOCK_F_DSCP (   x)    (((x)&0x3f) << 24)

use OSMO_SOCK_F_DSCP(x) to set IP DSCP 'x' for packets transmitted on the socket

◆ OSMO_SOCK_F_NO_MCAST_ALL

#define OSMO_SOCK_F_NO_MCAST_ALL   (1 << 4)

disable receiving all multiast even for non-subscribed groups

◆ OSMO_SOCK_F_NO_MCAST_LOOP

#define OSMO_SOCK_F_NO_MCAST_LOOP   (1 << 3)

disable multiast loop (IP_MULTICAST_LOOP)

◆ OSMO_SOCK_F_NONBLOCK

#define OSMO_SOCK_F_NONBLOCK   (1 << 2)

switch socket to non-blocking mode

◆ OSMO_SOCK_F_PRIO

#define OSMO_SOCK_F_PRIO (   x)    (((x)&0xff) << 16)

use OSMO_SOCK_F_PRIO(x) to set priority 'x' for packets transmitted on the socket

◆ OSMO_SOCK_F_UDP_REUSEADDR

#define OSMO_SOCK_F_UDP_REUSEADDR   (1 << 5)

use SO_REUSEADDR on UDP ports (required for multicast)

◆ OSMO_SOCK_MAX_ADDRS

#define OSMO_SOCK_MAX_ADDRS   32

maximum number of local or remote addresses supported by an osmo_sock instance

◆ OSMO_SOCK_MULTIADDR_NAME_MAXLEN

#define OSMO_SOCK_MULTIADDR_NAME_MAXLEN   (OSMO_SOCK_MULTIADDR_PEER_STR_MAXLEN + 7)

maximum length of a multia-address socket name ("r=(::2|1.2.3.4):123<->l=(5.6.7.8|::9):987")

◆ OSMO_SOCK_MULTIADDR_PEER_STR_MAXLEN

#define OSMO_SOCK_MULTIADDR_PEER_STR_MAXLEN   (INET6_ADDRSTRLEN * OSMO_SOCK_MAX_ADDRS + INET6_ADDRSTRLEN + 2 + 6 + 1)

maximum length of a multi-address socket peer (endpoint) name: (5.6.7.8|::9):987 char '(' + OSMO_STREAM_MAX_ADDRS - 1 addr separators + chars "):" + port buffer + char '\0'

◆ OSMO_SOCK_NAME_MAXLEN

#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")

Function Documentation

◆ osmo_multiaddr_ip_and_port_snprintf()

int osmo_multiaddr_ip_and_port_snprintf ( char *  str,
size_t  str_len,
const char *  ip,
size_t  ip_cnt,
size_t  ip_len,
const char *  portbuf 
)

◆ osmo_sock_get_ip_and_port()

int osmo_sock_get_ip_and_port ( int  fd,
char *  ip,
size_t  ip_len,
char *  port,
size_t  port_len,
bool  local 
)

Referenced by fill_stats().

◆ osmo_sock_get_local_ip()

int osmo_sock_get_local_ip ( int  fd,
char *  host,
size_t  len 
)

◆ osmo_sock_get_local_ip_port()

int osmo_sock_get_local_ip_port ( int  fd,
char *  port,
size_t  len 
)

◆ osmo_sock_get_name()

char * osmo_sock_get_name ( const void *  ctx,
int  fd 
)

◆ osmo_sock_get_name2()

const char * osmo_sock_get_name2 ( int  fd)

Referenced by fill_stats().

◆ osmo_sock_get_name2_c()

char * osmo_sock_get_name2_c ( const void *  ctx,
int  fd 
)

◆ osmo_sock_get_name_buf()

int osmo_sock_get_name_buf ( char *  str,
size_t  str_len,
int  fd 
)

◆ osmo_sock_get_remote_ip()

int osmo_sock_get_remote_ip ( int  fd,
char *  host,
size_t  len 
)

◆ osmo_sock_get_remote_ip_port()

int osmo_sock_get_remote_ip_port ( int  fd,
char *  port,
size_t  len 
)

◆ osmo_sock_init()

int osmo_sock_init ( uint16_t  family,
uint16_t  type,
uint8_t  proto,
const char *  host,
uint16_t  port,
unsigned int  flags 
)

◆ osmo_sock_init2()

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 
)

◆ osmo_sock_init2_multiaddr()

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 
)

◆ osmo_sock_init2_multiaddr2()

int osmo_sock_init2_multiaddr2 ( 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,
struct osmo_sock_init2_multiaddr_pars pars 
)

◆ osmo_sock_init2_ofd()

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 
)

◆ osmo_sock_init_ofd()

int osmo_sock_init_ofd ( struct osmo_fd ofd,
int  family,
int  type,
int  proto,
const char *  host,
uint16_t  port,
unsigned int  flags 
)

◆ osmo_sock_init_osa()

int osmo_sock_init_osa ( uint16_t  type,
uint8_t  proto,
const struct osmo_sockaddr local,
const struct osmo_sockaddr remote,
unsigned int  flags 
)

◆ osmo_sock_init_osa_ofd()

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 
)

◆ osmo_sock_init_sa()

int osmo_sock_init_sa ( struct sockaddr *  ss,
uint16_t  type,
uint8_t  proto,
unsigned int  flags 
)

◆ osmo_sock_local_ip()

int osmo_sock_local_ip ( char *  local_ip,
const char *  remote_ip 
)

◆ osmo_sock_mcast_all_set()

int osmo_sock_mcast_all_set ( int  fd,
bool  enable 
)

◆ osmo_sock_mcast_iface_set()

int osmo_sock_mcast_iface_set ( int  fd,
const char *  ifname 
)

◆ osmo_sock_mcast_loop_set()

int osmo_sock_mcast_loop_set ( int  fd,
bool  enable 
)

◆ osmo_sock_mcast_subscribe()

int osmo_sock_mcast_subscribe ( int  fd,
const char *  grp_addr 
)

◆ osmo_sock_mcast_ttl_set()

int osmo_sock_mcast_ttl_set ( int  fd,
uint8_t  ttl 
)

◆ osmo_sock_multiaddr_add_local_addr()

int osmo_sock_multiaddr_add_local_addr ( int  sfd,
const char **  addrs,
size_t  addrs_cnt 
)

◆ osmo_sock_multiaddr_del_local_addr()

int osmo_sock_multiaddr_del_local_addr ( int  sfd,
const char **  addrs,
size_t  addrs_cnt 
)

◆ osmo_sock_multiaddr_get_ip_and_port()

int osmo_sock_multiaddr_get_ip_and_port ( int  fd,
int  ip_proto,
char *  ip,
size_t *  ip_cnt,
size_t  ip_len,
char *  port,
size_t  port_len,
bool  local 
)

◆ osmo_sock_multiaddr_get_name_buf()

int osmo_sock_multiaddr_get_name_buf ( char *  str,
size_t  str_len,
int  fd,
int  sk_proto 
)

◆ osmo_sock_sctp_get_peer_addr_info()

int osmo_sock_sctp_get_peer_addr_info ( int  fd,
struct sctp_paddrinfo *  pinfo,
size_t *  pinfo_cnt 
)

◆ osmo_sock_set_dscp()

int osmo_sock_set_dscp ( int  fd,
uint8_t  dscp 
)

◆ osmo_sock_set_priority()

int osmo_sock_set_priority ( int  fd,
int  prio 
)

◆ osmo_sock_unix_init()

int osmo_sock_unix_init ( uint16_t  type,
uint8_t  proto,
const char *  socket_path,
unsigned int  flags 
)

◆ 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 
)

◆ osmo_sockaddr_cmp()

int osmo_sockaddr_cmp ( const struct osmo_sockaddr a,
const struct osmo_sockaddr b 
)

◆ osmo_sockaddr_from_octets()

int osmo_sockaddr_from_octets ( struct osmo_sockaddr os,
const void *  src,
size_t  src_len 
)

◆ osmo_sockaddr_from_str_and_uint()

int osmo_sockaddr_from_str_and_uint ( struct osmo_sockaddr osa_out,
const char *  ipstr,
uint16_t  port 
)

◆ osmo_sockaddr_in_to_str_and_uint()

size_t osmo_sockaddr_in_to_str_and_uint ( char *  addr,
unsigned int  addr_len,
uint16_t *  port,
const struct sockaddr_in *  sin 
)

◆ osmo_sockaddr_is_any()

int osmo_sockaddr_is_any ( const struct osmo_sockaddr addr)

◆ osmo_sockaddr_is_local()

int osmo_sockaddr_is_local ( struct sockaddr *  addr,
unsigned int  addrlen 
)

◆ osmo_sockaddr_local_ip()

int osmo_sockaddr_local_ip ( struct osmo_sockaddr local_ip,
const struct osmo_sockaddr remote_ip 
)

◆ osmo_sockaddr_netmask_to_prefixlen()

int osmo_sockaddr_netmask_to_prefixlen ( const struct osmo_sockaddr addr)

◆ osmo_sockaddr_ntop()

const char * osmo_sockaddr_ntop ( const struct sockaddr *  sa,
char *  dst 
)

◆ osmo_sockaddr_port()

uint16_t osmo_sockaddr_port ( const struct sockaddr *  sa)

◆ osmo_sockaddr_set_port()

void osmo_sockaddr_set_port ( struct sockaddr *  sa,
uint16_t  port 
)

◆ osmo_sockaddr_size()

static socklen_t osmo_sockaddr_size ( const struct osmo_sockaddr addr)
inlinestatic

Return the size of the variant used in the address NOTE: This does not return the size of the in{,6}_addr, but rather the size of the surrounding sockaddr_in{,6}.

Parameters
[in]addrthe osmo_sockaddr to get the size of
Returns
the size of the struct variant being used. If the value in sa_family is unsupported it will return the size of struct osmo_sockaddr. Returns 0 if addr is NULL. This way it can simply be a wrapper for sendto() which can be called with NULL/0 for dest_addr / addrlen (and then behaves like a send() call).

References osmo_sockaddr::sa, and osmo_sockaddr::u.

Referenced by osmo_iofd_sendto_msgb().

◆ osmo_sockaddr_to_octets()

int osmo_sockaddr_to_octets ( uint8_t *  dst,
size_t  dst_maxlen,
const struct osmo_sockaddr os 
)

◆ osmo_sockaddr_to_str()

const char * osmo_sockaddr_to_str ( const struct osmo_sockaddr sockaddr)

◆ osmo_sockaddr_to_str_and_uint()

unsigned int osmo_sockaddr_to_str_and_uint ( char *  addr,
unsigned int  addr_len,
uint16_t *  port,
const struct sockaddr *  sa 
)

◆ osmo_sockaddr_to_str_buf()

char * osmo_sockaddr_to_str_buf ( char *  buf,
size_t  buf_len,
const struct osmo_sockaddr sockaddr 
)

◆ osmo_sockaddr_to_str_buf2()

int osmo_sockaddr_to_str_buf2 ( char *  buf,
size_t  buf_len,
const struct osmo_sockaddr sockaddr 
)

◆ osmo_sockaddr_to_str_c()

char * osmo_sockaddr_to_str_c ( void *  ctx,
const struct osmo_sockaddr sockaddr 
)