ip_output: Record the "src was INADDR_ANY" for multicast packets

While I'm here, fix the comment on the unicast packet output path.
test/mcast: Add test for send(2) on multicast address bound socket
ip/udp: Fix IP source address setting for multicast address bound socket

It is a common practice to bind UDP socket to multicast address to enjoy
kernel level destination multicast address and port filtering.  However,
if data are sent on this kind of socket, source address of the IP packet
will be the bound multicast address?!

Two fixes are added to address this bug:

1) Don't set IP source address in udp_output(), if the inpcb's laddr is
   multicast address.  Instead the IP source address is set to INADDR_ANY,
   so ip_output() could pick up a proper IP source address.

2) With 1) in place, it is possible that IP source address is INADDR_ANY
   before the ifnet.if_output() using following steps:
   - If the IP_MULTICAST_IF socket option is set to iface0
   - The iface0's last IP address is unset, before the ip_output()

   This condition could easily be reproduced by using test/mcast:
   mcast -m 224.2.2.2 -p 3000 -i iface0_ip -D 10
   During the 10sec delay, wipe out all IP addresses from iface0

   Well, even without 1), raw IP still could generate IP packet using
   INADDR_ANY as source address.

   Two checks on the source IP address are added to ip_output() before
   ifnet.if_output()
   - IP source address should not be INADDR_ANY
   - IP source address should not be multicast address

   And for multicast IP packets, if the IP source address could be
   determined, they will not be looped back and forwarded.

Reported-by: zeroxia
bnx: Regroup RX std and return rings into their own structs
bnx: Don't commit coalesce param changes in interrupt/polling handler

This is only intended for old chips.  Just commit the coalesce param
changes in sysctl handlers.
bce: BCM5716's MSI does not have bug either
bnx: Factor out bnx_{alloc,setup,free}_intr()
bnx: Field renaming; no functional changes
bnx: Save RX return ring and TX ring status block indices' location
ioapic: Relocate IRQ if it hits SYSCALL entry

The system hitting the "unused IRQ assertion" has 5x24 pin IOAPICs

Reported-by: ruse39
Merge branch 'master' into gsocdrm_github
bnx: Group interrupt related fields together
Makefile_upgrade.inc: Fix typo.
rmdir.1: Add EXIT STATUS section and fix a typo.
Add EXIT STATUS messages in some manual pages.
bnx: Split RX/TX serializers
bnx: Switch to IFQ subqueue functions and use per-TX queue watchdog
bnx: Add read-only sysctl node for RX/TX queue count
touch(1): Sync with FreeBSD
touch(1): Reintroduce local changes

Major changes introduced by the update from FreeBSD:

* Add the 'h' flag to operate on symlinks rather than what they point to.

* Add -A flag to adjust existing time stamps.

* Add the -d option from POSIX.1-2008.
  This is much like -t but with a different format which is ISO8601-like
  and allows fractions of a second.

* Remove the advertising clause from UCB copyrighted files. This
  is in accordance with the information provided at
  ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change

* Remove useless and potentially dangerous rw() function which tries to
update access and modification times by reading and writing the file.