libnl 2.0

Abstract Address

Core

Creating Abstract Addresses

struct nl_addr * nl_addr_alloc (size_t maxsize)
 Allocate new abstract address object.
struct nl_addr * nl_addr_build (int family, void *buf, size_t size)
 Allocate new abstract address object based on a binary address.
struct nl_addr * nl_addr_alloc_attr (struct nlattr *nla, int family)
 Allocate abstract address based on netlink attribute.
int nl_addr_parse (const char *addrstr, int hint, struct nl_addr **result)
 Allocate abstract address object based on a character string.
struct nl_addr * nl_addr_clone (struct nl_addr *addr)
 Clone existing abstract address object.

Destroying Abstract Addresses

void nl_addr_destroy (struct nl_addr *addr)
 Destroy abstract address object.

Managing Usage References

struct nl_addr * nl_addr_get (struct nl_addr *addr)
void nl_addr_put (struct nl_addr *addr)
int nl_addr_shared (struct nl_addr *addr)
 Check whether an abstract address object is shared.

Miscellaneous

int nl_addr_cmp (struct nl_addr *a, struct nl_addr *b)
 Compares two abstract address objects.
int nl_addr_cmp_prefix (struct nl_addr *a, struct nl_addr *b)
 Compares the prefix of two abstract address objects.
int nl_addr_iszero (struct nl_addr *addr)
 Returns true if the address consists of all zeros.
int nl_addr_valid (char *addr, int family)
 Check if an address matches a certain family.
int nl_addr_guess_family (struct nl_addr *addr)
 Guess address family of an abstract address object based on address size.
int nl_addr_fill_sockaddr (struct nl_addr *addr, struct sockaddr *sa, socklen_t *salen)
 Fill out sockaddr structure with values from abstract address object.

Getting Information About Addresses

int nl_addr_info (struct nl_addr *addr, struct addrinfo **result)
 Call getaddrinfo() for an abstract address object.
int nl_addr_resolve (struct nl_addr *addr, char *host, size_t hostlen)
 Resolve abstract address object to a name using getnameinfo().

Attributes

void nl_addr_set_family (struct nl_addr *addr, int family)
int nl_addr_get_family (struct nl_addr *addr)
int nl_addr_set_binary_addr (struct nl_addr *addr, void *buf, size_t len)
 Set binary address of abstract address object.
void * nl_addr_get_binary_addr (struct nl_addr *addr)
 Get binary address of abstract address object.
unsigned int nl_addr_get_len (struct nl_addr *addr)
 Get length of binary address of abstract address object.
void nl_addr_set_prefixlen (struct nl_addr *addr, int prefixlen)
unsigned int nl_addr_get_prefixlen (struct nl_addr *addr)
 Get prefix length of abstract address object.

Translations to Strings

char * nl_addr2str (struct nl_addr *addr, char *buf, size_t size)
 Convert abstract address object to character string.

Address Family Transformations

char * nl_af2str (int family, char *buf, size_t size)
int nl_str2af (const char *name)

Detailed Description

1) Transform character string to abstract address
 struct nl_addr *a = nl_addr_parse("::1", AF_UNSPEC);
 printf("Address family: %s\n", nl_af2str(nl_addr_get_family(a)));
 nl_addr_put(a);
 a = nl_addr_parse("11:22:33:44:55:66", AF_UNSPEC);
 printf("Address family: %s\n", nl_af2str(nl_addr_get_family(a)));
 nl_addr_put(a);

Function Documentation

struct nl_addr* nl_addr_alloc ( size_t  maxsize) [read]
Parameters:
maxsizeMaximum size of the binary address.
Returns:
Newly allocated address object or NULL

Definition at line 164 of file addr.c.

Referenced by nl_addr_build(), and nl_addr_parse().

struct nl_addr* nl_addr_build ( int  family,
void *  buf,
size_t  size 
) [read]
Parameters:
familyAddress family.
bufBuffer containing the binary address.
sizeLength of binary address buffer.
Returns:
Newly allocated address handle or NULL

Definition at line 185 of file addr.c.

References nl_addr_alloc().

Referenced by nl_addr_alloc_attr(), and nl_addr_clone().

struct nl_addr* nl_addr_alloc_attr ( struct nlattr *  nla,
int  family 
) [read]
Parameters:
nlaNetlink attribute of unspecific type.
familyAddress family.

Considers the netlink attribute payload a address of the specified family and allocates a new abstract address based on it.

Returns:
Newly allocated address handle or NULL.

Definition at line 213 of file addr.c.

References nl_addr_build(), nla_data(), and nla_len().

int nl_addr_parse ( const char *  addrstr,
int  hint,
struct nl_addr **  result 
)
Parameters:
addrstrAddress represented as character string.
hintAddress family hint or AF_UNSPEC.
resultPointer to store resulting address.

Regognizes the following address formats:

  Format                      Len                Family
  ----------------------------------------------------------------
  IPv6 address format         16                 AF_INET6
  ddd.ddd.ddd.ddd             4                  AF_INET
  HH:HH:HH:HH:HH:HH           6                  AF_LLC
  AA{.|,}NNNN                 2                  AF_DECnet
  HH:HH:HH:...                variable           AF_UNSPEC

