From owner-p4-projects@FreeBSD.ORG Sun Jul 29 10:57:07 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0D81616A478; Sun, 29 Jul 2007 10:57:07 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4F4716A418 for ; Sun, 29 Jul 2007 10:57:06 +0000 (UTC) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 94CA913C49D for ; Sun, 29 Jul 2007 10:57:06 +0000 (UTC) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l6TAv6TG095625 for ; Sun, 29 Jul 2007 10:57:06 GMT (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l6TAv5HT095622 for perforce@freebsd.org; Sun, 29 Jul 2007 10:57:05 GMT (envelope-from peter@freebsd.org) Date: Sun, 29 Jul 2007 10:57:05 GMT Message-Id: <200707291057.l6TAv5HT095622@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm To: Perforce Change Reviews Cc: Subject: PERFORCE change 124306 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 29 Jul 2007 10:57:07 -0000 http://perforce.freebsd.org/chv.cgi?CH=124306 Change 124306 by peter@peter_overcee on 2007/07/29 10:56:36 IFC @124303 Affected files ... .. //depot/projects/hammer/lib/libelf/elf_begin.3#2 integrate .. //depot/projects/hammer/lib/libelf/elf_memory.3#2 integrate .. //depot/projects/hammer/sys/contrib/pf/net/if_pfsync.c#27 integrate .. //depot/projects/hammer/sys/dev/pci/pci.c#62 integrate .. //depot/projects/hammer/sys/net/bpf.c#49 integrate .. //depot/projects/hammer/sys/netgraph/netgraph.h#29 integrate .. //depot/projects/hammer/sys/netinet/ip_carp.c#25 integrate .. //depot/projects/hammer/sys/netinet/ip_dummynet.c#41 integrate .. //depot/projects/hammer/sys/netinet/ip_fw2.c#84 integrate .. //depot/projects/hammer/sys/netinet/ip_mroute.c#39 integrate .. //depot/projects/hammer/sys/netinet/tcp_input.c#77 integrate .. //depot/projects/hammer/sys/netinet/tcp_subr.c#69 integrate .. //depot/projects/hammer/sys/netinet/tcp_syncache.c#46 integrate .. //depot/projects/hammer/sys/netinet/tcp_usrreq.c#47 integrate .. //depot/projects/hammer/sys/netinet/tcp_var.h#46 integrate .. //depot/projects/hammer/sys/sys/mutex.h#32 integrate .. //depot/projects/hammer/tools/tools/net80211/Makefile#3 integrate .. //depot/projects/hammer/tools/tools/net80211/README#2 integrate .. //depot/projects/hammer/tools/tools/net80211/wlandebug/Makefile#4 delete .. //depot/projects/hammer/tools/tools/net80211/wlandebug/wlandebug.8#2 delete .. //depot/projects/hammer/tools/tools/net80211/wlandebug/wlandebug.c#5 delete .. //depot/projects/hammer/usr.bin/truss/i386-fbsd.c#13 integrate .. //depot/projects/hammer/usr.bin/truss/main.c#14 integrate .. //depot/projects/hammer/usr.bin/truss/powerpc-fbsd.c#4 integrate .. //depot/projects/hammer/usr.bin/truss/syscalls.c#23 integrate .. //depot/projects/hammer/usr.sbin/Makefile#80 integrate .. //depot/projects/hammer/usr.sbin/acpi/acpidump/acpi_user.c#9 integrate .. //depot/projects/hammer/usr.sbin/wlandebug/Makefile#1 branch .. //depot/projects/hammer/usr.sbin/wlandebug/wlandebug.8#1 branch .. //depot/projects/hammer/usr.sbin/wlandebug/wlandebug.c#1 branch Differences ... ==== //depot/projects/hammer/lib/libelf/elf_begin.3#2 (text+ko) ==== @@ -21,7 +21,7 @@ .\" out of the use of this software, even if advised of the possibility of .\" such damage. .\" -.\" $FreeBSD: src/lib/libelf/elf_begin.3,v 1.2 2006/11/13 09:46:15 ru Exp $ +.\" $FreeBSD: src/lib/libelf/elf_begin.3,v 1.3 2007/07/28 15:35:03 jkoshy Exp $ .\" .Dd June 21, 2006 .Os @@ -273,7 +273,7 @@ .Sh SEE ALSO .Xr elf 3 , .Xr elf_end 3 , -.Xr elf_error 3 , +.Xr elf_errno 3 , .Xr elf_memory 3 , .Xr elf_next 3 , .Xr elf_rand 3 , ==== //depot/projects/hammer/lib/libelf/elf_memory.3#2 (text+ko) ==== @@ -21,7 +21,7 @@ .\" out of the use of this software, even if advised of the possibility of .\" such damage. .\" -.\" $FreeBSD: src/lib/libelf/elf_memory.3,v 1.2 2006/11/13 09:46:15 ru Exp $ +.\" $FreeBSD: src/lib/libelf/elf_memory.3,v 1.3 2007/07/28 15:35:03 jkoshy Exp $ .\" .Dd June 28, 2006 .Os @@ -117,6 +117,6 @@ .Xr elf 3 , .Xr elf_begin 3 , .Xr elf_end 3 , -.Xr elf_error 3 , +.Xr elf_errno 3 , .Xr elf_kind 3 , .Xr gelf 3 ==== //depot/projects/hammer/sys/contrib/pf/net/if_pfsync.c#27 (text+ko) ==== @@ -34,7 +34,7 @@ #include "opt_pf.h" #include -__FBSDID("$FreeBSD: src/sys/contrib/pf/net/if_pfsync.c,v 1.35 2007/07/03 12:16:07 mlaier Exp $"); +__FBSDID("$FreeBSD: src/sys/contrib/pf/net/if_pfsync.c,v 1.36 2007/07/28 07:31:29 rwatson Exp $"); #ifdef DEV_BPF #define NBPFILTER DEV_BPF @@ -282,12 +282,12 @@ ifp->if_hdrlen = PFSYNC_HDRLEN; pfsync_setmtu(pfsyncif, ETHERMTU); #ifdef __FreeBSD__ - callout_init(&pfsyncif->sc_tmo, NET_CALLOUT_MPSAFE); + callout_init(&pfsyncif->sc_tmo, CALLOUT_MPSAFE); #ifdef PFSYNC_TDB - callout_init(&pfsyncif->sc_tdb_tmo, NET_CALLOUT_MPSAFE); + callout_init(&pfsyncif->sc_tdb_tmo, CALLOUT_MPSAFE); #endif - callout_init(&pfsyncif->sc_bulk_tmo, NET_CALLOUT_MPSAFE); - callout_init(&pfsyncif->sc_bulkfail_tmo, NET_CALLOUT_MPSAFE); + callout_init(&pfsyncif->sc_bulk_tmo, CALLOUT_MPSAFE); + callout_init(&pfsyncif->sc_bulkfail_tmo, CALLOUT_MPSAFE); #else timeout_set(&pfsyncif->sc_tmo, pfsync_timeout, pfsyncif); timeout_set(&pfsyncif->sc_tdb_tmo, pfsync_tdb_timeout, pfsyncif); ==== //depot/projects/hammer/sys/dev/pci/pci.c#62 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.353 2007/05/16 23:42:04 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.354 2007/07/29 02:44:41 marcel Exp $"); #include "opt_bus.h" @@ -3265,6 +3265,14 @@ map |= (pci_addr_t)pci_read_config(child, *rid + 4, 4) << 32; if (pci_mapbase(testval) == 0) goto out; + + /* + * Restore the original value of the BAR. We may have reprogrammed + * the BAR of the low-level console device and when booting verbose, + * we need the console device addressable. + */ + pci_write_config(child, *rid, map, 4); + if (PCI_BAR_MEM(testval)) { if (type != SYS_RES_MEMORY) { if (bootverbose) ==== //depot/projects/hammer/sys/net/bpf.c#49 (text+ko) ==== @@ -33,7 +33,7 @@ * * @(#)bpf.c 8.4 (Berkeley) 1/9/95 * - * $FreeBSD: src/sys/net/bpf.c,v 1.178 2007/06/17 21:51:43 csjp Exp $ + * $FreeBSD: src/sys/net/bpf.c,v 1.179 2007/07/28 07:31:29 rwatson Exp $ */ #include "opt_bpf.h" @@ -405,7 +405,7 @@ mac_create_bpfdesc(td->td_ucred, d); #endif mtx_init(&d->bd_mtx, devtoname(dev), "bpf cdev lock", MTX_DEF); - callout_init(&d->bd_callout, NET_CALLOUT_MPSAFE); + callout_init(&d->bd_callout, CALLOUT_MPSAFE); knlist_init(&d->bd_sel.si_note, &d->bd_mtx, NULL, NULL, NULL); return (0); ==== //depot/projects/hammer/sys/netgraph/netgraph.h#29 (text+ko) ==== @@ -37,7 +37,7 @@ * * Author: Julian Elischer * - * $FreeBSD: src/sys/netgraph/netgraph.h,v 1.67 2006/10/17 10:59:39 glebius Exp $ + * $FreeBSD: src/sys/netgraph/netgraph.h,v 1.68 2007/07/28 07:31:30 rwatson Exp $ * $Whistle: netgraph.h,v 1.29 1999/11/01 07:56:13 julian Exp $ */ @@ -1097,7 +1097,7 @@ int ng_uncallout(struct callout *c, node_p node); int ng_callout(struct callout *c, node_p node, hook_p hook, int ticks, ng_item_fn *fn, void * arg1, int arg2); -#define ng_callout_init(c) callout_init(c, NET_CALLOUT_MPSAFE) +#define ng_callout_init(c) callout_init(c, CALLOUT_MPSAFE) /* Flags for netgraph functions. */ #define NG_NOFLAGS 0x00000000 /* no special options */ ==== //depot/projects/hammer/sys/netinet/ip_carp.c#25 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/netinet/ip_carp.c,v 1.50 2007/06/12 16:24:53 bms Exp $ */ +/* $FreeBSD: src/sys/netinet/ip_carp.c,v 1.51 2007/07/28 07:31:30 rwatson Exp $ */ /* * Copyright (c) 2002 Michael Shalayeff. All rights reserved. @@ -384,9 +384,9 @@ sc->sc_imo.imo_max_memberships = IP_MIN_MEMBERSHIPS; sc->sc_imo.imo_multicast_vif = -1; - callout_init(&sc->sc_ad_tmo, NET_CALLOUT_MPSAFE); - callout_init(&sc->sc_md_tmo, NET_CALLOUT_MPSAFE); - callout_init(&sc->sc_md6_tmo, NET_CALLOUT_MPSAFE); + callout_init(&sc->sc_ad_tmo, CALLOUT_MPSAFE); + callout_init(&sc->sc_md_tmo, CALLOUT_MPSAFE); + callout_init(&sc->sc_md6_tmo, CALLOUT_MPSAFE); ifp->if_softc = sc; if_initname(ifp, CARP_IFNAME, unit); ==== //depot/projects/hammer/sys/netinet/ip_dummynet.c#41 (text+ko) ==== @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/netinet/ip_dummynet.c,v 1.107 2007/06/17 00:33:34 mjacob Exp $ + * $FreeBSD: src/sys/netinet/ip_dummynet.c,v 1.108 2007/07/28 07:31:30 rwatson Exp $ */ #define DUMMYNET_DEBUG @@ -2141,7 +2141,7 @@ taskqueue_thread_enqueue, &dn_tq); taskqueue_start_threads(&dn_tq, 1, PI_NET, "dummynet"); - callout_init(&dn_timeout, NET_CALLOUT_MPSAFE); + callout_init(&dn_timeout, CALLOUT_MPSAFE); callout_reset(&dn_timeout, 1, dummynet, NULL); /* Initialize curr_time adjustment mechanics. */ ==== //depot/projects/hammer/sys/netinet/ip_fw2.c#84 (text+ko) ==== @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/netinet/ip_fw2.c,v 1.169 2007/07/03 12:46:06 mlaier Exp $ + * $FreeBSD: src/sys/netinet/ip_fw2.c,v 1.170 2007/07/28 07:31:30 rwatson Exp $ */ #define DEB(x) @@ -4937,7 +4937,7 @@ sizeof(ipfw_dyn_rule), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); IPFW_DYN_LOCK_INIT(); - callout_init(&ipfw_timeout, NET_CALLOUT_MPSAFE); + callout_init(&ipfw_timeout, CALLOUT_MPSAFE); bzero(&default_rule, sizeof default_rule); ==== //depot/projects/hammer/sys/netinet/ip_mroute.c#39 (text+ko) ==== @@ -52,7 +52,7 @@ * and PIM-SMv2 and PIM-DM support, advanced API support, * bandwidth metering and signaling * - * $FreeBSD: src/sys/netinet/ip_mroute.c,v 1.135 2007/05/10 15:58:47 rwatson Exp $ + * $FreeBSD: src/sys/netinet/ip_mroute.c,v 1.136 2007/07/28 07:31:30 rwatson Exp $ */ #include "opt_inet.h" @@ -639,12 +639,12 @@ pim_assert = 0; mrt_api_config = 0; - callout_init(&expire_upcalls_ch, NET_CALLOUT_MPSAFE); + callout_init(&expire_upcalls_ch, CALLOUT_MPSAFE); bw_upcalls_n = 0; bzero((caddr_t)bw_meter_timers, sizeof(bw_meter_timers)); - callout_init(&bw_upcalls_ch, NET_CALLOUT_MPSAFE); - callout_init(&bw_meter_ch, NET_CALLOUT_MPSAFE); + callout_init(&bw_upcalls_ch, CALLOUT_MPSAFE); + callout_init(&bw_meter_ch, CALLOUT_MPSAFE); } static void ==== //depot/projects/hammer/sys/netinet/tcp_input.c#77 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)tcp_input.c 8.12 (Berkeley) 5/24/95 - * $FreeBSD: src/sys/netinet/tcp_input.c,v 1.363 2007/07/27 00:57:06 silby Exp $ + * $FreeBSD: src/sys/netinet/tcp_input.c,v 1.366 2007/07/29 01:31:33 mjacob Exp $ */ #include "opt_ipfw.h" /* for ipfw_fwd */ @@ -57,6 +57,8 @@ #include #include +#define TCPSTATES /* for logging */ + #include #include #include @@ -98,7 +100,7 @@ SYSCTL_STRUCT(_net_inet_tcp, TCPCTL_STATS, stats, CTLFLAG_RW, &tcpstat , tcpstat, "TCP statistics (struct tcpstat, netinet/tcp_var.h)"); -static int tcp_log_in_vain = 0; +int tcp_log_in_vain = 0; SYSCTL_INT(_net_inet_tcp, OID_AUTO, log_in_vain, CTLFLAG_RW, &tcp_log_in_vain, 0, "Log all incoming TCP segments to closed ports"); @@ -648,33 +650,21 @@ * Our (SYN|ACK) response was rejected. * Check with syncache and remove entry to prevent * retransmits. + * + * NB: syncache_chkrst does its own logging of failure + * causes. */ - if ((thflags & (TH_ACK|TH_RST)) == (TH_ACK|TH_RST)) { - if ((s = tcp_log_addrs(&inc, th, NULL, NULL))) - log(LOG_DEBUG, "%s; %s: Listen socket: " - "Our SYN|ACK was rejected, connection " - "attempt aborted by remote endpoint\n", - s, __func__); + if (thflags & TH_RST) { syncache_chkrst(&inc, th); goto dropunlock; } /* - * Spurious RST. Ignore. - */ - if (thflags & TH_RST) { - if ((s = tcp_log_addrs(&inc, th, NULL, NULL))) - log(LOG_DEBUG, "%s; %s: Listen socket: " - "Spurious RST, segment rejected\n", - s, __func__); - goto dropunlock; - } - /* * We can't do anything without SYN. */ if ((thflags & TH_SYN) == 0) { if ((s = tcp_log_addrs(&inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: Listen socket: " - "SYN is missing, segment rejected\n", + "SYN is missing, segment ignored\n", s, __func__); tcpstat.tcps_badsyn++; goto dropunlock; @@ -706,7 +696,7 @@ if ((thflags & TH_FIN) && drop_synfin) { if ((s = tcp_log_addrs(&inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: Listen socket: " - "SYN|FIN segment rejected (based on " + "SYN|FIN segment ignored (based on " "sysctl setting)\n", s, __func__); tcpstat.tcps_badsyn++; goto dropunlock; @@ -783,7 +773,7 @@ if ((s = tcp_log_addrs(&inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: Listen socket: " "Connection attempt from broad- or multicast " - "link layer address rejected\n", s, __func__); + "link layer address ignored\n", s, __func__); goto dropunlock; } if (isipv6) { @@ -793,7 +783,7 @@ if ((s = tcp_log_addrs(&inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: Listen socket: " "Connection attempt to/from self " - "rejected\n", s, __func__); + "ignored\n", s, __func__); goto dropunlock; } if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst) || @@ -801,7 +791,7 @@ if ((s = tcp_log_addrs(&inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: Listen socket: " "Connection attempt from/to multicast " - "address rejected\n", s, __func__); + "address ignored\n", s, __func__); goto dropunlock; } #endif @@ -811,7 +801,7 @@ if ((s = tcp_log_addrs(&inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: Listen socket: " "Connection attempt from/to self " - "rejected\n", s, __func__); + "ignored\n", s, __func__); goto dropunlock; } if (IN_MULTICAST(ntohl(ip->ip_dst.s_addr)) || @@ -821,7 +811,7 @@ if ((s = tcp_log_addrs(&inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: Listen socket: " "Connection attempt from/to broad- " - "or multicast address rejected\n", + "or multicast address ignored\n", s, __func__); goto dropunlock; } @@ -1578,8 +1568,22 @@ */ if ((so->so_state & SS_NOFDREF) && tp->t_state > TCPS_CLOSE_WAIT && tlen) { + char *s; + KASSERT(headlocked, ("%s: trimthenstep6: tcp_close.3: head " "not locked", __func__)); + if ((s = tcp_log_addrs(&tp->t_inpcb->inp_inc, th, NULL, NULL))) { +#ifdef TCPDEBUG + log(LOG_DEBUG, "%s; %s: %s: Received data after socket " + "was closed, sending RST and removing tcpcb\n", + s, __func__, tcpstates[tp->t_state]); +#else + log(LOG_DEBUG, "%s; %s: Received data after socket " + "was closed, sending RST and removing tcpcb\n", + s, __func__); +#endif + free(s, M_TCPLOG); + } tp = tcp_close(tp); tcpstat.tcps_rcvafterclose++; rstreason = BANDLIM_UNLIMITED; ==== //depot/projects/hammer/sys/netinet/tcp_subr.c#69 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)tcp_subr.c 8.2 (Berkeley) 5/24/95 - * $FreeBSD: src/sys/netinet/tcp_subr.c,v 1.292 2007/07/27 00:57:06 silby Exp $ + * $FreeBSD: src/sys/netinet/tcp_subr.c,v 1.294 2007/07/28 12:20:39 andre Exp $ */ #include "opt_compat.h" @@ -133,6 +133,10 @@ SYSCTL_INT(_net_inet_tcp, TCPCTL_DO_RFC1323, rfc1323, CTLFLAG_RW, &tcp_do_rfc1323, 0, "Enable rfc1323 (high performance TCP) extensions"); +static int tcp_log_debug = 1; +SYSCTL_INT(_net_inet_tcp, OID_AUTO, log_debug, CTLFLAG_RW, + &tcp_log_debug, 0, "Log errors caused by incoming TCP segments"); + static int tcp_tcbhashsize = 0; SYSCTL_INT(_net_inet_tcp, OID_AUTO, tcbhashsize, CTLFLAG_RDTUN, &tcp_tcbhashsize, 0, "Size of TCP control-block hashtable"); @@ -592,12 +596,8 @@ tcp_mssdflt; /* Set up our timeouts. */ - if (NET_CALLOUT_MPSAFE) - callout_init_mtx(&tp->t_timers->tt_timer, &inp->inp_mtx, - CALLOUT_RETURNUNLOCKED); - else - callout_init_mtx(&tp->t_timers->tt_timer, &inp->inp_mtx, - (CALLOUT_RETURNUNLOCKED|CALLOUT_NETGIANT)); + callout_init_mtx(&tp->t_timers->tt_timer, &inp->inp_mtx, + CALLOUT_RETURNUNLOCKED); if (tcp_do_rfc1323) tp->t_flags = (TF_REQ_SCALE|TF_REQ_TSTMP); @@ -2098,6 +2098,10 @@ 2 * INET_ADDRSTRLEN; #endif /* INET6 */ + /* Is logging enabled? */ + if (tcp_log_debug == 0 && tcp_log_in_vain == 0) + return (NULL); + s = malloc(size, M_TCPLOG, M_ZERO|M_NOWAIT); if (s == NULL) return (NULL); ==== //depot/projects/hammer/sys/netinet/tcp_syncache.c#46 (text+ko) ==== @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/netinet/tcp_syncache.c,v 1.124 2007/07/27 00:57:06 silby Exp $ + * $FreeBSD: src/sys/netinet/tcp_syncache.c,v 1.127 2007/07/28 20:13:40 silby Exp $ */ #include "opt_inet.h" @@ -143,6 +143,7 @@ struct mtx sch_mtx; TAILQ_HEAD(sch_head, syncache) sch_bucket; struct callout sch_timer; + int sch_nextc; u_int sch_length; u_int sch_oddeven; u_int32_t sch_secbits_odd[SYNCOOKIE_SECRET_SIZE]; @@ -157,6 +158,8 @@ static int syncache_respond(struct syncache *); static struct socket *syncache_socket(struct syncache *, struct socket *, struct mbuf *m); +static void syncache_timeout(struct syncache *sc, struct syncache_head *sch, + int docallout); static void syncache_timer(void *); static void syncookie_generate(struct syncache_head *, struct syncache *, u_int32_t *); @@ -233,12 +236,6 @@ #define ENDPTS6_EQ(a, b) (memcmp(a, b, sizeof(*a)) == 0) -#define SYNCACHE_TIMEOUT(sc) do { \ - (sc)->sc_rxmits++; \ - (sc)->sc_rxttime = ticks + \ - TCPTV_RTOBASE * tcp_backoff[(sc)->sc_rxmits - 1]; \ -} while (0) - #define SCH_LOCK(sch) mtx_lock(&(sch)->sch_mtx) #define SCH_UNLOCK(sch) mtx_unlock(&(sch)->sch_mtx) #define SCH_LOCK_ASSERT(sch) mtx_assert(&(sch)->sch_mtx, MA_OWNED) @@ -262,7 +259,6 @@ syncache_init(void) { int i; - struct syncache_head *sch; tcp_syncache.cache_count = 0; tcp_syncache.hashsize = TCP_SYNCACHE_HASHSIZE; @@ -305,17 +301,6 @@ tcp_syncache.zone = uma_zcreate("syncache", sizeof(struct syncache), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); uma_zone_set_max(tcp_syncache.zone, tcp_syncache.cache_limit); - - /* - * Start the syncache head timers running. They each run ten times - * a second, and are spread out so that they are not all running on - * the same clock tick. - */ - for (i = 0; i < tcp_syncache.hashsize; i++) { - sch = &tcp_syncache.hashbase[i]; - callout_reset(&(sch)->sch_timer, i * (hz / 10), - syncache_timer, (void *)(sch)); - } } /* @@ -345,8 +330,8 @@ TAILQ_INSERT_HEAD(&sch->sch_bucket, sc, sc_hash); sch->sch_length++; - /* Set the retransmit timer for this socket. */ - SYNCACHE_TIMEOUT(sc); + /* Reinitialize the bucket row's timer. */ + syncache_timeout(sc, sch, 1); SCH_UNLOCK(sch); @@ -372,6 +357,22 @@ } /* + * Engage/reengage time on bucket row. + */ +static void +syncache_timeout(struct syncache *sc, struct syncache_head *sch, int docallout) +{ + sc->sc_rxttime = ticks + + TCPTV_RTOBASE * (tcp_backoff[sc->sc_rxmits]); + sc->sc_rxmits++; + if (sch->sch_nextc > sc->sc_rxttime) + sch->sch_nextc = sc->sc_rxttime; + if (!TAILQ_EMPTY(&sch->sch_bucket) && docallout) + callout_reset(&sch->sch_timer, sch->sch_nextc - ticks, + syncache_timer, (void *)sch); +} + +/* * Walk the timer queues, looking for SYN,ACKs that need to be retransmitted. * If we have retransmitted an entry the maximum number of times, expire it. * One separate timer for each bucket row. @@ -396,13 +397,16 @@ * then the RST will be sent by the time the remote * host does the SYN/ACK->ACK. */ - if (sc->sc_rxttime >= tick) { + if (sc->sc_rxttime > tick) { + if (sc->sc_rxttime < sch->sch_nextc) + sch->sch_nextc = sc->sc_rxttime; continue; } if (sc->sc_rxmits > tcp_syncache.rexmt_limit) { if ((s = tcp_log_addrs(&sc->sc_inc, NULL, NULL, NULL))) { - log(LOG_DEBUG, "%s; %s: Response timeout\n", + log(LOG_DEBUG, "%s; %s: Retransmits exhausted, " + "giving up and removing syncache entry\n", s, __func__); free(s, M_TCPLOG); } @@ -410,13 +414,20 @@ tcpstat.tcps_sc_stale++; continue; } + if ((s = tcp_log_addrs(&sc->sc_inc, NULL, NULL, NULL))) { + log(LOG_DEBUG, "%s; %s: Response timeout, " + "retransmitting (%u) SYN|ACK\n", + s, __func__, sc->sc_rxmits); + free(s, M_TCPLOG); + } (void) syncache_respond(sc); tcpstat.tcps_sc_retransmitted++; - SYNCACHE_TIMEOUT(sc); + syncache_timeout(sc, sch, 0); } - callout_reset(&(sch)->sch_timer, hz / 10, - syncache_timer, (void *)(sch)); + if (!TAILQ_EMPTY(&(sch)->sch_bucket)) + callout_reset(&(sch)->sch_timer, (sch)->sch_nextc - tick, + syncache_timer, (void *)(sch)); } /* @@ -475,11 +486,39 @@ { struct syncache *sc; struct syncache_head *sch; + char *s = NULL; sc = syncache_lookup(inc, &sch); /* returns locked sch */ SCH_LOCK_ASSERT(sch); - if (sc == NULL) + + /* + * Any RST to our SYN|ACK must not carry ACK, SYN or FIN flags. + * See RFC 793 page 65, section SEGMENT ARRIVES. + */ + if (th->th_flags & (TH_ACK|TH_SYN|TH_FIN)) { + if ((s = tcp_log_addrs(inc, th, NULL, NULL))) + log(LOG_DEBUG, "%s; %s: Spurious RST with ACK, SYN or " + "FIN flag set, segment ignored\n", s, __func__); + tcpstat.tcps_badrst++; + goto done; + } + + /* + * No corresponding connection was found in syncache. + * If syncookies are enabled and possibly exclusively + * used, or we are under memory pressure, a valid RST + * may not find a syncache entry. In that case we're + * done and no SYN|ACK retransmissions will happen. + * Otherwise the the RST was misdirected or spoofed. + */ + if (sc == NULL) { + if ((s = tcp_log_addrs(inc, th, NULL, NULL))) + log(LOG_DEBUG, "%s; %s: Spurious RST without matching " + "syncache entry (possibly syncookie only), " + "segment ignored\n", s, __func__); + tcpstat.tcps_badrst++; goto done; + } /* * If the RST bit is set, check the sequence number to see @@ -497,9 +536,21 @@ if (SEQ_GEQ(th->th_seq, sc->sc_irs) && SEQ_LEQ(th->th_seq, sc->sc_irs + sc->sc_wnd)) { syncache_drop(sc, sch); + if ((s = tcp_log_addrs(inc, th, NULL, NULL))) + log(LOG_DEBUG, "%s; %s: Our SYN|ACK was rejected, " + "connection attempt aborted by remote endpoint\n", + s, __func__); tcpstat.tcps_sc_reset++; + } else if ((s = tcp_log_addrs(inc, th, NULL, NULL))) { + log(LOG_DEBUG, "%s; %s: RST with invalid SEQ %u != IRS %u " + "(+WND %u), segment ignored\n", + s, __func__, th->th_seq, sc->sc_irs, sc->sc_wnd); + tcpstat.tcps_badrst++; } + done: + if (s != NULL) + free(s, M_TCPLOG); SCH_UNLOCK(sch); } @@ -736,7 +787,7 @@ /* * If the SYN,ACK was retransmitted, reset cwnd to 1 segment. */ - if (sc->sc_rxmits > 1) + if (sc->sc_rxmits) tp->snd_cwnd = tp->t_maxseg; tcp_timer_activate(tp, TT_KEEP, tcp_keepinit); @@ -807,7 +858,6 @@ "(probably spoofed)\n", s, __func__); goto failed; } - tcpstat.tcps_sc_recvcookie++; } else { /* Pull out the entry to unlock the bucket row. */ TAILQ_REMOVE(&sch->sch_bucket, sc, sc_hash); @@ -909,6 +959,7 @@ struct mbuf *ipopts = NULL; u_int32_t flowtmp; int win, sb_hiwat, ip_ttl, ip_tos, noopt; + char *s; #ifdef INET6 int autoflowlabel = 0; #endif @@ -919,6 +970,8 @@ INP_INFO_WLOCK_ASSERT(&tcbinfo); INP_LOCK_ASSERT(inp); /* listen socket */ + KASSERT((th->th_flags & (TH_RST|TH_ACK|TH_SYN)) == TH_SYN, + ("%s: unexpected tcp flags", __func__)); /* * Combine all so/tp operations very early to drop the INP lock as @@ -966,6 +1019,11 @@ * * XXX: should the syncache be re-initialized with the contents * of the new SYN here (which may have different options?) + * + * XXX: We do not check the sequence number to see if this is a + * real retransmit or a new connection attempt. The question is + * how to handle such a case; either ignore it as spoofed, or + * drop the current entry and create a new one? */ sc = syncache_lookup(inc, &sch); /* returns locked entry */ SCH_LOCK_ASSERT(sch); @@ -997,8 +1055,16 @@ KASSERT(sc->sc_label != NULL, ("%s: label not initialized", __func__)); #endif + /* Retransmit SYN|ACK and reset retransmit count. */ + if ((s = tcp_log_addrs(&sc->sc_inc, th, NULL, NULL))) { + log(LOG_DEBUG, "%s; %s: Reveived duplicate SYN, " + "resetting timer and retransmitting SYN|ACK\n", + s, __func__); + free(s, M_TCPLOG); + } if (syncache_respond(sc) == 0) { - SYNCACHE_TIMEOUT(sc); + sc->sc_rxmits = 0; + syncache_timeout(sc, sch, 1); tcpstat.tcps_sndacks++; tcpstat.tcps_sndtotal++; } @@ -1450,6 +1516,7 @@ sc->sc_tsoff = data - ticks; /* after XOR */ } + tcpstat.tcps_sc_sendcookie++; return; } @@ -1552,6 +1619,7 @@ sc->sc_rxmits = 0; sc->sc_peer_mss = tcp_sc_msstab[mss]; + tcpstat.tcps_sc_recvcookie++; return (sc); } ==== //depot/projects/hammer/sys/netinet/tcp_usrreq.c#47 (text+ko) ==== @@ -29,7 +29,7 @@ * SUCH DAMAGE. * * From: @(#)tcp_usrreq.c 8.2 (Berkeley) 1/3/94 - * $FreeBSD: src/sys/netinet/tcp_usrreq.c,v 1.158 2007/06/15 22:54:11 mjacob Exp $ + * $FreeBSD: src/sys/netinet/tcp_usrreq.c,v 1.159 2007/07/29 01:31:33 mjacob Exp $ */ #include "opt_ddb.h" @@ -87,7 +87,9 @@ /* * TCP protocol interface to socket abstraction. */ -extern char *tcpstates[]; /* XXX ??? */ +#ifdef TCPDEBUG +extern const char *tcpstates[]; +#endif static int tcp_attach(struct socket *); static int tcp_connect(struct tcpcb *, struct sockaddr *, ==== //depot/projects/hammer/sys/netinet/tcp_var.h#46 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)tcp_var.h 8.4 (Berkeley) 5/24/95 - * $FreeBSD: src/sys/netinet/tcp_var.h,v 1.154 2007/07/27 00:57:06 silby Exp $ + * $FreeBSD: src/sys/netinet/tcp_var.h,v 1.155 2007/07/28 12:20:39 andre Exp $ */ #ifndef _NETINET_TCP_VAR_H_ @@ -494,6 +494,7 @@ extern struct inpcbhead tcb; /* head of queue of active tcpcb's */ extern struct inpcbinfo tcbinfo; extern struct tcpstat tcpstat; /* tcp statistics */ +extern int tcp_log_in_vain; extern int tcp_mssdflt; /* XXX */ extern int tcp_minmss; extern int tcp_delack_enabled; ==== //depot/projects/hammer/sys/sys/mutex.h#32 (text+ko) ==== @@ -26,7 +26,7 @@ * SUCH DAMAGE. * * from BSDI $Id: mutex.h,v 2.7.2.35 2000/04/27 03:10:26 cp Exp $ - * $FreeBSD: src/sys/sys/mutex.h,v 1.99 2007/07/27 11:59:57 rwatson Exp $ + * $FreeBSD: src/sys/sys/mutex.h,v 1.100 2007/07/28 07:31:30 rwatson Exp $ */ #ifndef _SYS_MUTEX_H_ @@ -408,7 +408,6 @@ } while (0) #define NET_ASSERT_GIANT() do { \ } while (0) -#define NET_CALLOUT_MPSAFE CALLOUT_MPSAFE struct mtx_args { struct mtx *ma_mtx; ==== //depot/projects/hammer/tools/tools/net80211/Makefile#3 (text+ko) ==== @@ -1,5 +1,5 @@ -# $FreeBSD: src/tools/tools/net80211/Makefile,v 1.3 2006/08/07 00:05:32 sam Exp $ +# $FreeBSD: src/tools/tools/net80211/Makefile,v 1.4 2007/07/28 00:18:23 thompsa Exp $ -SUBDIR= stumbler w00t wlandebug wesside wlaninject wlanstats wlanwatch +SUBDIR= stumbler w00t wesside wlaninject wlanstats wlanwatch .include ==== //depot/projects/hammer/tools/tools/net80211/README#2 (text+ko) ==== @@ -1,4 +1,4 @@ -$FreeBSD: src/tools/tools/net80211/README,v 1.2 2006/08/07 00:05:32 sam Exp $ +$FreeBSD: src/tools/tools/net80211/README,v 1.3 2007/07/28 00:18:23 thompsa Exp $ This directory has various tools for use with the net80211 layer. Some may not work depending on the capabilities of the underyling @@ -7,7 +7,6 @@ stumbler view nearby networks using raw packet interface w00t variety of programs that use the raw packet interface wesside WEP frag attack tool using raw packet interface -wlandebug manipulate net80211 debug flags symbolically wlaninject inject 802.11 packets using the raw packet interface wlanstats dump net80211 statistics wlanwatch monitor net80211 events via the routing socket ==== //depot/projects/hammer/usr.bin/truss/i386-fbsd.c#13 (text+ko) ==== @@ -31,7 +31,7 @@ #ifndef lint static const char rcsid[] = - "$FreeBSD: src/usr.bin/truss/i386-fbsd.c,v 1.28 2007/06/26 22:42:37 delphij Exp $"; + "$FreeBSD: src/usr.bin/truss/i386-fbsd.c,v 1.29 2007/07/28 23:15:04 marcel Exp $"; #endif /* not lint */ /* @@ -167,7 +167,7 @@ iorequest.piod_op = PIOD_READ_D; iorequest.piod_offs = (void *)parm_offset; iorequest.piod_addr = fsc.args; - iorequest.piod_len = nargs * sizeof(unsigned long); + iorequest.piod_len = (1+nargs) * sizeof(unsigned long); ptrace(PT_IO, cpid, (caddr_t)&iorequest, 0); if (iorequest.piod_len == 0) return; ==== //depot/projects/hammer/usr.bin/truss/main.c#14 (text+ko) ==== @@ -30,7 +30,7 @@ */ #include -__FBSDID("$FreeBSD: src/usr.bin/truss/main.c,v 1.45 2007/06/26 22:42:37 delphij Exp $"); +__FBSDID("$FreeBSD: src/usr.bin/truss/main.c,v 1.46 2007/07/28 23:00:42 marcel Exp $"); /* * The main module for truss. Suprisingly simple, but, then, the other @@ -58,7 +58,7 @@ #include "truss.h" #include "extern.h" -#define MAXARGS 5 +#define MAXARGS 6 static void usage(void) ==== //depot/projects/hammer/usr.bin/truss/powerpc-fbsd.c#4 (text+ko) ==== @@ -27,7 +27,7 @@ #ifndef lint static const char rcsid[] = - "$FreeBSD: src/usr.bin/truss/powerpc-fbsd.c,v 1.3 2007/06/26 22:42:37 delphij Exp $"; + "$FreeBSD: src/usr.bin/truss/powerpc-fbsd.c,v 1.4 2007/07/28 23:15:04 marcel Exp $"; #endif /* not lint */ /* @@ -118,6 +118,9 @@ unsigned int regargs; struct syscall *sc; + /* Account for a 64-bit argument with corresponding alignment. */ + nargs += 2; + cpid = trussinfo->curthread->tid; clear_fsc(); ==== //depot/projects/hammer/usr.bin/truss/syscalls.c#23 (text+ko) ==== @@ -31,7 +31,7 @@ #ifndef lint static const char rcsid[] = - "$FreeBSD: src/usr.bin/truss/syscalls.c,v 1.53 2007/04/10 04:03:34 delphij Exp $"; + "$FreeBSD: src/usr.bin/truss/syscalls.c,v 1.55 2007/07/28 23:18:39 marcel Exp $"; #endif /* not lint */ /* @@ -72,6 +72,20 @@ #include "extern.h" #include "syscall.h" +/* 64-bit alignment on 32-bit platforms. */ +#ifdef __powerpc__ +#define QUAD_ALIGN 1 +#else +#define QUAD_ALIGN 0 +#endif + +/* Number of slots needed for a 64-bit argument. */ +#ifdef __LP64__ +#define QUAD_SLOTS 1 +#else +#define QUAD_SLOTS 2 +#endif + /* * This should probably be in its own file, sorted alphabetically. */ @@ -82,19 +96,13 @@ { "readlink", 1, 3, { { Name, 0 } , { Readlinkres | OUT, 1 }, { Int, 2 }}}, { "lseek", 2, 3, -#ifdef __LP64__ - { { Int, 0 }, {Quad, 2 }, { Whence, 3 }}}, -#else - { { Int, 0 }, {Quad, 2 }, { Whence, 4 }}}, -#endif + { {Int, 0}, {Quad, 1 + QUAD_ALIGN}, + {Whence, 1 + QUAD_SLOTS + QUAD_ALIGN}}}, { "linux_lseek", 2, 3, { { Int, 0 }, {Int, 1 }, { Whence, 2 }}}, { "mmap", 2, 6, -#ifdef __LP64__ - { { Ptr, 0 }, {Int, 1}, {Mprot, 2}, {Mmapflags, 3}, {Int, 4}, {Quad, 5}}}, -#else - { { Ptr, 0 }, {Int, 1}, {Mprot, 2}, {Mmapflags, 3}, {Int, 4}, {Quad, 6}}}, -#endif + { {Ptr, 0}, {Int, 1}, {Mprot, 2}, {Mmapflags, 3}, {Int, 4}, + {Quad, 5 + QUAD_ALIGN}}}, { "mprotect", 1, 3, { { Ptr, 0 }, {Int, 1}, {Mprot, 2}}}, { "open", 1, 3, @@ -488,13 +496,13 @@ int pid = trussinfo->pid; switch (sc->type & ARG_MASK) { case Hex: - asprintf(&tmp, "0x%lx", args[sc->offset]); + asprintf(&tmp, "0x%x", (int)args[sc->offset]); break; case Octal: - asprintf(&tmp, "0%lo", args[sc->offset]); + asprintf(&tmp, "0%o", (int)args[sc->offset]); break; case Int: - asprintf(&tmp, "%ld", args[sc->offset]); + asprintf(&tmp, "%d", (int)args[sc->offset]); break; case Name: { ==== //depot/projects/hammer/usr.sbin/Makefile#80 (text+ko) ==== @@ -1,5 +1,5 @@ # From: @(#)Makefile 5.20 (Berkeley) 6/12/93 -# $FreeBSD: src/usr.sbin/Makefile,v 1.370 2007/07/14 21:49:24 rwatson Exp $ +# $FreeBSD: src/usr.sbin/Makefile,v 1.371 2007/07/28 00:12:21 thompsa Exp $ .include @@ -182,6 +182,7 @@ vipw \ watch \ watchdogd \ + wlandebug \ ${_wlconfig} \ wpa \ ${_ypbind} \ >>> TRUNCATED FOR MAIL (1000 lines) <<<