[PATCH] networking: Increase _SYS_MBUF_LEGACY_MSIZE to 256 to match FreeBSD

Sebastian Huber sebastian.huber at embedded-brains.de
Fri May 8 04:57:07 UTC 2020


On 08/05/2020 06:48, Hesham Almatary wrote:
> Hello Chris,
>
> Currently sample/loopback.exe fails on risc64 with that error:
>
> *** BEGIN OF TEST LOOPBACK ***
> *** TEST VERSION: 5.0.0.e78c0806cbbf0c9fae5c8c355ea81636b704f908
> *** TEST STATE: EXPECTED_PASS
> *** TEST BUILD: RTEMS_NETWORKING RTEMS_POSIX_API
> *** TEST TOOLS: 9.3.0 20200312 (RTEMS 5, RSB 5 (1011d5f76851), Newlib 7947581)
> "Network" initializing!
> "Network" initialized!
> Try running client with no server present.
> Should fail with `connection refused'.
> Connect to server.
> tcphdr too big
> *** FATAL ***
> fatal source: 11 (RTEMS_FATAL_SOURCE_PANIC)
> fatal code: 2147715424 (0x80038960)
> RTEMS version: 5.0.0.e78c0806cbbf0c9fae5c8c355ea81636b704f908
> RTEMS tools: 9.3.0 20200312 (RTEMS 5, RSB 5 (1011d5f76851), Newlib 7947581)
> executing thread ID: 0x08a010001
> executing thread name: UI1
>
>
> The "tcphdr too big" error is at
> cpukit/libnetworking/netinet/tcp_output.c:458, failing that check:
>> if (max_linkhdr + hdrlen > MHLEN)
>>   panic("tcphdr too big");
> On riscv64:
> hdrlen = 76
> max_linkhdr = 16
> optlen = 20
> sizeof (struct tcpiphdr) = 56
> MHLEN = 72

The problem is probably this:

/*
  * Overlay for ip header used by other protocols (tcp, udp).
  */
struct ipovly {
     caddr_t    ih_next;
     caddr_t ih_prev;        /* for protocol sequence q's */
     u_char    ih_x1;            /* (unused) */
     u_char    ih_pr;            /* protocol */
     u_short    ih_len;            /* protocol length */
     struct    in_addr ih_src;        /* source internet address */
     struct    in_addr ih_dst;        /* destination internet address */
};

The caddr_t is a pointer. This is what I meant with a lot more problems.

In the new stack we have:

/*
  * Overlay for ip header used by other protocols (tcp, udp).
  */
struct ipovly {
     u_char    ih_x1[9];        /* (unused) */
     u_char    ih_pr;            /* protocol */
     u_short    ih_len;            /* protocol length */
     struct    in_addr ih_src;        /* source internet address */
     struct    in_addr ih_dst;        /* destination internet address */
};

I am not sure if the old stack ever worked on a 64-bit target.



More information about the devel mailing list