Special values:

  • none: All bits and length set to 0.
  • {default|all|any}: All bits set to 0, length based on hint or AF_INET if no hint is given.

The prefix length may be appened at the end prefixed with a slash, e.g. 10.0.0.0/8.

Returns:
0 on success or a negative error code.

Definition at line 245 of file addr.c.

References nl_addr_alloc(), nl_addr_destroy(), and nl_addr_set_binary_addr().

struct nl_addr* nl_addr_clone ( struct nl_addr *  addr) [read]
Parameters:
addrAbstract address object.
Returns:
Newly allocated abstract address object being a duplicate of the specified address object or NULL if a failure occured.

Definition at line 420 of file addr.c.

References nl_addr_build().

void nl_addr_destroy ( struct nl_addr *  addr)
Parameters:
addrAbstract address object.

Definition at line 442 of file addr.c.

Referenced by nl_addr_parse().

int nl_addr_shared ( struct nl_addr *  addr)
Parameters:
addrAbstract address object.
Returns:
Non-zero if the abstract address object is shared, otherwise 0.

Definition at line 483 of file addr.c.

int nl_addr_cmp ( struct nl_addr *  a,
struct nl_addr *  b 
)
Parameters:
aA abstract address object.
bAnother abstract address object.
Returns:
Integer less than, equal to or greather than zero if is found, respectively to be less than, to, or be greater than b.

Definition at line 503 of file addr.c.

Referenced by rtnl_neigh_get().

int nl_addr_cmp_prefix ( struct nl_addr *  a,
struct nl_addr *  b 
)
Parameters:
aA abstract address object.
bAnother abstract address object.
Returns:
Integer less than, equal to or greather than zero if is found, respectively to be less than, to, or be greater than b.

Definition at line 525 of file addr.c.

int nl_addr_iszero ( struct nl_addr *  addr)
Parameters:
addrAddress to look at.

Definition at line 549 of file addr.c.

int nl_addr_valid ( char *  addr,
int  family 
)
Parameters:
addrAddress represented as character string.
familyDesired address family.
Returns:
1 if the address is of the desired address family, otherwise 0 is returned.

Definition at line 568 of file addr.c.

int nl_addr_guess_family ( struct nl_addr *  addr)
Parameters:
addrAbstract address object.
Returns:
Address family or AF_UNSPEC if guessing wasn't successful.

Definition at line 601 of file addr.c.

int nl_addr_fill_sockaddr ( struct nl_addr *  addr,
struct sockaddr *  sa,
socklen_t *  salen 
)
Parameters:
addrAbstract address object.
saDestination sockaddr structure buffer.
salenLength of sockaddr structure buffer.

Fills out the specified sockaddr structure with the data found in the specified abstract address. The salen argument needs to be set to the size of sa but will be modified to the actual size used during before the function exits.

Returns:
0 on success or a negative error code

Definition at line 628 of file addr.c.

Referenced by nl_addr_resolve().

int nl_addr_info ( struct nl_addr *  addr,
struct addrinfo **  result 
)
Parameters:
addrAbstract address object.
resultPointer to store resulting address list.

Calls getaddrinfo() for the specified abstract address in AI_NUMERICHOST mode.

Note:
The caller is responsible for freeing the linked list using the interface provided by getaddrinfo(3).
Returns:
0 on success or a negative error code.

Definition at line 684 of file addr.c.

References nl_addr2str().

int nl_addr_resolve ( struct nl_addr *  addr,
char *  host,
size_t  hostlen 
)
Parameters:
addrAbstract address object.
hostDestination buffer for host name.
hostlenLength of destination buffer.

Resolves the abstract address to a name and writes the looked up result into the host buffer. getnameinfo() is used to perform the lookup and is put into NI_NAMEREQD mode so the function will fail if the lookup couldn't be performed.

Returns:
0 on success or a negative error code.

Definition at line 728 of file addr.c.

References nl_addr_fill_sockaddr().

int nl_addr_set_binary_addr ( struct nl_addr *  addr,
void *  buf,
size_t  len 
)
Parameters:
addrAbstract address object.
bufBuffer containing binary address.
lenLength of buffer containing binary address.

Definition at line 769 of file addr.c.

Referenced by nl_addr_parse().

void* nl_addr_get_binary_addr ( struct nl_addr *  addr)
Parameters:
addrAbstract address object.

Definition at line 784 of file addr.c.

Referenced by flnl_lookup_build_request(), and nla_put_addr().

unsigned int nl_addr_get_len ( struct nl_addr *  addr)
Parameters:
addrAbstract address object.

Definition at line 793 of file addr.c.

Referenced by nla_put_addr().

unsigned int nl_addr_get_prefixlen ( struct nl_addr *  addr)
Parameters:
addrAbstract address object.

Definition at line 807 of file addr.c.

char* nl_addr2str ( struct nl_addr *  addr,
char *  buf,
size_t  size 
)
Parameters:
addrAbstract address object.
bufDestination buffer.
sizeSize of destination buffer.

Converts an abstract address to a character string and stores the result in the specified destination buffer.

Returns:
Address represented in ASCII stored in destination buffer.

Definition at line 830 of file addr.c.

Referenced by nl_addr_info().