* libnetworking/kern/uipc_socket2.c,
libnetworking/netinet/tcp_usrreq.c,
libnetworking/netinet/udp_usrreq.c,
libnetworking/rtems/rtems_bsdnet.h, libnetworking/rtems/rtems_glue.c:
Add configuration parameters for network stack efficiency multiplier
and default socket buffer sizes. Change default multiplier from 8 to
2 to match GNU/Linux. This has no impact on performance on the BSPs
tested.
* ftpd/ftpd.c, libcsupport/include/sys/ioccom.h,
libcsupport/src/ioctl.c, libnetworking/kern/uipc_mbuf.c,
libnetworking/libc/inet_addr.c, libnetworking/net/ethernet.h,
libnetworking/net/if.c, libnetworking/net/if_ethersubr.c,
libnetworking/net/if_ppp.c, libnetworking/net/if_pppvar.h,
libnetworking/net/if_var.h, libnetworking/net/ppp_tty.c,
libnetworking/netinet/in_cksum.c, libnetworking/nfs/bootp_subr.c,
libnetworking/rtems/rtems_bsdnet_internal.h,
libnetworking/sys/mbuf.h, pppd/md4.c, pppd/pppd.h: Remove warnings
due to improper use of int which shows up on 16 bit targets. Added
ioctl_command_t since IOCTL command argument does not reliably fit
into 16 bits.
* libcsupport/include/sys/ioccom.h, libnetworking/kern/uipc_socket2.c,
libnetworking/net/ethernet.h, libnetworking/net/if.h,
libnetworking/net/if_ethersubr.c, libnetworking/net/if_ppp.c,
libnetworking/net/if_pppvar.h, libnetworking/net/ppp_tty.c,
libnetworking/net/pppcompress.c, libnetworking/net/slcompress.c,
libnetworking/netinet/in.h, libnetworking/netinet/ip_icmp.c,
libnetworking/netinet/tcp.h, libnetworking/netinet/tcp_seq.h,
libnetworking/sys/protosw.h, libnetworking/sys/socketvar.h: Remove
warnings. Most of the warnings were 16/32 bit integer sizing issues.
Some constants had L appended, some had casts add, some types were
changed to reflect a bit width requirement.
* libnetworking/kern/kern_sysctl.c: Change int to int32_t.
* libnetworking/net/if_loop.c: Add cast to long.
These plus a patch to machine/param.h let the h8300 build multilib.
* configure.ac: Remove (Merged into ../configure.ac).
* Makefile.am, libc/Makefile.am, lib/Makefile.am, wrapup/Makefile.am:
Reflect having merged configure.ac into ../configure.ac.
* kern/kern_mib.c: Use RTEMS_VERSION to setup osrelease.
PR 342/networking
* kern/uipc_mbuf.c: The RTEMS version of the m_copyback is changing
the m_len value of the mbuf. I looked into the source from another
BSD system and the mbuf length is not changed inside this function.
The m_copyback function is only being used in the net/rtsock.c file.
So I think this problem is only visable under certain routing table
conditions.
* Makefile.am: Added sys/linker_set.h
* kern/Makefile.am: Added kern_mib.c and kern_sysctl.c.
* kern/uipc_socket.c: OID changed from KERN_SOMAXCONN to KIPC_SOMAXCONN.
* kern/uipc_socket2.c: OID changed from KERN_MAXSOCKBUF to
KIPC_MAXSOCKBUF.
* net/if_ethersubr.c: FreeBSD 2.2.2 does not have a _net_link node
while 5.0 does.
* net/if_ppp.c: Removed the TEXT_SET define as these macros are
now implemented.
* net/rtsock.c: Enable sysctl support plus fix the bug with the
lastest FreeBSD sysctl header file.
* netinet/icmp_var.h: FreeBSD 2.2.2 does not have a _net_inet_icmp
node while 5.0 does.
* netinet/if_ether.c: FreeBSD 2.2.2 does not have a _net_link_ether
node while 5.0 does.
* netinet/igmp_var.h: FreeBSD 2.2.2 does not have a _net_inet_igmp
node while 5.0 does.
* netinet/in_pcb.c: Fixed the arguments to the sysctl call. Add
inp_gencnt and ipi_count. These are used when listing connections.
* netinet/in_pcb.h: Added counters to aid the listing of connections.
* netinet/in_var.h: Provide the _net_inet_ip and _net_inet_raw nodes.
* netinet/ip_fw.c: Disable the firewall sysctl calls.
* netinet/tcp_subr.c: Merge tcp_pcblist from the lastest FreeBSD source.
* netinet/tcp_var.h: Add structures needed by net-snmp to list
connections.
* netinet/udp_usrreq.c: Merged udp_pcblist from the lastest FreeBSD
source.
* netinet/udp_var.h: Added the sysctl id UDPCTL_PCBLIST. Used by
net-snmp.
* rtems_glue.c: Call sysctl_register_all when initialising the
network stack to register all the sysctl calls. These are in the
special sections and required an updated linker script.
* rtems/rtems_syscall.c: Add the sysctl call.
* sys/kernel.h: Use the lastest FreeBSD method of handling sysctl
structures. This now held in the sys/linker_set.h file.
* sys/queue.h: This is from the lastest FreeBSD code with the circular
code merged back in as it is not used in the lastest FreeBSD kernel.
* sys/sysctl.h: The lastest sysctl. This was needed to use with the new
linker set method. The FreeBSD 2.2.2 version has asm hacks. The lastest
version of the FreeBSD does not have these hacks. It uses gcc attribute
directives.
* Pass to eliminate warnings.
* kern/uipc_mbuf.c: Conditional SYSINIT() usage on __rtems__.
Fix return statement without a value.
* lib/ftpfs.c: read and write filesystem routines return ssize_t.
* lib/syslog.c: Add include of <string.h> to eliminate warning.
* lib/tftpDriver.c: read and write filesystem routines return ssize_t.
* libc/gethostbydns.c: Prototype abort().
* libc/inet_ntoa.c: Prototype strcpy().
* libc/rcmd.c: Add include of <sys/select.h>
* net/if_loop.c: Turn token at end of endif to comment.
* net/rtsock.c, nfs/bootp_subr.c: Conditional SYSINIT() usage
on __rtems__.
* rtems/rtems_bootp.c: Add include of <rtems/rtems_bsdnet_internal.h>.
* rtems/rtems_bsdnet_internal.h: Added prototypes for memcpy() and
memset() since the BSD code tries to avoid using libc .h files
since it is used to being in the kernel.
* rtems/rtems_syscall.c: read and write filesystem routines
return ssize_t.
* kern/uipc_socket.c: Fix case on SO_RCVTIMEO and SO_SNDTIMEO where
conversion into ticks can result in a 0 ticks timeout which is
the same as requesting no timeout. Reported by Sergei Organov
<osv@javad.ru>.
* arpa/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* kern/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* Makefile.am: Include $(top_srcdir)/../automake/*.am.
Use ../aclocal.
* lib/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* libc/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* machine/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* net/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* netinet/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* nfs/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* rtems/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* sys/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* vm/Makefile.am: Include $(top_srcdir)/../automake/*.am.
* wrapup/Makefile.am: Include $(top_srcdir)/../automake/*.am.
that contains the automake files for libnetworking plus a couple of
minor fixes. [Now only one unused/unsupported Makefile.in remains
(./c/src/lib/libbsp/hppa1.1/pxfl/Makefile.in).]
To apply:
patch -p1 < rtems-rc-20000118-7.diff
/bin/sh rtems-rc-20000118-7.rm
/bin/sh rtems-rc-20000118-7.add
./bootstrap
Notes:
* I have tested this one by building all BSPs for m68k, powerpc, sh and
unix with toolchains built since last weekend.
* I did not touch libnetworking's directory layout.
The select function is not particularly efficient when dealing with a
large number of sockets. The application has to build a big set of
bits and pass it in. RTEMS has to look through all those bits and see
what is ready. Then the application has to look through all the bits
again.
On the other hand, when using RTEMS, the select function is needed
exactly when you have a large number of sockets, because that is when
it becomes prohibitive to use a separate thread for each socket.
I think it would make more sense for RTEMS to support callback
functions which could be invoked when there is data available to read
from a socket, or when there is space available to write to a socket.
Accordingly, I implemented them.
This patch adds two new SOL_SOCKET options to setsockopt and
getsockopt: SO_SNDWAKEUP and SO_RCVWAKEUP. They take arguments of
type struct sockwakeup:
struct sockwakeup {
void (*sw_pfn) __P((struct socket *, caddr_t));
caddr_t sw_arg;
};
They are used to add or remove a function which will be called when
something happens for the socket. Getting a callback doesn't imply
that a read or write will succeed, but it does imply that it is worth
trying.
This adds functionality to RTEMS which is somewhat like interrupt
driven socket I/O on Unix.
After the patch to RTEMS, I have appended a patch to
netdemos-19990407/select/test.c to test the new functionality and
demonstrate one way it might be used. To run the new test instead of
the select test, change doSocket to call echoServer2 instead of
echoServer.