Skip to content

Commit

Permalink
cpu/native: adapt start-up and auto-init for multiple netdev2_tap
Browse files Browse the repository at this point in the history
  • Loading branch information
miri64 committed Jan 10, 2017
1 parent e1047ca commit 2ebe5ca
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 27 deletions.
50 changes: 50 additions & 0 deletions cpu/native/include/netdev2_tap_params.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Copyright (C) 2016 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 netdev2
* @brief
* @{
*
* @file
* @brief Default configuration for the netdev2_tap driver
*
* @author Martine Lenders <[email protected]>
*/
#ifndef NETDEV2_TAP_PARAMS_H_
#define NETDEV2_TAP_PARAMS_H_

#include "netdev2_tap.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
* @brief Number of allocated parameters at @ref netdev2_tap_params
*
* @note This was decided to only be configurable on compile-time to be
* more similar to actual boards
*/
#ifndef NETDEV2_TAP_MAX
#define NETDEV2_TAP_MAX (1)
#endif

/**
* @brief Configuration parameters for @ref netdev2_tap_t
*
* @note This variable is set on native start-up based on arguments provided
*/
extern netdev2_tap_params_t netdev2_tap_params[NETDEV2_TAP_MAX];

#ifdef __cplusplus
}
#endif

#endif /* NETDEV2_TAP_PARAMS_H_ */
/** @} */
15 changes: 8 additions & 7 deletions cpu/native/startup.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,9 @@ int _native_rng_mode = 0;
const char *_native_unix_socket_path = NULL;

#ifdef MODULE_NETDEV2_TAP
#include "netdev2_tap.h"
extern netdev2_tap_t netdev2_tap;
#include "netdev2_tap_params.h"

netdev2_tap_params_t netdev2_tap_params[NETDEV2_TAP_MAX];
#endif

/**
Expand Down Expand Up @@ -246,15 +247,15 @@ __attribute__((constructor)) static void startup(int argc, char **argv)

#if defined(MODULE_NETDEV2_TAP)
if (
(argc < 2)
(argc < (NETDEV2_TAP_MAX + 1)) /* one arg per tap + 0 for command */
|| (
(strcmp("-h", argv[argp]) == 0)
|| (strcmp("--help", argv[argp]) == 0)
)
) {
usage_exit();
}
argp++;
argp += NETDEV2_TAP_MAX;
#endif

for (; argp < argc; argp++) {
Expand Down Expand Up @@ -327,9 +328,9 @@ __attribute__((constructor)) static void startup(int argc, char **argv)
native_cpu_init();
native_interrupt_init();
#ifdef MODULE_NETDEV2_TAP
netdev2_tap_params_t p;
p.tap_name = &(argv[1]);
netdev2_tap_setup(&netdev2_tap, &p);
for (int i = 0; i < NETDEV2_TAP_MAX; i++) {
netdev2_tap_params[i].tap_name = &(argv[i + 1]);
}
#endif

board_init();
Expand Down
35 changes: 15 additions & 20 deletions sys/auto_init/netif/auto_init_netdev2_tap.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,33 +22,28 @@
#define ENABLE_DEBUG (0)
#include "debug.h"

#include "netdev2_tap.h"
#include "net/gnrc/netdev2.h"
#include "netdev2_tap_params.h"
#include "net/gnrc/netdev2/eth.h"

extern netdev2_tap_t netdev2_tap;

/**
* @brief Define stack parameters for the MAC layer thread
* @{
*/
#define TAP_MAC_STACKSIZE (THREAD_STACKSIZE_DEFAULT + DEBUG_EXTRA_STACKSIZE)
#ifndef TAP_MAC_PRIO
#define TAP_MAC_PRIO (GNRC_NETDEV2_MAC_PRIO)
#endif
#define TAP_MAC_PRIO (THREAD_PRIORITY_MAIN - 3)

/**
* @brief Stacks for the MAC layer threads
*/
static char _netdev2_eth_stack[TAP_MAC_STACKSIZE + DEBUG_EXTRA_STACKSIZE];
static gnrc_netdev2_t _gnrc_netdev2_tap;
static netdev2_tap_t netdev2_tap[NETDEV2_TAP_MAX];
static char _netdev2_eth_stack[NETDEV2_TAP_MAX][TAP_MAC_STACKSIZE + DEBUG_EXTRA_STACKSIZE];
static gnrc_netdev2_t _gnrc_netdev2_tap[NETDEV2_TAP_MAX];

void auto_init_netdev2_tap(void)
{
gnrc_netdev2_eth_init(&_gnrc_netdev2_tap, (netdev2_t*)&netdev2_tap);

gnrc_netdev2_init(_netdev2_eth_stack, TAP_MAC_STACKSIZE,
TAP_MAC_PRIO, "gnrc_netdev2_tap", &_gnrc_netdev2_tap);
for (int i = 0; i < NETDEV2_TAP_MAX; i++) {
const netdev2_tap_params_t *p = &netdev2_tap_params[i];
DEBUG("Initializing netdev2_tap on TAP %s\n", *(p->tap_name));
netdev2_tap_setup(&netdev2_tap[i], p);
gnrc_netdev2_eth_init(&_gnrc_netdev2_tap[i], (netdev2_t*)&netdev2_tap[i]);

gnrc_netdev2_init(_netdev2_eth_stack[i], TAP_MAC_STACKSIZE,
TAP_MAC_PRIO, "gnrc_netdev2_tap",
&_gnrc_netdev2_tap[i]);
}
}

#else
Expand Down

0 comments on commit 2ebe5ca

Please sign in to comment.