hercules-390 / hyperion

Hercules 390
Other
251 stars 70 forks source link

tuntap Write Error #264

Closed thomasMainframe closed 6 years ago

thomasMainframe commented 6 years ago

Hi all,

since i use OpenSuse LEAP 15.0 I have trouble with my LCS network ( see below ). Any help is welcome !

Thomas

OpenSuse LEAP 15.0 uname -a : Linux Big-Tux 4.12.14-lp150.12.4-default #1 SMP Tue May 22 05:17:22 UTC 2018 (66b2eda) x86_64 x86_64 x86_64 GNU/Linux Hercules : 4.0.0.0-SDL-gc1b82496-modified

LOG :

HHC00901I 0:0200 LCS: Interface tap0, type TAP opened
HHC00921I CTC: lcs device port 00: manual Multicast assist enabled
HHC00935I CTC: lcs device port 00: tuntap Checksum Offload enabled

when TCPIP is started

HHC00136E Error in function fork(): Cannot allocate memory
HHC00942I CTC: lcs device tap0 using mac 8A:52:8E:42:2A:67
HHC00936E 0:0201 CTC: error writing to file /dev/net/tun: Input/output error

thomasMainframe commented 6 years ago

Hi all, sometimes it is really simple ! Changing the MAINSIZE from 4096 to 2048 solves the problem. Maybe LEAP 15.0 needs more Memory as before.

Ciao, Thomas

ivan-w commented 6 years ago

Thomas,

You are encountering a problem that is inherent to POSIX systems. The problem is if a process allocates memory (through brk() or mmap()) when the fork() system call is invoked, the system has to ensure it has enough memory to duplicate the entire address space (even if it doesn't use it at the time of fork() - even if exec() is then invoked shortly afterwards which resets all mmaps and brk() barriers).

fork() is invoked when "hercifc" is invoked (used by LCS, QETH, CTCI, etc...)

If you need to have more memory than double that is available, the solution is to add additional paging space. It won't be used - it will just tell the kernel that there is enough virtual memory to satisfy whatever happens after the fork() call.

Another solution would be to use vfork(), but that's another story.

--Ivan