Abstraction layer for GNRC's network interfaces. More...

Detailed Description

Abstraction layer for GNRC's network interfaces.

Network interfaces in the context of GNRC are threads for protocols that are below the network layer.

Modules

 Generic network interface header
 

Files

file  gnrc_netif_cc110x.h
 CC110x adaption for Network interface API.
 
file  gnrc_netif_xbee.h
 XBee adaption for Network interface API.
 
file  6lo.h
 6LoWPAN definitions for Network interface API
 
file  netif/conf.h
 Configuration macros for Network interface API.
 
file  gnrc/netif/ethernet.h
 Ethernet adaption for Network interface API.
 
file  flags.h
 Flag definitions for Network interface API.
 
file  sys/include/net/gnrc/netif/ieee802154.h
 IEEE 802.15.4 adaption for Network interface API.
 
file  gnrc/netif/ipv6.h
 IPv6 defintions for Network interface API.
 
file  netif/mac.h
 Common MAC module definitions for Network interface API
 
file  net/gnrc/netif/raw.h
 Raw (i.e.
 
file  gnrc/netif.h
 Definition for GNRC's network interfaces.
 

Data Structures

struct  gnrc_netif_t
 Representation of a network interface. More...
 
struct  gnrc_netif_ops
 

Typedefs

typedef struct gnrc_netif_ops gnrc_netif_ops_t
 Operations to an interface.
 

Functions

gnrc_netif_tgnrc_netif_create (char *stack, int stacksize, char priority, const char *name, netdev_t *dev, const gnrc_netif_ops_t *ops)
 Creates a network interface. More...
 
unsigned gnrc_netif_numof (void)
 Get number of network interfaces actually allocated. More...
 
gnrc_netif_tgnrc_netif_iter (const gnrc_netif_t *prev)
 Iterate over all network interfaces. More...
 
gnrc_netif_tgnrc_netif_get_by_pid (kernel_pid_t pid)
 Get network interface by PID. More...
 
static int gnrc_netif_ipv6_addrs_get (const gnrc_netif_t *netif, ipv6_addr_t *addrs, size_t max_len)
 Gets the (unicast on anycast) IPv6 addresss of an interface (if IPv6 is supported) More...
 
static int gnrc_netif_ipv6_addr_add (const gnrc_netif_t *netif, ipv6_addr_t *addr, unsigned pfx_len, uint8_t flags)
 Adds an (unicast or anycast) IPv6 address to an interface (if IPv6 is supported) More...
 
static int gnrc_netif_ipv6_addr_remove (const gnrc_netif_t *netif, ipv6_addr_t *addr)
 Removes a (unicast or anycast) IPv6 address from an interface (if IPv6 is supported) More...
 
static int gnrc_netif_ipv6_groups_get (const gnrc_netif_t *netif, ipv6_addr_t *groups, size_t max_len)
 Gets the IPv6 multicast groups an interface is joined to (if IPv6 is supported) More...
 
static int gnrc_netif_ipv6_group_join (const gnrc_netif_t *netif, ipv6_addr_t *group)
 Joins an IPv6 multicast group on an interface (if IPv6 is supported) More...
 
static int gnrc_netif_ipv6_group_leave (const gnrc_netif_t *netif, ipv6_addr_t *group)
 Leaves an IPv6 multicast group on an interface (if IPv6 is supported) More...
 
int gnrc_netif_get_from_netdev (gnrc_netif_t *netif, gnrc_netapi_opt_t *opt)
 Default operation for gnrc_netif_ops_t::get() More...
 
int gnrc_netif_set_from_netdev (gnrc_netif_t *netif, const gnrc_netapi_opt_t *opt)
 Default operation for gnrc_netif_ops_t::set() More...
 
char * gnrc_netif_addr_to_str (const uint8_t *addr, size_t addr_len, char *out)
 Converts a hardware address to a human readable string. More...
 
size_t gnrc_netif_addr_from_str (const char *str, uint8_t *out)
 Parses a string of colon-separated hexadecimals to a hardware address. More...
 

Function Documentation

◆ gnrc_netif_addr_from_str()

size_t gnrc_netif_addr_from_str ( const char *  str,
uint8_t *  out 
)

Parses a string of colon-separated hexadecimals to a hardware address.

The input format must be like xx:xx:xx:xx where xx will be the bytes of addr in hexadecimal representation.

Precondition
(out != NULL)
out MUST have allocated at least GNRC_NETIF_L2ADDR_MAXLEN bytes.
Parameters
[in]strA string of colon-separated hexadecimals.
[out]outThe resulting hardware address. Must at least have GNRC_NETIF_L2ADDR_MAXLEN bytes allocated.
Returns
Actual length of out on success.
0, on failure.

◆ gnrc_netif_addr_to_str()

char* gnrc_netif_addr_to_str ( const uint8_t *  addr,
size_t  addr_len,
char *  out 
)

Converts a hardware address to a human readable string.

The format will be like xx:xx:xx:xx where xx are the bytes of addr in hexadecimal representation.

Precondition
(out != NULL) && ((addr != NULL) || (addr_len == 0))
out MUST have allocated at least 3 * addr_len bytes.
Parameters
[in]addrA hardware address.
[in]addr_lenLength of addr.
[out]outA string to store the output in. Must at least have 3 * addr_len bytes allocated.
Returns
out.

◆ gnrc_netif_create()

gnrc_netif_t* gnrc_netif_create ( char *  stack,
int  stacksize,
char  priority,
const char *  name,
netdev_t dev,
const gnrc_netif_ops_t ops 
)

Creates a network interface.

Parameters
[in]stackThe stack for the network interface's thread.
[in]stacksizeSize of stack.
[in]priorityPriority for the network interface's thread.
[in]nameName for the network interface. May be NULL.
[in]devDevice for the interface.
[in]opsOperations for the network interface.
Note
If DEVELHELP is defined netif_params_t::name is used as the name of the network interface's thread.
Attention
Fails and crashes (assertion error with DEVELHELP or segmentation fault without) if GNRC_NETIF_NUMOF is lower than the number of calls to this function.
Returns
The network interface on success.

◆ gnrc_netif_get_by_pid()

gnrc_netif_t* gnrc_netif_get_by_pid ( kernel_pid_t  pid)

Get network interface by PID.

Parameters
[in]pidA PID of a network interface.
Returns
The network interface on success.
NULL, if no network interface with PID exists.

◆ gnrc_netif_get_from_netdev()

int gnrc_netif_get_from_netdev ( gnrc_netif_t netif,
gnrc_netapi_opt_t opt 
)

Default operation for gnrc_netif_ops_t::get()

Note
Can also be used to be called after a custom operation.
Parameters
[in]netifThe network interface.
[out]optThe option parameters.
Returns
Return value of netdev_driver_t::get() of gnrc_netif_t::dev of netif.

◆ gnrc_netif_ipv6_addr_add()

static int gnrc_netif_ipv6_addr_add ( const gnrc_netif_t netif,
ipv6_addr_t addr,
unsigned  pfx_len,
uint8_t  flags 
)
inlinestatic

Adds an (unicast or anycast) IPv6 address to an interface (if IPv6 is supported)

Precondition
netif != NULL
addr != NULL
(pfx_len > 0) && (pfx_len <= 128)
Parameters
[in]netifThe interface. May not be NULL.
[in]addrThe address to add to netif. May not be NULL.
[in]pfx_lenThe prefix length of addr. Must be greater than 0 and lesser than or equal to 128.
[in]flagsFlags for addr. Set GNRC_NETIF_IPV6_ADDRS_FLAGS_STATE_VALID to skip duplicate address detection (when activated).
Returns
sizeof(ipv6_addr_t) on success.
-ENOMEM, if no space is left on netif to add addr or its corresponding solicited-nodes multicast address.
-ENOTSUP, if netif doesn't support IPv6.

Definition at line 307 of file gnrc/netif.h.

◆ gnrc_netif_ipv6_addr_remove()

static int gnrc_netif_ipv6_addr_remove ( const gnrc_netif_t netif,
ipv6_addr_t addr 
)
inlinestatic

Removes a (unicast or anycast) IPv6 address from an interface (if IPv6 is supported)

Precondition
netif != NULL
addr != NULL
Parameters
[in]netifThe interface. May not be NULL.
[in]addrThe address to remove from netif. May not be NULL.
Returns
sizeof(ipv6_addr_t) on success.
-ENOTSUP, if netif doesn't support IPv6.

Definition at line 332 of file gnrc/netif.h.

◆ gnrc_netif_ipv6_addrs_get()

static int gnrc_netif_ipv6_addrs_get ( const gnrc_netif_t netif,
ipv6_addr_t addrs,
size_t  max_len 
)
inlinestatic

Gets the (unicast on anycast) IPv6 addresss of an interface (if IPv6 is supported)

Precondition
netif != NULL
addrs != NULL
max_len >= sizeof(ipv6_addr_t)
Parameters
[in]netifThe interface. May not be NULL.
[out]addrsUp to the first max_len / sizeof(ipv6_addr_t) addresses assigned to netif. May not be NULL
[in]max_lenNumber of bytes available in addrs. Must be at least sizeof(ipv6_addr_t). It is recommended to use GNRC_NETIF_IPV6_ADDRS_NUMOF `* sizeof(ipv6_addr_t) here (and have addrs of the according length).
Returns
Number of addresses in addrs times sizeof(ipv6_addr_t) on success (including 0).
-ENOTSUP, if netif doesn't support IPv6.

Definition at line 276 of file gnrc/netif.h.

◆ gnrc_netif_ipv6_group_join()

static int gnrc_netif_ipv6_group_join ( const gnrc_netif_t netif,
ipv6_addr_t group 
)
inlinestatic

Joins an IPv6 multicast group on an interface (if IPv6 is supported)

Precondition
netif != NULL
group != NULL
Parameters
[in]netifThe interface.
[in]groupThe address of the multicast group to join on netif. May not be NULL.
Returns
sizeof(ipv6_addr_t) on success.
-ENOMEM, if no space is left on netif to add group.
-ENOTSUP, if netif doesn't support IPv6.

Definition at line 385 of file gnrc/netif.h.

◆ gnrc_netif_ipv6_group_leave()

static int gnrc_netif_ipv6_group_leave ( const gnrc_netif_t netif,
ipv6_addr_t group 
)
inlinestatic

Leaves an IPv6 multicast group on an interface (if IPv6 is supported)

Precondition
netif != NULL
group != NULL
Parameters
[in]netifThe interface.
[in]groupThe address of the multicast group to leave on netif. May not be NULL.
Returns
sizeof(ipv6_addr_t) on success.
-ENOTSUP, if netif doesn't support IPv6.

Definition at line 407 of file gnrc/netif.h.

◆ gnrc_netif_ipv6_groups_get()

static int gnrc_netif_ipv6_groups_get ( const gnrc_netif_t netif,
ipv6_addr_t groups,
size_t  max_len 
)
inlinestatic

Gets the IPv6 multicast groups an interface is joined to (if IPv6 is supported)

Precondition
netif != NULL
groups != NULL
max_len >= sizeof(ipv6_addr_t)
Parameters
[in]netifThe interface. May not be NULL.
[out]groupsUp to the first max_len / 8 multicast groups netif is joined to. May not be NULL
[in]max_lenNumber of bytes available in groups. Must be at least sizeof(ipv6_addr_t). It is recommended to use GNRC_NETIF_IPV6_GROUPS_NUMOF `* sizeof(ipv6_addr_t) here (and have groups of the according length).
Returns
Number of addresses in groups times sizeof(ipv6_addr_t) on success (including 0).
-ENOTSUP, if netif doesn't support IPv6.

Definition at line 361 of file gnrc/netif.h.

◆ gnrc_netif_iter()

gnrc_netif_t* gnrc_netif_iter ( const gnrc_netif_t prev)

Iterate over all network interfaces.

Parameters
[in]prevprevious interface in iteration. NULL to start iteration.
Returns
The next network interface after prev.
NULL, if prev was the last network interface.

◆ gnrc_netif_numof()

unsigned gnrc_netif_numof ( void  )

Get number of network interfaces actually allocated.

Returns
Number of network interfaces actually allocated

◆ gnrc_netif_set_from_netdev()

int gnrc_netif_set_from_netdev ( gnrc_netif_t netif,
const gnrc_netapi_opt_t opt 
)

Default operation for gnrc_netif_ops_t::set()

Note
Can also be used to be called after a custom operation.
Parameters
[in]netifThe network interface.
[in]optThe option parameters.
Returns
Return value of netdev_driver_t::set() of gnrc_netif_t::dev of netif.