diff --git a/Makefile.dep b/Makefile.dep index 9b9dcd53abeae1c24864dcbbbd5ca46273b5310c..356746da10fcabbb62ba8a465e3b633cb7448e21 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -143,6 +143,10 @@ ifneq (,$(filter trickle,$(USEMODULE))) USEMODULE += xtimer endif +ifneq (,$(filter gnrc_netif,$(USEMODULE))) + USEMODULE += netif +endif + ifneq (,$(filter ieee802154 nrfmin,$(USEMODULE))) ifneq (,$(filter gnrc_ipv6, $(USEMODULE))) USEMODULE += gnrc_sixlowpan diff --git a/sys/Makefile.include b/sys/Makefile.include index dfbb94067b1c29ce4758d2ae2b52e070b34fe6f6..baa5e0b298a94926d9835b6b62e3ba9183f21810 100644 --- a/sys/Makefile.include +++ b/sys/Makefile.include @@ -13,6 +13,9 @@ endif ifneq (,$(filter fib,$(USEMODULE))) USEMODULE_INCLUDES += $(RIOTBASE)/sys/posix/include endif +ifneq (,$(filter gnrc_netif,$(USEMODULE))) + USEMODULE_INCLUDES += $(RIOTBASE)/sys/net/gnrc/netif/include +endif ifneq (,$(filter gnrc_sock,$(USEMODULE))) USEMODULE_INCLUDES += $(RIOTBASE)/sys/net/gnrc/sock/include ifneq (,$(filter gnrc_ipv6,$(USEMODULE))) diff --git a/sys/net/gnrc/netif/_netif.c b/sys/net/gnrc/netif/_netif.c new file mode 100644 index 0000000000000000000000000000000000000000..4c534b797c7d0742881c81fc60415b4efd1f0663 --- /dev/null +++ b/sys/net/gnrc/netif/_netif.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2018 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @{ + * + * Implements @ref net_netif for @ref net_gnrc + * + * @file + * @author Martine Lenders <m.lenders@fu-berlin.de> + */ + +#include <string.h> + +#include "fmt.h" +#include "net/gnrc/netapi.h" +#include "net/gnrc/netif/internal.h" + +#include "net/netif.h" + +netif_t netif_iter(netif_t last) +{ + gnrc_netif_t *netif; + + if (last == NETIF_INVALID) { + netif = gnrc_netif_iter(NULL); + } + else if ((netif = gnrc_netif_get_by_pid((kernel_pid_t)last)) != NULL) { + netif = gnrc_netif_iter(netif); + } + if (netif != NULL) { + return netif->pid; + } + else { + return NETIF_INVALID; + } +} + +int netif_get_name(netif_t iface, char *name) +{ + gnrc_netif_t *netif = gnrc_netif_get_by_pid((kernel_pid_t)iface); + int res = 0; + + if (netif != NULL) { + res += fmt_str(name, "if"); + res += fmt_u16_dec(&name[res], netif->pid); + name[res] = '\0'; + } + return res; +} + +netif_t netif_get_by_name(const char *name) +{ + if ((strncmp(name, "if", 2) == 0)) { + kernel_pid_t _name_pid = (kernel_pid_t)scn_u32_dec(&name[2], 2); + if (_name_pid > 0) { + gnrc_netif_t *netif = NULL; + + while ((netif = gnrc_netif_iter(netif)) != NULL) { + if (netif->pid == _name_pid) { + return netif->pid; + } + } + } + } + return NETIF_INVALID; +} + +int netif_get_opt(netif_t netif, netopt_t opt, uint16_t context, + void *value, size_t max_len) +{ + return gnrc_netapi_get(netif, opt, context, value, max_len); +} + +int netif_set_opt(netif_t netif, netopt_t opt, uint16_t context, + void *value, size_t value_len) +{ + return gnrc_netapi_set(netif, opt, context, value, value_len); +} + +/** @} */ diff --git a/sys/net/gnrc/netif/include/netif_types.h b/sys/net/gnrc/netif/include/netif_types.h new file mode 100644 index 0000000000000000000000000000000000000000..96101e1d1061a7ff1e90e1d8705c2de38609e989 --- /dev/null +++ b/sys/net/gnrc/netif/include/netif_types.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup net_netif + * @{ + * + * @file + * @brief GNRC-specfic type definitions for @ref net_netif + * + * @author Martine Lenders <m.lenders@fu-berlin.de> + */ +#ifndef NETIF_TYPES_H +#define NETIF_TYPES_H + +#include "kernel_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define NETIF_INVALID (KERNEL_PID_UNDEF) /**< Invalid interface */ + +typedef kernel_pid_t netif_t; /**< GNRC-representation of a network interface */ + +#ifdef __cplusplus +} +#endif + +#endif /* NETIF_TYPES_H */ +/** @} */