This is an automated email from the ASF dual-hosted git repository.

kasjer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 91119dd5032bebfc5bcb313994f011f7a3f87740
Author: Jerzy Kasenberg <[email protected]>
AuthorDate: Tue Oct 13 13:02:44 2026 +0200

    apps/usb_net: Add USB network example
    
    Example application exposing USB network function (CDC-NCM by
    default, CDC-ECM or RNDIS with USBD_NET) as lwIP interface through
    hw/usb/tinyusb/net_lwip.  The host gets an address from the device
    DHCP server on USB.  When the target enables Ethernet (ETH_0) both
    interfaces run in the same lwIP stack, Ethernet keeps the default
    route.  Echo, discard and chargen services (inet_def_service) are
    reachable on all interfaces; shell commands lsif and ip show
    interface state.
    
    VID/PID and strings are left to the target.
    
    Assisted-by: Claude:claude-opus-5-5
    Signed-off-by: Jerzy Kasenberg <[email protected]>
---
 apps/usb_net/pkg.yml    | 43 +++++++++++++++++++++++++++++++++++
 apps/usb_net/src/main.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++
 apps/usb_net/syscfg.yml | 43 +++++++++++++++++++++++++++++++++++
 3 files changed, 146 insertions(+)

diff --git a/apps/usb_net/pkg.yml b/apps/usb_net/pkg.yml
new file mode 100644
index 000000000..91dcda9b0
--- /dev/null
+++ b/apps/usb_net/pkg.yml
@@ -0,0 +1,43 @@
+#
+# 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.
+#
+
+pkg.name: apps/usb_net
+pkg.type: app
+pkg.description: >
+    USB network example.  Device is reachable from USB host over CDC-NCM
+    (or CDC-ECM/RNDIS), and over Ethernet when the target enables it,
+    both served by one lwIP stack.  Echo, discard and chargen services
+    run on all interfaces.
+pkg.author: "Apache Mynewt <[email protected]>"
+pkg.homepage: "http://mynewt.apache.org/";
+pkg.keywords:
+    - usb
+    - network
+    - ncm
+    - lwip
+
+pkg.deps:
+    - "@apache-mynewt-core/kernel/os"
+    - "@apache-mynewt-core/sys/console"
+    - "@apache-mynewt-core/sys/log"
+    - "@apache-mynewt-core/sys/shell"
+    - "@apache-mynewt-core/net/ip/lwip_mn"
+    - "@apache-mynewt-core/net/ip/inet_def_service"
+    - "@apache-mynewt-core/hw/usb/tinyusb"
+    - "@apache-mynewt-core/hw/usb/tinyusb/net_lwip"
diff --git a/apps/usb_net/src/main.c b/apps/usb_net/src/main.c
new file mode 100644
index 000000000..9d7836c20
--- /dev/null
+++ b/apps/usb_net/src/main.c
@@ -0,0 +1,60 @@
+/*
+ * 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 network example.
+ *
+ * USB network function (NCM by default) is added to lwIP by
+ * hw/usb/tinyusb/net_lwip with static address USBD_NET_IP_ADDR and a DHCP
+ * server for the host.  If the target enables Ethernet (ETH_0) it runs in
+ * the same lwIP stack, gets its address from DHCP and stays the default
+ * route.  Echo (7), discard (9) and chargen (19) TCP/UDP services are
+ * reachable on both interfaces.  Shell commands "lsif" and "ip" show
+ * interface state.
+ */
+
+#include <os/mynewt.h>
+#include <console/console.h>
+#include <inet_def_service/inet_def_service.h>
+
+#include <lwip/netif.h>
+#include <lwip/ip4_addr.h>
+#include <net_lwip/net_lwip.h>
+
+int
+mynewt_main(int argc, char **argv)
+{
+    struct netif *nif;
+    char addr[IP4ADDR_STRLEN_MAX];
+
+    sysinit();
+
+    inet_def_service_init(os_eventq_dflt_get());
+
+    nif = usb_net_lwip_netif();
+    ip4addr_ntoa_r(netif_ip4_addr(nif), addr, sizeof(addr));
+    console_printf("usb_net: USB interface %c%c%u at %s\n", nif->name[0],
+                   nif->name[1], nif->num, addr);
+
+    while (1) {
+        os_eventq_run(os_eventq_dflt_get());
+    }
+
+    return 0;
+}
diff --git a/apps/usb_net/syscfg.yml b/apps/usb_net/syscfg.yml
new file mode 100644
index 000000000..fc2d5999c
--- /dev/null
+++ b/apps/usb_net/syscfg.yml
@@ -0,0 +1,43 @@
+#
+# 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.
+#
+
+# USBD_VID, USBD_PID, USBD_VENDOR_STRING and USBD_PRODUCT_STRING are left
+# to the target.  Ethernet is enabled by the target (ETH_0: 1) on boards
+# that have it.
+syscfg.vals:
+    CONSOLE_IMPLEMENTATION: full
+    LOG_IMPLEMENTATION: full
+    SHELL_TASK: 1
+
+    USBD_STD_DESCRIPTORS: 1
+    # Network function uses Interface Association Descriptor.
+    USBD_COMPOSITE_DEVICE: 1
+    USBD_NET: NCM
+    USBD_STACK_SIZE: 256
+
+    # lwIP heap is shared between tasks.
+    BASELIBC_THREAD_SAFE_HEAP_ALLOCATION: 1
+    # Ethernet DHCP client, DHCP server on USB, inet_def_service (3)
+    # and DNS client.
+    LWIP_NUM_UDP_PCB: 8
+
+    # Received TCP data is copied to msys mbufs.  lwIP can deliver whole
+    # receive window (TCP_WND, 3 * MSS) at once, msys must be able to hold
+    # it or received data can't be passed to socket.
+    MSYS_1_BLOCK_COUNT: 32

Reply via email to