You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2020/02/25 02:13:39 UTC
[incubator-nuttx] branch master updated: Ethernet Over USB net
helper script and docs
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 511e548 Ethernet Over USB net helper script and docs
511e548 is described below
commit 511e548613ebcac3a7ce14aac8de402f6b03bb52
Author: Adam Feuer <ad...@starcat.io>
AuthorDate: Mon Feb 24 16:44:51 2020 -0800
Ethernet Over USB net helper script and docs
- for CDC ECM driver
Squashed commit of the following:
commit aa9a715498e15ad46d43318a663d296f38160cf8
Author: Adam Feuer <ad...@starcat.io>
Date: Mon Feb 24 16:42:52 2020 -0800
code formatting; removed ping
commit 56520b7f7e2b7f03697eacc2f2b5450b0f7af676
Author: Adam Feuer <ad...@starcat.io>
Date: Mon Feb 24 16:42:32 2020 -0800
add description of netusb.sh helper script
commit afee3d33b1e66138afb7e9713d86b765ceab55b0
Author: Adam Feuer <ad...@starcat.io>
Date: Mon Feb 24 16:41:40 2020 -0800
readme formatting
commit 772e36021f4aee2ba1df408ad29d8b9adedeed9f
Author: Adam Feuer <ad...@starcat.io>
Date: Sun Feb 23 11:38:50 2020 -0800
updated readme, removed redundant configs
commit 082785178aa6e0d1578034b4b163785fdcb61f22
Author: Adam Feuer <ad...@starcat.io>
Date: Sat Feb 22 17:40:05 2020 -0800
README, defconfig, and helper script improvements
---
boards/arm/sama5/sama5d3-xplained/README.txt | 164 +++++++++++----------
.../defconfig | 23 ++-
.../configs/ethernet-over-usb/defconfig | 117 ---------------
tools/README.txt | 19 +++
tools/netusb.sh | 71 +++++++++
5 files changed, 193 insertions(+), 201 deletions(-)
diff --git a/boards/arm/sama5/sama5d3-xplained/README.txt b/boards/arm/sama5/sama5d3-xplained/README.txt
index ce9c2f3..8b3e82d 100644
--- a/boards/arm/sama5/sama5d3-xplained/README.txt
+++ b/boards/arm/sama5/sama5d3-xplained/README.txt
@@ -790,7 +790,9 @@ Networking
Networking support via the can be added to NSH by selecting the following
configuration options. The SAMA5D36 supports two different Ethernet MAC
peripherals: (1) The 10/100Base-T EMAC peripheral and (2) the
- 10/100/1000Base-T GMAC peripheral.
+ 10/100/1000Base-T GMAC peripheral. Ethernet over USB using the
+ CDC ECM driver is also supported, and should work on Linux, macOS, and
+ Windows.
Selecting the EMAC peripheral
-----------------------------
@@ -834,6 +836,21 @@ Networking
PHY selection. Later in the configuration steps, you will need to select
the KSZ9081 PHY for GMAC (See below)
+ Selecting Ethernet over USB (CDC ECM driver)
+ --------------------------------------------
+
+ This uses the USB 2.0 connector labeled USB-A. On the host computer you will
+ need to configure the CDC ECM Ethernet over USB driver (see below for Linux
+ configuration script).
+
+ CONFIG_USBDEV=y
+ CONFIG_USBDEV_DMA=y
+ CONFIG_USBDEV_DUALSPEED=y
+ CONFIG_NET_CDCECM=y
+ CONFIG_NET_ETH_PKTSIZE=1514
+
+ You can also use the defconfig file in `boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb-2-high-speed`.
+
Common configuration settings
-----------------------------
@@ -1019,6 +1036,69 @@ Networking
CONFIG_NSH_NETINIT_RETRYMSEC=2000 : Configure the network monitor as you like
CONFIG_NSH_NETINIT_SIGNO=18
+ Ethernet Over USB Configuration Script
+ --------------------------------------
+
+ There is a configuration script for Linux that will configure the USB Ethernet interface,
+ it is in `tools/netusb.sh`. You can use it as follows:
+
+ Once you boot a NuttX system with the CDC ECM Ethernet over USB device, the Linux network interface
+ will be added to your system. You should see something like the following messages in
+ /var/log/kern.log:
+
+ [302074.552879] usb 1-2: new high-speed USB device number 107 using ehci-pci
+ [302074.718264] usb 1-2: New USB device found, idVendor=0525, idProduct=a4a2, bcdDevice= 1.00
+ [302074.718267] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
+ [302074.718269] usb 1-2: Product: CDC/ECM Ethernet
+ [302074.718271] usb 1-2: Manufacturer: NuttX
+ [302074.718272] usb 1-2: SerialNumber: 0
+ [302074.760638] cdc_ether 1-2:1.0 usb0: register 'cdc_ether' at usb-0000:02:03.0-2, CDC Ethernet Device, 02:00:00:11:22:33
+ [302074.796215] cdc_ether 1-2:1.0 ens160u4u2: renamed from usb0
+
+
+ If you execute the command 'ifconfig -a' you should see a new interface:
+
+ $ ifconfig -a
+
+ ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
+ inet 192.168.46.156 netmask 255.255.255.0 broadcast 192.168.46.255
+ inet6 fe80::20c:29ff:fe57:d0f8 prefixlen 64 scopeid 0x20<link>
+ ether 00:0c:29:57:d0:f8 txqueuelen 1000 (Ethernet)
+ RX packets 7628014 bytes 2002078802 (2.0 GB)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 6040388 bytes 5327276865 (5.3 GB)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+ ens160u4u2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
+ inet6 fe80::ff:fe11:2233 prefixlen 64 scopeid 0x20<link>
+ ether 02:00:00:11:22:33 txqueuelen 1000 (Ethernet)
+ RX packets 36798 bytes 51705300 (51.7 MB)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 24196 bytes 1312512 (1.3 MB)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+ ens33 is the host Ethernet or wireless LAN interface. ens160u4u2 is the USB Ethernet
+ interface.
+
+ The script will bring up the interface, configure it, and set up routes and IP Tables rules so the
+ nuttx system can access the internet:
+
+ $ sudo ./tools/netusb.sh ens33 ens160u4u2 on
+
+ This will bring down the interface, configure it, and delete routes and IP Tables rules:
+
+ $ sudo ./tools/netusb.sh ens33 ens160u4u2 off
+
+ Now that the new interface has an IP address, you can ping the NuttX box at 10.0.0.2
+ (or whatever IP address you configured it to have). If you configured the telnet daemon
+ and started it, you should be able to telnet to the board using:
+
+ $ telnet 10.0.0.2
+
+ The helper script also sets up Network Address Translation (NAT) so the NuttX system
+ can access the Internet. If that is not what you want, you can remove the iptables
+
+
AT25 Serial FLASH
=================
@@ -1380,86 +1460,10 @@ USB High-Speed Device
CDC/ECM Ethernet Over USB
-------------------------
- This will select the CDC/ECM Ethernet over USB device. Defaults for the other
- options should be okay.
-
- CONFIG_NET_CDCECM=y
- CONFIG_CDCECM_EP0MAXPACKET=64
- CONFIG_CDCECM_EPINTIN=1
- CONFIG_CDCECM_EPINTIN_FSSIZE=16
- CONFIG_CDCECM_EPINTIN_HSSIZE=16
- CONFIG_CDCECM_EPBULKOUT=5
- CONFIG_CDCECM_EPBULKOUT_FSSIZE=64
- CONFIG_CDCECM_EPBULKOUT_HSSIZE=512 # needed for non-fragmentation IP and ICMP packets in HS mode
- CONFIG_CDCECM_EPBULKIN=2
- CONFIG_CDCECM_EPBULKIN_FSSIZE=64
- CONFIG_CDCECM_EPBULKIN_HSSIZE=512 # needed for non-fragmentation IP and ICMP packets in HS mode
- CONFIG_CDCECM_VENDORID=0x0525
- CONFIG_CDCECM_PRODUCTID=0xa4a2
- CONFIG_CDCECM_VENDORSTR="NuttX"
- CONFIG_CDCECM_PRODUCTSTR="CDC/ECM Ethernet"
-
- There are two defconfig files that have been tested with these configurations:
-
- ethernet-over-usb/defconfig
- ethernet-over-usb-telnetd/defconfig
-
- The latter has a telnetd enabled, so once the system boots, you can issue the telnetd command,
- and then telnet into it from the host.
-
- To use them, copy them to .config, and run 'make menuconfig' (you don't have to change anything),
- then save the file. Then run 'make' to make NuttX.
-
- On Linux, a helper script is provided called helpers/netusb-up.sh. This script can be used
- to configure the Linux USB Ethernet Gadget network interface. Once you boot a NuttX system with the
- CDC ECM Ethernet over USB device, the Linux network interface will be added to your system. You should
- see something like the following messages in /var/log/kern.log:
-
- [302074.552879] usb 1-2: new high-speed USB device number 107 using ehci-pci
- [302074.718264] usb 1-2: New USB device found, idVendor=0525, idProduct=a4a2, bcdDevice= 1.00
- [302074.718267] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
- [302074.718269] usb 1-2: Product: CDC/ECM Ethernet
- [302074.718271] usb 1-2: Manufacturer: NuttX
- [302074.718272] usb 1-2: SerialNumber: 0
- [302074.760638] cdc_ether 1-2:1.0 usb0: register 'cdc_ether' at usb-0000:02:03.0-2, CDC Ethernet Device, 02:00:00:11:22:33
- [302074.796215] cdc_ether 1-2:1.0 ens35u2: renamed from usb0
-
- If you execute the command 'ifconfig -a' you should see a new interface:
-
- $ ifconfig -a
-
- ens35u2: flags=4098<BROADCAST,MULTICAST> mtu 576
- ether 02:00:00:11:22:33 txqueuelen 1000 (Ethernet)
- RX packets 0 bytes 0 (0.0 B)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 0 bytes 0 (0.0 B)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
- If you run the netusb-up.sh script, then do ifconfig, you should see the following:
-
- $ sudo ./netusb-up.sh
- $ ifconfig -a
-
- ens35u2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 576
- ether 02:00:00:11:22:33 txqueuelen 1000 (Ethernet)
- RX packets 0 bytes 0 (0.0 B)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 15 bytes 2477 (2.4 KB)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
- ens35u2:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 576
- inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
- ether 02:00:00:11:22:33 txqueuelen 1000 (Ethernet)
-
- Now that the new interface has an IP address, you can ping the NuttX box at 10.0.0.2
- (or whatever IP address you configured it to have). If you used the telnet defconfig,
- you should be able to telnet to the board using:
-
- $ telnet 10.0.0.2
+ This allows networking to the host system via Ethernet over USB. See the
+ Networking section for configuration. On USB 2.0 High Speed, the CDC ECM
+ driver uses DMA and can transfer 4.4 MBytes/sec (34 Mbits/sec).
- The helper script also sets up Network Address Translation (NAT) so the NuttX system
- can access the Internet. If that is not what you want, you can remove the iptables
- NAT commands from the script.
Debugging USB Device
--------------------
diff --git a/boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb-telnetd/defconfig b/boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb-2-high-speed/defconfig
similarity index 86%
rename from boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb-telnetd/defconfig
rename to boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb-2-high-speed/defconfig
index b009e70..68313f5 100644
--- a/boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb-telnetd/defconfig
+++ b/boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb-2-high-speed/defconfig
@@ -25,11 +25,13 @@ CONFIG_BOARDCTL_USBDEVCTRL=y
CONFIG_BOARD_LOOPSPERMSEC=65775
CONFIG_BOOT_RUNFROMSDRAM=y
CONFIG_BUILTIN=y
-CONFIG_CDCECM_EPINTIN_HSSIZE=16
CONFIG_DEBUG_FEATURES=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DEV_LOOP=y
CONFIG_EXAMPLES_HELLO=y
+CONFIG_EXAMPLES_TCPBLASTER=y
+CONFIG_EXAMPLES_TCPBLASTER_GROUPSIZE=200
+CONFIG_EXAMPLES_TCPECHO=y
CONFIG_EXAMPLES_WGET=y
CONFIG_EXAMPLES_WGET_URL="http://10.0.0.1/"
CONFIG_FAT_LCNAMES=y
@@ -37,11 +39,13 @@ CONFIG_FAT_LFN=y
CONFIG_FS_FAT=y
CONFIG_FS_PROCFS=y
CONFIG_FS_PROCFS_EXCLUDE_VERSION=y
+CONFIG_FS_ROMFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INTELHEX_BINARY=y
-CONFIG_IOB_NBUFFERS=24
-CONFIG_IOB_THROTTLE=0
+CONFIG_INTERPRETERS_CHIBI_SCHEME=y
+CONFIG_IOB_NBUFFERS=72
+CONFIG_IOB_THROTTLE=16
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
CONFIG_MMCSD=y
@@ -49,17 +53,18 @@ CONFIG_NETINIT_NETLOCAL=y
CONFIG_NETINIT_NOMAC=y
CONFIG_NETUTILS_NETLIB_GENERICURLPARSER=y
CONFIG_NETUTILS_TELNETC=y
-CONFIG_NETUTILS_TELNETD=y
CONFIG_NETUTILS_WEBCLIENT=y
CONFIG_NET_ARP_IPIN=y
CONFIG_NET_ARP_SEND=y
CONFIG_NET_BROADCAST=y
CONFIG_NET_CDCECM=y
+CONFIG_NET_ETH_PKTSIZE=1514
CONFIG_NET_ICMP=y
CONFIG_NET_ICMP_SOCKET=y
CONFIG_NET_ROUTE=y
CONFIG_NET_STATISTICS=y
CONFIG_NET_TCP=y
+CONFIG_NET_TCPBACKLOG=y
CONFIG_NET_TCP_NOTIFIER=y
CONFIG_NET_TCP_WRITE_BUFFERS=y
CONFIG_NET_UDP=y
@@ -69,6 +74,7 @@ CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_PROMPT_STRING="nsh> "
+CONFIG_NSH_ROMFSETC=y
CONFIG_PREALLOC_MQ_MSGS=4
CONFIG_PREALLOC_TIMERS=4
CONFIG_PREALLOC_WDOGS=16
@@ -96,8 +102,13 @@ CONFIG_SAMA5_PIO_IRQ=y
CONFIG_SAMA5_UART1=y
CONFIG_SAMA5_UDPHS=y
CONFIG_SCHED_HPWORK=y
+CONFIG_SCHED_LPNTHREADS=2
+CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
+CONFIG_SERIAL_TERMIOS=y
+CONFIG_SIG_DEFAULT=y
+CONFIG_SIG_EVTHREAD=y
CONFIG_START_DAY=31
CONFIG_START_MONTH=7
CONFIG_START_YEAR=2014
@@ -111,8 +122,12 @@ CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_NSH_CXXINITIALIZE=y
CONFIG_SYSTEM_PING=y
CONFIG_SYSTEM_VI=y
+CONFIG_TTY_SIGINT=y
+CONFIG_TTY_SIGSTP=y
CONFIG_USBDEV=y
CONFIG_USBDEV_DMA=y
CONFIG_USBDEV_DUALSPEED=y
+CONFIG_USBDEV_TRACE=y
+CONFIG_USBDEV_TRACE_NRECORDS=512
CONFIG_USER_ENTRYPOINT="nsh_main"
CONFIG_WDOG_INTRESERVE=2
diff --git a/boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb/defconfig b/boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb/defconfig
deleted file mode 100644
index 26bdf34..0000000
--- a/boards/arm/sama5/sama5d3-xplained/configs/ethernet-over-usb/defconfig
+++ /dev/null
@@ -1,117 +0,0 @@
-#
-# This file is autogenerated: PLEASE DO NOT EDIT IT.
-#
-# You can use "make menuconfig" to make any modifications to the installed .config file.
-# You can then do "make savedefconfig" to generate a new defconfig file that includes your
-# modifications.
-#
-# CONFIG_DISABLE_OS_API is not set
-# CONFIG_NSH_ARGCAT is not set
-# CONFIG_NSH_CMDOPT_HEXDUMP is not set
-# CONFIG_NSH_CMDPARMS is not set
-CONFIG_ARCH="arm"
-CONFIG_ARCH_BOARD="sama5d3-xplained"
-CONFIG_ARCH_BOARD_SAMA5D3_XPLAINED=y
-CONFIG_ARCH_CHIP="sama5"
-CONFIG_ARCH_CHIP_ATSAMA5D36=y
-CONFIG_ARCH_CHIP_SAMA5=y
-CONFIG_ARCH_CHIP_SAMA5D3=y
-CONFIG_ARCH_INTERRUPTSTACK=2048
-CONFIG_ARCH_IRQPRIO=y
-CONFIG_ARCH_LOWVECTORS=y
-CONFIG_ARCH_STACKDUMP=y
-CONFIG_ARM_SEMIHOSTING_SYSLOG=y
-CONFIG_BOARDCTL_USBDEVCTRL=y
-CONFIG_BOARD_LOOPSPERMSEC=65775
-CONFIG_BOOT_RUNFROMSDRAM=y
-CONFIG_BUILTIN=y
-CONFIG_CDCECM_EPINTIN_HSSIZE=16
-CONFIG_DEBUG_FEATURES=y
-CONFIG_DEBUG_SYMBOLS=y
-CONFIG_DEV_LOOP=y
-CONFIG_EXAMPLES_HELLO=y
-CONFIG_EXAMPLES_WGET=y
-CONFIG_EXAMPLES_WGET_URL="http://10.0.0.1/"
-CONFIG_FAT_LCNAMES=y
-CONFIG_FAT_LFN=y
-CONFIG_FS_FAT=y
-CONFIG_FS_PROCFS=y
-CONFIG_FS_PROCFS_EXCLUDE_VERSION=y
-CONFIG_HAVE_CXX=y
-CONFIG_HAVE_CXXINITIALIZE=y
-CONFIG_INTELHEX_BINARY=y
-CONFIG_IOB_NBUFFERS=24
-CONFIG_IOB_THROTTLE=0
-CONFIG_MAX_TASKS=16
-CONFIG_MAX_WDOGPARMS=2
-CONFIG_MMCSD=y
-CONFIG_NETINIT_NETLOCAL=y
-CONFIG_NETINIT_NOMAC=y
-CONFIG_NETUTILS_NETLIB_GENERICURLPARSER=y
-CONFIG_NETUTILS_TELNETC=y
-CONFIG_NETUTILS_WEBCLIENT=y
-CONFIG_NET_ARP_IPIN=y
-CONFIG_NET_ARP_SEND=y
-CONFIG_NET_BROADCAST=y
-CONFIG_NET_CDCECM=y
-CONFIG_NET_ICMP=y
-CONFIG_NET_ICMP_SOCKET=y
-CONFIG_NET_ROUTE=y
-CONFIG_NET_STATISTICS=y
-CONFIG_NET_TCP=y
-CONFIG_NET_TCP_NOTIFIER=y
-CONFIG_NET_TCP_WRITE_BUFFERS=y
-CONFIG_NET_UDP=y
-CONFIG_NFILE_DESCRIPTORS=8
-CONFIG_NFILE_STREAMS=8
-CONFIG_NSH_ARCHINIT=y
-CONFIG_NSH_BUILTIN_APPS=y
-CONFIG_NSH_FILEIOSIZE=512
-CONFIG_NSH_PROMPT_STRING="nsh> "
-CONFIG_PREALLOC_MQ_MSGS=4
-CONFIG_PREALLOC_TIMERS=4
-CONFIG_PREALLOC_WDOGS=16
-CONFIG_RAM_SIZE=268435456
-CONFIG_RAM_START=0x20000000
-CONFIG_RAM_VSTART=0x20000000
-CONFIG_RAW_BINARY=y
-CONFIG_READLINE_CMD_HISTORY=y
-CONFIG_READLINE_CMD_HISTORY_LEN=100
-CONFIG_READLINE_CMD_HISTORY_LINELEN=120
-CONFIG_READLINE_TABCOMPLETION=y
-CONFIG_RR_INTERVAL=200
-CONFIG_SAMA5D3XPLAINED_528MHZ=y
-CONFIG_SAMA5_BOOT_SDRAM=y
-CONFIG_SAMA5_DBGU=y
-CONFIG_SAMA5_DBGU_CONSOLE=y
-CONFIG_SAMA5_DBGU_NOCONFIG=y
-CONFIG_SAMA5_HSMC=y
-CONFIG_SAMA5_PIOA_IRQ=y
-CONFIG_SAMA5_PIOB_IRQ=y
-CONFIG_SAMA5_PIOC_IRQ=y
-CONFIG_SAMA5_PIOD_IRQ=y
-CONFIG_SAMA5_PIOE_IRQ=y
-CONFIG_SAMA5_PIO_IRQ=y
-CONFIG_SAMA5_UART1=y
-CONFIG_SAMA5_UDPHS=y
-CONFIG_SCHED_HPWORK=y
-CONFIG_SCHED_WAITPID=y
-CONFIG_SDCLONE_DISABLE=y
-CONFIG_START_DAY=31
-CONFIG_START_MONTH=7
-CONFIG_START_YEAR=2014
-CONFIG_SYMTAB_ORDEREDBYNAME=y
-CONFIG_SYSLOG_CHARDEV=y
-CONFIG_SYSLOG_TIMESTAMP=y
-CONFIG_SYSTEM_CLE_CMD_HISTORY=y
-CONFIG_SYSTEM_CLE_CMD_HISTORY_LEN=20
-CONFIG_SYSTEM_CLE_CMD_HISTORY_LINELEN=120
-CONFIG_SYSTEM_NSH=y
-CONFIG_SYSTEM_NSH_CXXINITIALIZE=y
-CONFIG_SYSTEM_PING=y
-CONFIG_SYSTEM_VI=y
-CONFIG_USBDEV=y
-CONFIG_USBDEV_DMA=y
-CONFIG_USBDEV_DUALSPEED=y
-CONFIG_USER_ENTRYPOINT="nsh_main"
-CONFIG_WDOG_INTRESERVE=2
diff --git a/tools/README.txt b/tools/README.txt
index 614fc99..0115b2b 100644
--- a/tools/README.txt
+++ b/tools/README.txt
@@ -787,6 +787,25 @@ mkdeps.c, cnvwindeps.c, mkwindeps.sh, and mknulldeps.sh
eventually be solvable but for now continue to use mkwindeps.sh in
that mixed environment.
+
+ netusb.sh
+ ---------
+
+ Helper script used to set up the CDC ECM Ethernet Over USB driver,
+ host routes, and IP Tables rules to support networking with a NuttX
+ system that has a CDC ECM Ethernet Over USB driver configured. Only
+ supported on Linux.
+
+ General usage:
+
+ $ ./tools/netusb.sh
+ Usage: tools/netusb.sh <main-interface> <usb-net-interface> <on|off>
+
+ This has been tested on the SAMA5D3-Xplained board; see
+ `boards/arm/sama5/sama5d3-xplained/README.txt` for more information on how
+ to configure the CDC ECM driver for that board.
+
+
README.txt
----------
diff --git a/tools/netusb.sh b/tools/netusb.sh
new file mode 100755
index 0000000..1d9e959
--- /dev/null
+++ b/tools/netusb.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+#****************************************************************************
+# tools/simhostroute.sh
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+#****************************************************************************
+
+# USB Ethernet Gadget interface helper script - sets up nuttx to access
+# the internet via a host route and IP Tables.
+
+IP_NET="10.0.0.0/24"
+IP_NETMASK="255.255.255.0"
+IP_BROADCAST="10.0.0.255"
+IP_HOST="10.0.0.1"
+IP_NUTTX="10.0.0.2"
+
+if [ $# != 3 ]; then
+ echo "Usage: $0 <main-interface> <usb-net-interface> <on|off>"
+ exit 1
+fi
+
+IF_HOST=$1
+IF_USB=$2
+STATUS=$3
+
+net_off() {
+ ip route delete $IP_NET
+ ip route delete $IP_NUTTX/32
+
+ # delete nat rules to clean up
+ iptables -t nat -D POSTROUTING -o $IF_HOST -j MASQUERADE
+ iptables -D FORWARD -i $IF_HOST -o $IF_USB -m state --state RELATED,ESTABLISHED -j ACCEPT
+ iptables -D FORWARD -i $IF_USB -o $IF_HOST -j ACCEPT
+
+ ip route show
+ ifconfig $IF_USB down
+}
+
+if [ "$STATUS" == "on" ]; then
+ net_off
+ ifconfig $IF_USB up
+ ifconfig -a
+ ifconfig $IF_USB add $IP_HOST
+ ifconfig $IF_USB:0 broadcast $IP_BROADCAST netmask $IP_NETMASK
+ ip route add $IP_NET dev $IF_USB src $IP_HOST
+ ip route add $IP_NUTTX/32 dev $IF_USB src $IP_HOST
+
+ # nat to allow NuttX to access the internet
+ iptables -t nat -A POSTROUTING -o $IF_HOST -j MASQUERADE
+ iptables -A FORWARD -i $IF_HOST -o $IF_USB -m state --state RELATED,ESTABLISHED -j ACCEPT
+ iptables -A FORWARD -i $IF_USB -o $IF_HOST -j ACCEPT
+
+ ip route show
+else
+ net_off
+fi