RTEMS 5.1 Release LibBSD Networking Issue
Chris Johns
chrisj at rtems.org
Mon Nov 9 00:17:05 UTC 2020
On 6/11/20 2:19 am, rvanderwal wrote:
> Good Morning,
>
> I seem to be having an issue with RTEMS 5.1 Release Libbsd networking when I
> include my own 'rtems_bsd_get_mac_address' function as described in
> rtemsbsd/include/rtems/bsd/bsd.h. I'm running on a Xilinx Microzed using
> xilinx_zynq_zedboard BSP and have a minimal RTEMS console application (source
> code included below). The rc.conf file configures the cgem0 interface and starts
> FTP and telnet daemons.
>
> If I include the 'rtems_bsd_get_mac_address' function, the mac address is set
> but RTEMS doesn't respond to any pings and doesn't allow any connections.
> However, a ping to an external device from RTEMS is successful. I have run
> tcpdump filtering on ICMP messages and RTEMS sees them.
>
> If I comment out the 'rtems_bsd_get_mac_address' function, it has the default
> mac address and everything works as expected.
>
> All guidance and help are greatly appreciated.
I have commented in the code fragments below.
> Thanks,
> Rick
>
>
> //
> // RTEMS_Main.c
> //
> #include <bsp.h>
> #include <assert.h>
> #include <stdlib.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <rtems/ramdisk.h>
> #include <rtems/printer.h>
> #include <rtems/stackchk.h>
> #include <rtems/bsd/bsd.h>
> #include <rtems/media.h>
> #include <machine/rtems-bsd-rc-conf.h>
> #include <rtems/ftpd.h>
>
> #include <rtems/console.h>
> #include <rtems/shell.h>
>
> #include <stdint.h>
>
> void rtems_bsd_get_mac_address(const char* name, int unit, uint8_t mac_addr[6])
> {
> mac_addr[0] = 0x0f;
> mac_addr[1] = 0xc0;
> mac_addr[2] = 0xcb;
> mac_addr[3] = 0x6f;
> mac_addr[4] = 0xcb;
> mac_addr[5] = 0x22;
> }
Interesting, I did not know this existed. I prefer following the same process
FreeBSD provides and uses. See below.
> static void start_console(void)
> {
> rtems_status_code sc = rtems_shell_init(
> "SHLL",
> 32 * 1024,
> 1,
> CONSOLE_DEVICE_NAME,
> true,
> true,
> NULL
> );
> assert(sc == RTEMS_SUCCESSFUL);
> }
>
> static void network_init(void)
> {
> printf("BSD\n");
> rtems_status_code sc = rtems_bsd_initialize();
> assert(sc == RTEMS_SUCCESSFUL);
>
> sc = rtems_task_wake_after( 1000 );
> assert(sc == RTEMS_SUCCESSFUL);
>
> printf("Config\n");
> // configure bsd networking by specifying configuration file, wait forever,
> verbose = true
> rtems_bsd_run_rc_conf("/media/mmcsd-0-0/rc.conf", 0, true);
I suggest specifying the MAC address for the interface in rc.conf. For a Zync I
have something like:
ifconfig_cgem0="DHCP rxcsum txcsum"
ifconfig_cgem0_alias0="ether 0f:c0:cb:6f:cb:22"
I generate the rc.conf file writing it to /etc/rc.conf. This lets me read a MAC
address from what ever piece of hardware has been placed on the board.
Chris
> }
>
> void *main_thread(void *arg)
> {
> printf("Media Server\n");
> rtems_media_server_initialize(
> 25,
> 32 * 1024,
> RTEMS_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_ASR | RTEMS_INTERRUPT_LEVEL(0),
> RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL );
>
> rtems_status_code sc = rtems_task_wake_after( 1000 );
> assert(sc == RTEMS_SUCCESSFUL);
>
> network_init();
>
> sc = rtems_task_wake_after( 1000 );
> assert(sc == RTEMS_SUCCESSFUL);
>
> start_console();
>
> assert(0);
> }
>
> /*
> * Configure LibBSD.
> */
> #define RTEMS_BSD_CONFIG_NET_PF_UNIX
> #define RTEMS_BSD_CONFIG_NET_IF_BRIDGE
> #define RTEMS_BSD_CONFIG_NET_IF_LAGG
> #define RTEMS_BSD_CONFIG_NET_IF_VLAN
> #define LIBBSP_ARM_XILINX_ZYNQ_BSP_H
> #define RTEMS_BSD_CONFIG_BSP_CONFIG
> #define RTEMS_BSD_CONFIG_SERVICE_TELNETD
> #define RTEMS_BSD_CONFIG_SERVICE_FTPD
> #define RTEMS_BSD_CONFIG_INIT
>
> #include <machine/rtems-bsd-config.h>
>
> /*
> * Configure Shell
> */
> #define CONFIGURE_SHELL_COMMANDS_INIT
>
> #include <bsp/irq-info.h>
>
> #include <rtems/netcmds-config.h>
>
> #ifdef RTEMS_BSD_MODULE_USER_SPACE_WLANSTATS
> #define SHELL_WLANSTATS_COMMAND &rtems_shell_WLANSTATS_Command,
> #else
> #define SHELL_WLANSTATS_COMMAND
> #endif
>
> #ifdef RTEMS_BSD_MODULE_USR_SBIN_WPA_SUPPLICANT
> #define SHELL_WPA_SUPPLICANT_COMMAND &rtems_shell_WPA_SUPPLICANT_Command,
> #else
> #define SHELL_WPA_SUPPLICANT_COMMAND
> #endif
>
> #define CONFIGURE_SHELL_USER_COMMANDS \
> SHELL_WLANSTATS_COMMAND \
> SHELL_WPA_SUPPLICANT_COMMAND \
> &bsp_interrupt_shell_command, \
> &rtems_shell_ARP_Command, \
> &rtems_shell_HOSTNAME_Command, \
> &rtems_shell_PING_Command, \
> &rtems_shell_ROUTE_Command, \
> &rtems_shell_NETSTAT_Command, \
> &rtems_shell_IFCONFIG_Command, \
> &rtems_shell_TCPDUMP_Command, \
> &rtems_shell_SYSCTL_Command, \
> &rtems_shell_VMSTAT_Command
>
> #define CONFIGURE_SHELL_COMMANDS_ALL
>
> #include <rtems/shellconfig.h>
>
> /*
> * Configure RTEMS.
> */
> #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
>
> #define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
>
> #define CONFIGURE_FILESYSTEM_DEVFS
> #define CONFIGURE_FILESYSTEM_DOSFS
> #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 32
>
> #define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
>
> #define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 32
> #define CONFIGURE_UNLIMITED_OBJECTS
> #define CONFIGURE_UNIFIED_WORK_AREAS
>
> #define CONFIGURE_STACK_CHECKER_ENABLED
>
> #define CONFIGURE_BDBUF_BUFFER_MAX_SIZE (64 * 1024)
> #define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS 4
> #define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE (1 * 1024 * 1024)
>
> #define CONFIGURE_MAXIMUM_POSIX_THREADS 20
> #define CONFIGURE_POSIX_INIT_THREAD_TABLE
> #define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT main_thread
>
> #define CONFIGURE_MAXIMUM_PROCESSORS 2
> #define CONFIGURE_MICROSECONDS_PER_TICK 1000
> #define CONFIGURE_TICKS_PER_TIMESLICE 50
>
> #define CONFIGURE_SCHEDULER_PRIORITY_SMP
>
> #define CONFIGURE_INIT
>
> #include <rtems/confdefs.h>
>
>
>
> _______________________________________________
> users mailing list
> users at rtems.org
> http://lists.rtems.org/mailman/listinfo/users
>
More information about the users
mailing list