* 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.
* 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.
From: Eric Norum <eric@skatter.usask.ca>
Date: Sat, 5 Dec 98 13:20:51 -0600
What do you think of this patch? It implements your `tap'
suggestion in a way that adds support for all ethernet devices with
no driver modifications. I also added a return value from the tap
function. If the return value is zero, the packet will be passed up
the chain as usual. If the return value is non-zero the mbuf holding
the packet will be freed and the packet will be dropped.
If you like it, please submit it to Joel.
I guess there needs to be an addition to the network documentation
describing the additional ioctl's -- and a big warning that the tap
function is called from a context that holds the network semaphore.
Here is Eric's patch. I've tested it a bit, and made a couple of
trivial changes. This is certainly better than mine: it should work
for all Ethernet drivers.
==================================================
The only concern I have about this patch is that the tap function may
want to fiddle with the mbuf, calling functions like m_pullup and the
like. If those force the networking code to rearrange the mbuf
structure, then the caller's call to m_freem may crash. I don't know
if this is a realistic concern--I don't know enough about the mbuf
layer.