Commit Graph

24 Commits

Author SHA1 Message Date
Bruce M Simpson
29dc7bc636 Merge final round of MLD changes from p4:
ip6_input.c, in6.h:
 * Add netinet6-specific mbuf flag M_RTALERT_MLD, shadowing M_PROTO6.
  * Always set this flag if HBH Router Alert option is present for MLD,
    even when not forwarding.

 icmp6.c:
 * In icmp6_input(), spell m->m_pkthdr.rcvif as ifp to be consistent.
 * Use scope ID for verifying input. Do not apply SSM filters here, no inpcb.
  * Check for M_RTALERT_MLD when validating MLD traffic, as we can't see
    IPv6 hop options outside of ip6_input().

 in6_mcast.c:
 * Use KAME scope/zone ID in in6_multi.
   * Update net.inet6.ip6.mcast.filters implementation to use scope IDs
     for comparisons.
 * Fix scope ID treatment in multicast socket option processing.
   Scope IDs passed in from userland will be ignored as other less
   ambiguous APIs exist for specifying the link.
 * Tighten userland input checks in IPv6 SSM delta and full-state ops.
   * Source filter embedded scope IDs need to be revisited, for now
     just clear them and ignore them on input.
 * Adapt KAME behaviour of looking up the scope ID in the default zone
   for multicast leaves, when the interface is ambiguous.

 mld6.c:
 * Tighten origin checks on MLD traffic as per RFC3810 Section 6.2:
  * ip6_src MAY be the unspecified address for MLDv1 reports.
  * ip6_src MAY have link-local address scope for MLDv1 reports,
    MLDv1 queries, and MLDv2 queries.
  * Perform address field validation *before* accepting queries.
 * Use KAME scope/zone ID in query/report processing.
   * Break const correctness for mld_v1_input_report(), mld_v1_input_query()
     as we temporarily modify the input mbuf chain.
   * Clear the scope ID before handoff to userland MLD daemon.
 * Fix MLDv1 old querier present timer processing.
   With the protocol defaults, hosts should revert to MLDv2 after 260s.
 * Add net.inet6.mld.v1enable sysctl, default to on.

 ifmcstat.c:
 * Use sysctl by default; -K requests kvm(3) if so compiled.

 mld.4:
 * Connect man page to build.

Tested using PCS.
2009-05-27 18:57:13 +00:00
Bruce M Simpson
33cde13046 Bite the bullet, and make the IPv6 SSM and MLDv2 mega-commit:
import from p4 bms_netdev.  Summary of changes:

 * Connect netinet6/in6_mcast.c to build.
   The legacy KAME KPIs are mostly preserved.
 * Eliminate now dead code from ip6_output.c.
   Don't do mbuf bingo, we are not going to do RFC 2292 style
   CMSG tricks for multicast options as they are not required
   by any current IPv6 normative reference.
 * Refactor transports (UDP, raw_ip6) to do own mcast filtering.
   SCTP, TCP unaffected by this change.
 * Add ip6_msource, in6_msource structs to in6_var.h.
 * Hookup mld_ifinfo state to in6_ifextra, allocate from
   domifattach path.
 * Eliminate IN6_LOOKUP_MULTI(), it is no longer referenced.
   Kernel consumers which need this should use in6m_lookup().
 * Refactor IPv6 socket group memberships to use a vector (like IPv4).
 * Update ifmcstat(8) for IPv6 SSM.
 * Add witness lock order for IN6_MULTI_LOCK.
 * Move IN6_MULTI_LOCK out of lower ip6_output()/ip6_input() paths.
 * Introduce IP6STAT_ADD/SUB/INC/DEC as per rwatson's IPv4 cleanup.
 * Update carp(4) for new IPv6 SSM KPIs.
 * Virtualize ip6_mrouter socket.
   Changes mostly localized to IPv6 MROUTING.
 * Don't do a local group lookup in MROUTING.
 * Kill unused KAME prototypes in6_purgemkludge(), in6_restoremkludge().
 * Preserve KAME DAD timer jitter behaviour in MLDv1 compatibility mode.
 * Bump __FreeBSD_version to 800084.
 * Update UPDATING.

NOTE WELL:
 * This code hasn't been tested against real MLDv2 queriers
   (yet), although the on-wire protocol has been verified in Wireshark.
 * There are a few unresolved issues in the socket layer APIs to
   do with scope ID propagation.
 * There is a LOR present in ip6_output()'s use of
   in6_setscope() which needs to be resolved. See comments in mld6.c.
   This is believed to be benign and can't be avoided for the moment
   without re-introducing an indirect netisr.

This work was mostly derived from the IGMPv3 implementation, and
has been sponsored by a third party.
2009-04-29 19:19:13 +00:00
Bruce M Simpson
d10910e6ce Merge IGMPv3 and Source-Specific Multicast (SSM) to the FreeBSD
IPv4 stack.

Diffs are minimized against p4.
PCS has been used for some protocol verification, more widespread
testing of recorded sources in Group-and-Source queries is needed.
sizeof(struct igmpstat) has changed.

__FreeBSD_version is bumped to 800070.
2009-03-09 17:53:05 +00:00
Bruce M Simpson
3f3d246f2c nits 2009-02-15 15:26:42 +00:00
Bruce M Simpson
6ee0c852ea Blow away KAME MLDv2 hooks.
This code can be gotten from change history here and it's
more than likely our implementation will differ significantly
because of VIMAGE and SMPng.
2009-02-15 15:21:34 +00:00
Bruce M Simpson
d508ff40b9 Improve ifmcstat(8) and fix a few bugs while we're at it:
* Retire the old 'ifmcstat <kernel>' usage.
 * Print AF_LINK records even if run against KVM.
   This makes the KVM backend consistent with the sysctl backend.
 * Suppress printing of link-layer group records by default.
 * Add a -v switch to allow link-layer groups to be printed.
 * If compiled without INET6 support, actually work.
 * If compiled with INET6 support, print the scope ID of
   all IPv6 addresses in both backends.
 * Update man page.
 * Update copyrights.

