2015-10-03 01:47:23 +02:00
|
|
|
/****************************************************************************
|
2014-09-30 22:41:23 +02:00
|
|
|
* arch/sim/src/up_internal.h
|
2007-02-18 00:21:28 +01:00
|
|
|
*
|
2017-04-20 15:50:55 +02:00
|
|
|
* Copyright (C) 2007, 2009, 2011-2012, 2014, 2016-2017 Gregory Nutt. All rights reserved.
|
2012-02-13 00:54:26 +01:00
|
|
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
2007-02-18 00:21:28 +01:00
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
*
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in
|
|
|
|
* the documentation and/or other materials provided with the
|
|
|
|
* distribution.
|
2011-03-28 23:21:11 +02:00
|
|
|
* 3. Neither the name NuttX nor the names of its contributors may be
|
2007-02-18 00:21:28 +01:00
|
|
|
* used to endorse or promote products derived from this software
|
|
|
|
* without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
|
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
|
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
|
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
|
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*
|
2015-10-03 01:47:23 +02:00
|
|
|
****************************************************************************/
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2014-09-30 22:41:23 +02:00
|
|
|
#ifndef __ARCH_SIM_SRC_UP_INTERNAL_H
|
|
|
|
#define __ARCH_SIM_SRC_UP_INTERNAL_H
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2015-10-03 01:47:23 +02:00
|
|
|
/****************************************************************************
|
2007-02-18 00:21:28 +01:00
|
|
|
* Included Files
|
2015-10-03 01:47:23 +02:00
|
|
|
****************************************************************************/
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2011-05-28 23:42:18 +02:00
|
|
|
#include <nuttx/config.h>
|
2012-09-17 20:35:37 +02:00
|
|
|
#include <nuttx/compiler.h>
|
2014-12-13 20:04:02 +01:00
|
|
|
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
# include <sys/types.h>
|
|
|
|
# include <stdbool.h>
|
SUMMARY
-------
This patch enhances networking support for the simulation under Linux.
Includes updated support for Linux TUN/TAP, and the addition of support for
Linux bridge devices.
CHANGES
-------
o Check to see if the d_txavail callback is present before calling it in
the arp send code. This prevents a segfault when simulating the telnetd
daemon with arp send enabled.
o Adjust the simulation's netdriver_loop() so it will detect and respond to
ARP requests.
o Do not attempt to take the tap device's hardware address for use by the
simulation. That hardware address belongs to the host end of the link,
not the simulation end. Generate a randomized MAC address instead.
o Do not assign an IP address to the interface on the host side of the TAP
link.
+ Provide two modes: "host route" and "bridge".
+ In host route mode, maintain a host route that points any traffic for the
simulation's IP address to the tap device. In this mode, so long as the
simulation's IP is a free address in the same subnet as the host, no
additional configuration will be required to talk to it from the host.
Note that address changes are handled automatically if they follow the
rule of if-down/set-address/if-up, which everything seems to.
+ In bridge mode, add the tap device to the specified bridge instance. See
configs/sim/NETWORK-LINUX.txt for information and usage examples. This
enables much more flexible configurations (with fewer headaches), such as
running multiple simulations on a single host, all of which can access
the network the host is connected to.
o Refresh configurations in configs/sim where CONFIG_NET=y. They default
to "host route" mode.
o Add configs/sim/NETWORK-LINUX.txt
CAVEATS
-------
- The MAC address generation code is extremely simplistic, and does not
check for potential conflicts on the network. Probably not an issue, but
something to be aware of.
- I was careful to leave it in a state where Cygwin/pcap should still work,
but I don't have a Windows environment to test in. This should be
checked.
- I don't know if this was ever intended to work with OS X. I didn't even
try to test it there.
NOTES
-----
- Was able to get telnetd working and simulate nsh over telnet, but only so
long as listen backlogs were disabled.
There appears to be a bug in the backlog code where sockets are being
returned in SYN_RCVD state instead of waiting until they're ESTABLISHED;
if you perform an immediate send after accepting the connection, it will
confuse the stack and the send will hang; additionally, the connection
will never reach ESTABLISHED state.
Can be worked around by adding a sleep(1) after the accept in telnetd. I
don't have the necessary knowledge of the IP stack to know what the
correct fix is.
2016-05-21 01:36:14 +02:00
|
|
|
# include <netinet/in.h>
|
2014-12-13 20:04:02 +01:00
|
|
|
|
|
|
|
# include <nuttx/irq.h>
|
|
|
|
# include <arch/irq.h>
|
2016-02-11 19:16:19 +01:00
|
|
|
# ifdef CONFIG_SMP
|
|
|
|
# include <nuttx/sched.h>
|
2016-12-23 18:28:43 +01:00
|
|
|
# include <nuttx/spinlock.h>
|
2016-02-11 19:16:19 +01:00
|
|
|
# endif
|
2014-12-13 20:04:02 +01:00
|
|
|
#endif
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2015-10-03 01:47:23 +02:00
|
|
|
/****************************************************************************
|
2011-09-28 19:41:58 +02:00
|
|
|
* Pre-processor Definitions
|
2015-10-03 01:47:23 +02:00
|
|
|
****************************************************************************/
|
2011-09-28 19:41:58 +02:00
|
|
|
/* Configuration **********************************************************/
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2011-09-28 19:41:58 +02:00
|
|
|
#ifndef CONFIG_SIM_X11FB
|
|
|
|
# ifdef CONFIG_SIM_TOUCHSCREEN
|
|
|
|
# error "CONFIG_SIM_TOUCHSCREEN depends on CONFIG_SIM_X11FB"
|
|
|
|
# undef CONFIG_SIM_TOUCHSCREEN
|
|
|
|
# endif
|
2014-12-14 17:19:07 +01:00
|
|
|
# ifdef CONFIG_SIM_AJOYSTICK
|
|
|
|
# error "CONFIG_SIM_AJOYSTICK depends on CONFIG_SIM_X11FB"
|
|
|
|
# undef CONFIG_SIM_AJOYSTICK
|
|
|
|
# endif
|
2011-09-28 19:41:58 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef CONFIG_INPUT
|
|
|
|
# ifdef CONFIG_SIM_TOUCHSCREEN
|
|
|
|
# error "CONFIG_SIM_TOUCHSCREEN depends on CONFIG_INPUT"
|
|
|
|
# undef CONFIG_SIM_TOUCHSCREEN
|
|
|
|
# endif
|
2014-12-14 17:19:07 +01:00
|
|
|
# ifdef CONFIG_SIM_AJOYSTICK
|
|
|
|
# error "CONFIG_SIM_AJOYSTICK depends on CONFIG_INPUT"
|
|
|
|
# undef CONFIG_SIM_AJOYSTICK
|
|
|
|
# endif
|
2011-09-28 19:41:58 +02:00
|
|
|
#endif
|
|
|
|
|
2012-02-13 00:54:26 +01:00
|
|
|
/* Determine which (if any) console driver to use */
|
|
|
|
|
|
|
|
#if !defined(CONFIG_DEV_CONSOLE) || CONFIG_NFILE_DESCRIPTORS == 0
|
|
|
|
# undef USE_DEVCONSOLE
|
|
|
|
# undef CONFIG_RAMLOG_CONSOLE
|
|
|
|
#else
|
|
|
|
# if defined(CONFIG_RAMLOG_CONSOLE)
|
|
|
|
# undef USE_DEVCONSOLE
|
|
|
|
# else
|
|
|
|
# define USE_DEVCONSOLE 1
|
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
|
2014-10-01 22:59:51 +02:00
|
|
|
/* The design for how we signal UART data availability is up in the air */
|
|
|
|
|
|
|
|
#undef CONFIG_SIM_UART_DATAPOST
|
|
|
|
|
2011-09-28 19:41:58 +02:00
|
|
|
/* Context Switching Definitions ******************************************/
|
|
|
|
|
2014-10-03 16:23:57 +02:00
|
|
|
#if defined(CONFIG_HOST_X86_64) && !defined(CONFIG_SIM_M32)
|
|
|
|
/* Storage order: %rbx, %rsp, %rbp, %r12, %r13, %r14, %r15, %rip */
|
|
|
|
|
|
|
|
# ifdef __ASSEMBLY__
|
|
|
|
# define JB_RBX (0*8)
|
|
|
|
# define JB_RSP (1*8)
|
|
|
|
# define JB_RBP (2*8)
|
|
|
|
# define JB_R12 (3*8)
|
|
|
|
# define JB_R13 (4*8)
|
|
|
|
# define JB_R14 (5*8)
|
|
|
|
# define JB_R15 (6*8)
|
|
|
|
# define JB_RSI (7*8)
|
|
|
|
|
|
|
|
# else
|
|
|
|
# define JB_RBX (0)
|
|
|
|
# define JB_RSP (1)
|
|
|
|
# define JB_RBP (2)
|
|
|
|
# define JB_R12 (3)
|
|
|
|
# define JB_R13 (4)
|
|
|
|
# define JB_R14 (5)
|
|
|
|
# define JB_R15 (6)
|
|
|
|
# define JB_RSI (7)
|
|
|
|
|
|
|
|
# endif /* __ASSEMBLY__ */
|
|
|
|
|
|
|
|
/* Compatibility definitions */
|
|
|
|
|
2014-10-03 16:44:42 +02:00
|
|
|
# define JB_SP JB_RSP
|
|
|
|
# define JB_PC JB_RSI
|
2014-10-03 16:23:57 +02:00
|
|
|
|
2017-08-26 19:38:44 +02:00
|
|
|
#elif defined(CONFIG_HOST_X86) || defined(CONFIG_SIM_M32)
|
2014-10-03 16:23:57 +02:00
|
|
|
/* Storage order: %ebx, $esi, %edi, %ebp, sp, and return PC */
|
|
|
|
|
|
|
|
# ifdef __ASSEMBLY__
|
|
|
|
# define JB_EBX (0*4)
|
|
|
|
# define JB_ESI (1*4)
|
|
|
|
# define JB_EDI (2*4)
|
|
|
|
# define JB_EBP (3*4)
|
|
|
|
# define JB_SP (4*4)
|
|
|
|
# define JB_PC (5*4)
|
|
|
|
|
|
|
|
# else
|
|
|
|
# define JB_EBX (0)
|
|
|
|
# define JB_ESI (1)
|
|
|
|
# define JB_EDI (2)
|
|
|
|
# define JB_EBP (3)
|
|
|
|
# define JB_SP (4)
|
|
|
|
# define JB_PC (5)
|
|
|
|
|
|
|
|
# endif /* __ASSEMBLY__ */
|
2017-08-26 19:38:44 +02:00
|
|
|
#elif defined(CONFIG_HOST_ARM)
|
|
|
|
# define JB_SP 8
|
|
|
|
# define JB_PC 9
|
|
|
|
#endif
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2011-09-28 19:41:58 +02:00
|
|
|
/* Simulated Heap Definitions **********************************************/
|
2011-05-28 23:42:18 +02:00
|
|
|
/* Size of the simulated heap */
|
|
|
|
|
2015-09-01 15:52:32 +02:00
|
|
|
#ifdef CONFIG_MM_SMALL
|
2011-05-28 23:42:18 +02:00
|
|
|
# define SIM_HEAP_SIZE (64*1024)
|
|
|
|
#else
|
|
|
|
# define SIM_HEAP_SIZE (4*1024*1024)
|
|
|
|
#endif
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2011-09-28 19:41:58 +02:00
|
|
|
/* File System Definitions **************************************************/
|
2007-05-12 18:21:19 +02:00
|
|
|
/* These definitions characterize the compressed filesystem image */
|
|
|
|
|
|
|
|
#define BLOCK_COUNT 1024
|
|
|
|
#define SECTOR_OF_BACKUPT 6
|
|
|
|
#define NUMBER_OF_FATS 2
|
|
|
|
#define FAT_SIZE 32
|
|
|
|
#define NUM_HIDDEN_SECTORS 0
|
|
|
|
#define VOLUME_NAME "NuttXTestVol"
|
|
|
|
#define USE_WHOLE_DEVICE 1
|
|
|
|
#define ROOT_DIR_ENTRIES 512
|
|
|
|
#define RESERVED_SECTORS 32
|
|
|
|
#define SECTORS_PER_CLUSTER 4
|
|
|
|
#define LOGICAL_SECTOR_SIZE 512
|
|
|
|
|
2015-10-03 01:47:23 +02:00
|
|
|
/****************************************************************************
|
2007-02-18 00:21:28 +01:00
|
|
|
* Public Types
|
2015-10-03 01:47:23 +02:00
|
|
|
****************************************************************************/
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2015-10-03 01:47:23 +02:00
|
|
|
/****************************************************************************
|
2014-10-01 16:40:52 +02:00
|
|
|
* Public Data
|
2015-10-03 01:47:23 +02:00
|
|
|
****************************************************************************/
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2011-09-29 01:39:57 +02:00
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
|
2011-10-06 18:31:13 +02:00
|
|
|
#ifdef CONFIG_SIM_X11FB
|
|
|
|
extern int g_x11initialized;
|
2014-12-14 17:19:07 +01:00
|
|
|
#if defined(CONFIG_SIM_TOUCHSCREEN) || defined(CONFIG_SIM_AJOYSTICK)
|
2011-09-29 23:13:49 +02:00
|
|
|
extern volatile int g_eventloop;
|
2011-09-29 01:39:57 +02:00
|
|
|
#endif
|
2011-10-06 18:31:13 +02:00
|
|
|
#endif
|
2011-09-29 01:39:57 +02:00
|
|
|
|
2014-10-01 22:59:51 +02:00
|
|
|
#if defined(CONFIG_DEV_CONSOLE) && !defined(CONFIG_SIM_UART_DATAPOST)
|
|
|
|
extern volatile int g_uart_data_available;
|
|
|
|
#endif
|
|
|
|
|
2016-11-22 18:34:16 +01:00
|
|
|
#ifdef CONFIG_SMP
|
|
|
|
/* These spinlocks are used in the SMP configuration in order to implement
|
|
|
|
* up_cpu_pause(). The protocol for CPUn to pause CPUm is as follows
|
|
|
|
*
|
|
|
|
* 1. The up_cpu_pause() implementation on CPUn locks both g_cpu_wait[m]
|
2016-11-22 23:48:57 +01:00
|
|
|
* and g_cpu_paused[m]. CPUn then waits spinning on g_cpu_paused[m].
|
2016-11-22 18:34:16 +01:00
|
|
|
* 2. CPUm receives the interrupt it (1) unlocks g_cpu_paused[m] and
|
|
|
|
* (2) locks g_cpu_wait[m]. The first unblocks CPUn and the second
|
|
|
|
* blocks CPUm in the interrupt handler.
|
|
|
|
*
|
|
|
|
* When CPUm resumes, CPUn unlocks g_cpu_wait[m] and the interrupt handler
|
|
|
|
* on CPUm continues. CPUm must, of course, also then unlock g_cpu_wait[m]
|
|
|
|
* so that it will be ready for the next pause operation.
|
|
|
|
*/
|
|
|
|
|
2016-11-26 15:47:03 +01:00
|
|
|
volatile spinlock_t g_cpu_wait[CONFIG_SMP_NCPUS] SP_SECTION;
|
|
|
|
volatile spinlock_t g_cpu_paused[CONFIG_SMP_NCPUS] SP_SECTION;
|
2016-11-22 18:34:16 +01:00
|
|
|
#endif
|
|
|
|
|
2015-10-03 01:47:23 +02:00
|
|
|
/****************************************************************************
|
2007-02-18 00:21:28 +01:00
|
|
|
* Public Function Prototypes
|
2015-10-03 01:47:23 +02:00
|
|
|
****************************************************************************/
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2014-10-03 16:23:57 +02:00
|
|
|
/* up_setjmp32.S **********************************************************/
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2014-10-03 16:23:57 +02:00
|
|
|
int up_setjmp(xcpt_reg_t *jb);
|
|
|
|
void up_longjmp(xcpt_reg_t *jb, int val) noreturn_function;
|
2014-08-07 02:26:16 +02:00
|
|
|
|
2016-02-10 21:58:21 +01:00
|
|
|
/* up_simsmp.c ************************************************************/
|
|
|
|
|
|
|
|
#ifdef CONFIG_SMP
|
2017-04-20 15:50:55 +02:00
|
|
|
int sim_cpu0_initialize(void);
|
2016-02-18 21:54:48 +01:00
|
|
|
void sim_cpu0_start(void);
|
2016-02-10 21:58:21 +01:00
|
|
|
#endif
|
|
|
|
|
2016-02-18 18:12:43 +01:00
|
|
|
/* up_smpsignal.c *********************************************************/
|
|
|
|
|
|
|
|
#ifdef CONFIG_SMP
|
2016-02-18 18:46:08 +01:00
|
|
|
void sim_cpu_pause(int cpu, FAR volatile spinlock_t *wait,
|
|
|
|
FAR volatile unsigned char *paused);
|
2016-02-18 18:12:43 +01:00
|
|
|
#endif
|
|
|
|
|
2016-03-12 22:22:45 +01:00
|
|
|
/* up_smphook.c ***********************************************************/
|
|
|
|
|
|
|
|
#ifdef CONFIG_SMP
|
|
|
|
void sim_smp_hook(void);
|
|
|
|
#endif
|
|
|
|
|
2014-08-07 02:26:16 +02:00
|
|
|
/* up_tickless.c **********************************************************/
|
|
|
|
|
|
|
|
#ifdef CONFIG_SCHED_TICKLESS
|
|
|
|
void up_timer_update(void);
|
|
|
|
#endif
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2007-05-12 18:21:19 +02:00
|
|
|
/* up_devconsole.c ********************************************************/
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2014-08-07 02:26:16 +02:00
|
|
|
void up_devconsole(void);
|
|
|
|
void up_registerblockdevice(void);
|
2007-02-18 00:21:28 +01:00
|
|
|
|
2014-09-30 18:44:32 +02:00
|
|
|
/* up_simuart.c ***********************************************************/
|
|
|
|
|
2014-09-30 20:22:32 +02:00
|
|
|
void simuart_start(void);
|
2017-04-20 15:50:55 +02:00
|
|
|
int simuart_putc(int ch);
|
2017-07-22 16:54:43 +02:00
|
|
|
int simuart_getc(bool block);
|
2014-12-13 20:04:02 +01:00
|
|
|
bool simuart_checkc(void);
|
2016-02-16 14:24:28 +01:00
|
|
|
void simuart_terminate(void);
|
2014-09-30 18:44:32 +02:00
|
|
|
|
|
|
|
/* up_uartwait.c **********************************************************/
|
|
|
|
|
2014-09-30 20:22:32 +02:00
|
|
|
void simuart_initialize(void);
|
|
|
|
void simuart_post(void);
|
|
|
|
void simuart_wait(void);
|
2014-09-30 18:44:32 +02:00
|
|
|
|
2007-05-12 18:21:19 +02:00
|
|
|
/* up_deviceimage.c *******************************************************/
|
|
|
|
|
2014-08-07 02:26:16 +02:00
|
|
|
char *up_deviceimage(void);
|
2007-05-12 18:21:19 +02:00
|
|
|
|
2011-01-23 18:40:10 +01:00
|
|
|
/* up_netdev.c ************************************************************/
|
2007-08-28 02:18:50 +02:00
|
|
|
|
2011-01-23 18:40:10 +01:00
|
|
|
#ifdef CONFIG_NET
|
2014-08-07 02:26:16 +02:00
|
|
|
unsigned long up_getwalltime( void );
|
2011-01-23 18:40:10 +01:00
|
|
|
#endif
|
|
|
|
|
2014-09-30 20:22:32 +02:00
|
|
|
/* up_x11framebuffer.c ****************************************************/
|
2011-09-28 19:41:58 +02:00
|
|
|
|
|
|
|
#ifdef CONFIG_SIM_X11FB
|
2014-08-07 02:26:16 +02:00
|
|
|
int up_x11initialize(unsigned short width, unsigned short height,
|
|
|
|
void **fbmem, unsigned int *fblen, unsigned char *bpp,
|
|
|
|
unsigned short *stride);
|
2011-09-28 19:41:58 +02:00
|
|
|
#ifdef CONFIG_FB_CMAP
|
2014-08-07 02:26:16 +02:00
|
|
|
int up_x11cmap(unsigned short first, unsigned short len,
|
|
|
|
unsigned char *red, unsigned char *green,
|
|
|
|
unsigned char *blue, unsigned char *transp);
|
2011-09-28 19:41:58 +02:00
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2017-04-20 15:50:55 +02:00
|
|
|
/* up_touchscreen.c *******************************************************/
|
|
|
|
|
|
|
|
int sim_tsc_initialize(int minor);
|
|
|
|
void sim_tsc_uninitialize(void);
|
|
|
|
|
2014-09-30 20:22:32 +02:00
|
|
|
/* up_eventloop.c *********************************************************/
|
2011-09-28 19:41:58 +02:00
|
|
|
|
2014-12-14 17:19:07 +01:00
|
|
|
#if defined(CONFIG_SIM_X11FB) && \
|
|
|
|
(defined(CONFIG_SIM_TOUCHSCREEN) || defined(CONFIG_SIM_AJOYSTICK))
|
2014-08-07 02:26:16 +02:00
|
|
|
void up_x11events(void);
|
2011-09-28 19:41:58 +02:00
|
|
|
#endif
|
|
|
|
|
2014-09-30 20:22:32 +02:00
|
|
|
/* up_eventloop.c *********************************************************/
|
2011-09-28 19:41:58 +02:00
|
|
|
|
2014-12-14 17:19:07 +01:00
|
|
|
#if defined(CONFIG_SIM_X11FB) && \
|
|
|
|
(defined(CONFIG_SIM_TOUCHSCREEN) || defined(CONFIG_SIM_AJOYSTICK))
|
2014-08-07 02:26:16 +02:00
|
|
|
int up_buttonevent(int x, int y, int buttons);
|
2011-09-28 19:41:58 +02:00
|
|
|
#endif
|
|
|
|
|
2014-12-14 17:19:07 +01:00
|
|
|
/* up_ajoystick.c *********************************************************/
|
|
|
|
|
|
|
|
#ifdef CONFIG_SIM_AJOYSTICK
|
|
|
|
int sim_ajoy_initialize(void);
|
|
|
|
#endif
|
|
|
|
|
2016-08-03 17:44:48 +02:00
|
|
|
/* up_ioexpander.c ********************************************************/
|
|
|
|
|
|
|
|
#ifdef CONFIG_SIM_IOEXPANDER
|
|
|
|
struct ioexpander_dev_s;
|
2016-08-03 20:46:54 +02:00
|
|
|
FAR struct ioexpander_dev_s *sim_ioexpander_initialize(void);
|
2016-08-03 17:44:48 +02:00
|
|
|
#endif
|
|
|
|
|
2011-01-23 18:40:10 +01:00
|
|
|
/* up_tapdev.c ************************************************************/
|
|
|
|
|
2015-08-24 21:46:05 +02:00
|
|
|
#if defined(CONFIG_NET_ETHERNET) && !defined(__CYGWIN__)
|
2014-08-07 02:26:16 +02:00
|
|
|
void tapdev_init(void);
|
|
|
|
unsigned int tapdev_read(unsigned char *buf, unsigned int buflen);
|
|
|
|
void tapdev_send(unsigned char *buf, unsigned int buflen);
|
SUMMARY
-------
This patch enhances networking support for the simulation under Linux.
Includes updated support for Linux TUN/TAP, and the addition of support for
Linux bridge devices.
CHANGES
-------
o Check to see if the d_txavail callback is present before calling it in
the arp send code. This prevents a segfault when simulating the telnetd
daemon with arp send enabled.
o Adjust the simulation's netdriver_loop() so it will detect and respond to
ARP requests.
o Do not attempt to take the tap device's hardware address for use by the
simulation. That hardware address belongs to the host end of the link,
not the simulation end. Generate a randomized MAC address instead.
o Do not assign an IP address to the interface on the host side of the TAP
link.
+ Provide two modes: "host route" and "bridge".
+ In host route mode, maintain a host route that points any traffic for the
simulation's IP address to the tap device. In this mode, so long as the
simulation's IP is a free address in the same subnet as the host, no
additional configuration will be required to talk to it from the host.
Note that address changes are handled automatically if they follow the
rule of if-down/set-address/if-up, which everything seems to.
+ In bridge mode, add the tap device to the specified bridge instance. See
configs/sim/NETWORK-LINUX.txt for information and usage examples. This
enables much more flexible configurations (with fewer headaches), such as
running multiple simulations on a single host, all of which can access
the network the host is connected to.
o Refresh configurations in configs/sim where CONFIG_NET=y. They default
to "host route" mode.
o Add configs/sim/NETWORK-LINUX.txt
CAVEATS
-------
- The MAC address generation code is extremely simplistic, and does not
check for potential conflicts on the network. Probably not an issue, but
something to be aware of.
- I was careful to leave it in a state where Cygwin/pcap should still work,
but I don't have a Windows environment to test in. This should be
checked.
- I don't know if this was ever intended to work with OS X. I didn't even
try to test it there.
NOTES
-----
- Was able to get telnetd working and simulate nsh over telnet, but only so
long as listen backlogs were disabled.
There appears to be a bug in the backlog code where sockets are being
returned in SYN_RCVD state instead of waiting until they're ESTABLISHED;
if you perform an immediate send after accepting the connection, it will
confuse the stack and the send will hang; additionally, the connection
will never reach ESTABLISHED state.
Can be worked around by adding a sleep(1) after the accept in telnetd. I
don't have the necessary knowledge of the IP stack to know what the
correct fix is.
2016-05-21 01:36:14 +02:00
|
|
|
void tapdev_ifup(in_addr_t ifaddr);
|
|
|
|
void tapdev_ifdown(void);
|
|
|
|
|
|
|
|
# define netdev_init() tapdev_init()
|
|
|
|
# define netdev_read(buf,buflen) tapdev_read(buf,buflen)
|
|
|
|
# define netdev_send(buf,buflen) tapdev_send(buf,buflen)
|
|
|
|
# define netdev_ifup(ifaddr) tapdev_ifup(ifaddr)
|
|
|
|
# define netdev_ifdown() tapdev_ifdown()
|
2011-01-23 18:40:10 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* up_wpcap.c *************************************************************/
|
|
|
|
|
2015-08-24 21:46:05 +02:00
|
|
|
#if defined(CONFIG_NET_ETHERNET) && defined(__CYGWIN__)
|
2014-08-07 02:26:16 +02:00
|
|
|
void wpcap_init(void);
|
|
|
|
unsigned int wpcap_read(unsigned char *buf, unsigned int buflen);
|
|
|
|
void wpcap_send(unsigned char *buf, unsigned int buflen);
|
2011-01-23 18:40:10 +01:00
|
|
|
|
SUMMARY
-------
This patch enhances networking support for the simulation under Linux.
Includes updated support for Linux TUN/TAP, and the addition of support for
Linux bridge devices.
CHANGES
-------
o Check to see if the d_txavail callback is present before calling it in
the arp send code. This prevents a segfault when simulating the telnetd
daemon with arp send enabled.
o Adjust the simulation's netdriver_loop() so it will detect and respond to
ARP requests.
o Do not attempt to take the tap device's hardware address for use by the
simulation. That hardware address belongs to the host end of the link,
not the simulation end. Generate a randomized MAC address instead.
o Do not assign an IP address to the interface on the host side of the TAP
link.
+ Provide two modes: "host route" and "bridge".
+ In host route mode, maintain a host route that points any traffic for the
simulation's IP address to the tap device. In this mode, so long as the
simulation's IP is a free address in the same subnet as the host, no
additional configuration will be required to talk to it from the host.
Note that address changes are handled automatically if they follow the
rule of if-down/set-address/if-up, which everything seems to.
+ In bridge mode, add the tap device to the specified bridge instance. See
configs/sim/NETWORK-LINUX.txt for information and usage examples. This
enables much more flexible configurations (with fewer headaches), such as
running multiple simulations on a single host, all of which can access
the network the host is connected to.
o Refresh configurations in configs/sim where CONFIG_NET=y. They default
to "host route" mode.
o Add configs/sim/NETWORK-LINUX.txt
CAVEATS
-------
- The MAC address generation code is extremely simplistic, and does not
check for potential conflicts on the network. Probably not an issue, but
something to be aware of.
- I was careful to leave it in a state where Cygwin/pcap should still work,
but I don't have a Windows environment to test in. This should be
checked.
- I don't know if this was ever intended to work with OS X. I didn't even
try to test it there.
NOTES
-----
- Was able to get telnetd working and simulate nsh over telnet, but only so
long as listen backlogs were disabled.
There appears to be a bug in the backlog code where sockets are being
returned in SYN_RCVD state instead of waiting until they're ESTABLISHED;
if you perform an immediate send after accepting the connection, it will
confuse the stack and the send will hang; additionally, the connection
will never reach ESTABLISHED state.
Can be worked around by adding a sleep(1) after the accept in telnetd. I
don't have the necessary knowledge of the IP stack to know what the
correct fix is.
2016-05-21 01:36:14 +02:00
|
|
|
# define netdev_init() wpcap_init()
|
|
|
|
# define netdev_read(buf,buflen) wpcap_read(buf,buflen)
|
|
|
|
# define netdev_send(buf,buflen) wpcap_send(buf,buflen)
|
|
|
|
# define netdev_ifup(ifaddr) {}
|
|
|
|
# define netdev_ifdown() {}
|
2007-08-28 02:18:50 +02:00
|
|
|
#endif
|
|
|
|
|
2014-07-04 01:53:16 +02:00
|
|
|
/* up_netdriver.c *********************************************************/
|
2007-08-27 01:18:13 +02:00
|
|
|
|
2015-08-24 21:46:05 +02:00
|
|
|
#ifdef CONFIG_NET_ETHERNET
|
2014-08-07 02:26:16 +02:00
|
|
|
int netdriver_init(void);
|
|
|
|
int netdriver_setmacaddr(unsigned char *macaddr);
|
|
|
|
void netdriver_loop(void);
|
2007-08-27 01:18:13 +02:00
|
|
|
#endif
|
|
|
|
|
2014-09-19 18:27:18 +02:00
|
|
|
#ifdef CONFIG_SIM_SPIFLASH
|
2014-12-13 20:04:02 +01:00
|
|
|
struct spi_dev_s;
|
2016-07-19 15:33:44 +02:00
|
|
|
struct spi_dev_s *up_spiflashinitialize(FAR const char *name);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef CONFIG_SIM_QSPIFLASH
|
|
|
|
struct qspi_dev_s;
|
|
|
|
struct qspi_dev_s *up_qspiflashinitialize(void);
|
2014-09-19 18:27:18 +02:00
|
|
|
#endif
|
|
|
|
|
2007-02-18 00:21:28 +01:00
|
|
|
#endif /* __ASSEMBLY__ */
|
2014-09-30 22:41:23 +02:00
|
|
|
#endif /* __ARCH_SIM_SRC_UP_INTERNAL_H */
|