With this change, it is now reasonable to retire netstat -g.
Most of the SSM related gunk in this file will require later refactoring.

MFC after:	2 weeks
2009-02-15 15:19:34 +00:00
Bruce M Simpson
15c834931c Fix a typo which caused ifmcstat's sysctl path
to print the network-layer endpoint address of the
group membership, rather than its link-layer mapping
as intended.
The KVM path is not affected.

MFC after:	1 week
2009-02-15 12:10:05 +00:00
Bruce M Simpson
60dd8da775 Considerably rework the ifmcstat utility.
* Build with or without INET, INET6, or KVM features.
  * When built without KVM, the sysctl-based getifmaddrs() function
    is used as the back-end for the utility.
 * Reflect the fact that FreeBSD now uses the in_multi refcount as
   a true refcount.
 * Style.

The utility may now be run without super-user privilege, albeit with
a less detailed display, equivalent to that of the soon-to-be-retired
netstat -g host-mode output.

MFC after:	3 weeks
2007-04-10 00:26:12 +00:00
Bruce M Simpson
ba640a6ca4 Remove __P. 2007-04-09 19:52:44 +00:00
Bruce M Simpson
aa727a5535 Use -M and -N for core and kernel image respectively. 2007-03-20 02:08:28 +00:00
Bruce M Simpson
cb48db9cf8 Make clean for !INET6.
Remove non-FreeBSD code.
Sort includes.
2007-03-19 18:13:02 +00:00
Bruce M Simpson
1048e6755f Merge latest ifmcstat (with changes for FreeBSD).
Possibly merge or split with netstat -g.

TODO: Make !defined(INET6) clean.
TODO: Add -M/-N instead of -k.
TODO: Use sysctls instead of kvm.

Obtained from:	KAME
MFC after:	2 weeks
2007-03-19 16:45:06 +00:00
Dima Dorfman
3ee6bbffb0 Remove unused variable and clamp down with WARNS=2
PR:		71662
Submitted by:	Dan Lukes <dan@obluda.cz>
Tested on:	i386, sparc64, ia64, amd64
2004-09-13 08:14:55 +00:00
Stefan Farfeleder
11012a9973 Include <net/ethernet.h> to have a prototype for ether_ntoa().
Approved by:	das (mentor)
2004-05-28 17:44:11 +00:00
Brooks Davis
9bf40ede4a Replace the if_name and if_unit members of struct ifnet with new members
if_xname, if_dname, and if_dunit. if_xname is the name of the interface
and if_dname/unit are the driver name and instance.

This change paves the way for interface renaming and enhanced pseudo
device creation and configuration symantics.

Approved By:	re (in principle)
Reviewed By:	njl, imp
Tested On:	i386, amd64, sparc64
Obtained From:	NetBSD (if_xname)
2003-10-31 18:32:15 +00:00
Hajimu UMEMOTO
d24cb2490d stop use of NI_WITHSCOPEID. it was deprecated.
Obtained from:	KAME
2003-10-21 20:11:47 +00:00
Dima Dorfman
7309915e7a Nuke unused variables. 2001-06-24 23:41:57 +00:00
Hajimu UMEMOTO
3384154590 Sync with recent KAME.
This work was based on kame-20010528-freebsd43-snap.tgz and some
critical problem after the snap was out were fixed.
There are many many changes since last KAME merge.

TODO:
  - The definitions of SADB_* in sys/net/pfkeyv2.h are still different
    from RFC2407/IANA assignment because of binary compatibility
    issue.  It should be fixed under 5-CURRENT.
  - ip6po_m member of struct ip6_pktopts is no longer used.  But, it
    is still there because of binary compatibility issue.  It should
    be removed under 5-CURRENT.

Reviewed by:	itojun
Obtained from:	KAME
MFC after:	3 weeks
2001-06-11 12:39:29 +00:00
Poul-Henning Kamp
6817526d14 Convert if_multiaddrs from LIST to TAILQ so that it can be traversed
backwards in the three drivers which want to do that.

Reviewed by:    mikeh
2001-02-06 10:12:15 +00:00
Poul-Henning Kamp
2673ed4725 Use macro API to <sys/queue.h>
Submitted by:	"Jason" <jsmethers@pdq.net>
Reviewed by:	/sbin/md5
2000-12-30 20:56:04 +00:00
Hajimu UMEMOTO
9bdd4811f4 Sync with latest KAME.
Obtained from:	KAME
2000-07-07 19:19:25 +00:00
Yoshinobu Inoue
04e8772051 remove redundant ifdef's.
some part is specified by: phantom
2000-01-07 10:02:43 +00:00
Bill Fumerola
467a57a7c4 Fix KERNEL vs _KERNEL spammage.
Submitted by:	Paul Saab <paul@mu.org>
1999-12-30 04:12:36 +00:00
Yoshinobu Inoue
7d56d3747c Getaddrinfo(), getnameinfo(), and etc support in libc/net.
Several udp and raw apps IPv6 support.

Reviewed by: freebsd-arch, cvs-committers
Obtained from: KAME project
1999-12-28 02:37:14 +00:00