From owner-svn-src-projects@FreeBSD.ORG Sun May 10 04:38:38 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 65EE7106566C; Sun, 10 May 2009 04:38:38 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3AE278FC14; Sun, 10 May 2009 04:38:38 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4A4cbeY043557; Sun, 10 May 2009 04:38:37 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4A4cb25043556; Sun, 10 May 2009 04:38:37 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <200905100438.n4A4cb25043556@svn.freebsd.org> From: Jeff Roberson Date: Sun, 10 May 2009 04:38:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191957 - projects/jeff_mbuf2 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 04:38:38 -0000 Author: jeff Date: Sun May 10 04:38:37 2009 New Revision: 191957 URL: http://svn.freebsd.org/changeset/base/191957 Log: - Create a new mbuf optimization branch since svn can't automatically merge the old one across the many removes and moves involved in usb2. Added: projects/jeff_mbuf2/ (props changed) - copied from r191956, head/sys/ From owner-svn-src-projects@FreeBSD.ORG Sun May 10 05:17:52 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 90228106566C; Sun, 10 May 2009 05:17:52 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 470428FC1C; Sun, 10 May 2009 05:17:52 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4A5HqkW044402; Sun, 10 May 2009 05:17:52 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4A5HpmY044395; Sun, 10 May 2009 05:17:51 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <200905100517.n4A5HpmY044395@svn.freebsd.org> From: Jeff Roberson Date: Sun, 10 May 2009 05:17:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191958 - in projects/jeff_mbuf2: dev/cxgb dev/ti dev/vx dev/xen/netback kern net netgraph netinet nfsclient nfsserver sys vm X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 05:17:52 -0000 Author: jeff Date: Sun May 10 05:17:51 2009 New Revision: 191958 URL: http://svn.freebsd.org/changeset/base/191958 Log: - Merge in changes from jeff_mbuf with one addition. - In m_refm() make all referenced data available in the ext area for compatibility with existing code that makes assumptions about referenced sizes. Modified: projects/jeff_mbuf2/dev/cxgb/cxgb_sge.c projects/jeff_mbuf2/dev/ti/if_ti.c projects/jeff_mbuf2/dev/vx/if_vx.c projects/jeff_mbuf2/dev/xen/netback/netback.c projects/jeff_mbuf2/kern/kern_mbuf.c projects/jeff_mbuf2/kern/uipc_mbuf.c projects/jeff_mbuf2/kern/uipc_mbuf2.c projects/jeff_mbuf2/kern/uipc_sockbuf.c projects/jeff_mbuf2/net/if_gre.c projects/jeff_mbuf2/netgraph/ng_tty.c projects/jeff_mbuf2/netinet/ip_options.c projects/jeff_mbuf2/netinet/sctp_os_bsd.h projects/jeff_mbuf2/nfsclient/nfsm_subs.h projects/jeff_mbuf2/nfsserver/nfsm_subs.h projects/jeff_mbuf2/sys/mbuf.h projects/jeff_mbuf2/sys/sockbuf.h projects/jeff_mbuf2/vm/uma.h projects/jeff_mbuf2/vm/uma_core.c projects/jeff_mbuf2/vm/uma_dbg.c projects/jeff_mbuf2/vm/uma_int.h Modified: projects/jeff_mbuf2/dev/cxgb/cxgb_sge.c ============================================================================== --- projects/jeff_mbuf2/dev/cxgb/cxgb_sge.c Sun May 10 04:38:37 2009 (r191957) +++ projects/jeff_mbuf2/dev/cxgb/cxgb_sge.c Sun May 10 05:17:51 2009 (r191958) @@ -515,7 +515,7 @@ refill_fl(adapter_t *sc, struct sge_fl * struct refill_fl_cb_arg cb_arg; caddr_t cl; int err, count = 0; - int header_size = sizeof(struct m_hdr) + sizeof(struct pkthdr) + sizeof(struct m_ext_) + sizeof(uint32_t); + int header_size = sizeof(struct mbuf) + sizeof(uint32_t); cb_arg.error = 0; while (n--) { @@ -2360,7 +2360,7 @@ t3_sge_alloc_qset(adapter_t *sc, u_int i q->rspq.size = p->rspq_size; - header_size = sizeof(struct m_hdr) + sizeof(struct pkthdr) + sizeof(struct m_ext_) + sizeof(uint32_t); + header_size = sizeof(struct mbuf) + sizeof(uint32_t); q->txq[TXQ_ETH].stop_thres = nports * flits_to_desc(sgl_len(TX_MAX_SEGS + 1) + 3); @@ -2535,8 +2535,7 @@ init_cluster_mbuf(caddr_t cl, int flags, struct mbuf *m; int header_size; - header_size = sizeof(struct m_hdr) + sizeof(struct pkthdr) + - sizeof(struct m_ext_) + sizeof(uint32_t); + header_size = sizeof(struct mbuf) + sizeof(uint32_t); bzero(cl, header_size); m = (struct mbuf *)cl; Modified: projects/jeff_mbuf2/dev/ti/if_ti.c ============================================================================== --- projects/jeff_mbuf2/dev/ti/if_ti.c Sun May 10 04:38:37 2009 (r191957) +++ projects/jeff_mbuf2/dev/ti/if_ti.c Sun May 10 05:17:51 2009 (r191958) @@ -1308,12 +1308,11 @@ ti_newbuf_mini(sc, i, m) if (m_new == NULL) { return (ENOBUFS); } - m_new->m_len = m_new->m_pkthdr.len = MHLEN; } else { m_new = m; - m_new->m_data = m_new->m_pktdat; - m_new->m_len = m_new->m_pkthdr.len = MHLEN; + m_new->m_data = M_START(m); } + m_new->m_len = m_new->m_pkthdr.len = m_new->m_size; m_adj(m_new, ETHER_ALIGN); r = &sc->ti_rdata->ti_rx_mini_ring[i]; Modified: projects/jeff_mbuf2/dev/vx/if_vx.c ============================================================================== --- projects/jeff_mbuf2/dev/vx/if_vx.c Sun May 10 04:38:37 2009 (r191957) +++ projects/jeff_mbuf2/dev/vx/if_vx.c Sun May 10 05:17:51 2009 (r191958) @@ -825,8 +825,11 @@ vx_get(struct vx_softc *sc, u_int totlen /* Convert one of our saved mbuf's. */ sc->vx_next_mb = (sc->vx_next_mb + 1) % MAX_MBS; m->m_data = m->m_pktdat; - m->m_flags = M_PKTHDR; - bzero(&m->m_pkthdr, sizeof(m->m_pkthdr)); + m->m_flags |= M_PKTHDR; + if (m_pkthdr_init(m, M_NOWAIT)) { + m_free(m); + return NULL; + } } m->m_pkthdr.rcvif = ifp; m->m_pkthdr.len = totlen; Modified: projects/jeff_mbuf2/dev/xen/netback/netback.c ============================================================================== --- projects/jeff_mbuf2/dev/xen/netback/netback.c Sun May 10 04:38:37 2009 (r191957) +++ projects/jeff_mbuf2/dev/xen/netback/netback.c Sun May 10 05:17:51 2009 (r191958) @@ -873,8 +873,7 @@ netif_rx(netif_t *netif) pkts_dequeued++; /* Check if we need to copy the data */ - if (((m->m_flags & (M_RDONLY|M_EXT)) != M_EXT) || - (*m->m_ext.ref_cnt > 1) || m->m_next != NULL) { + if (M_WRITABLE(m) == 0 || m->m_next != NULL) { struct mbuf *n; DDPRINTF("copying mbuf (fl=%x ext=%x rc=%d n=%x)\n", Modified: projects/jeff_mbuf2/kern/kern_mbuf.c ============================================================================== --- projects/jeff_mbuf2/kern/kern_mbuf.c Sun May 10 04:38:37 2009 (r191957) +++ projects/jeff_mbuf2/kern/kern_mbuf.c Sun May 10 05:17:51 2009 (r191958) @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -210,27 +211,24 @@ SYSCTL_STRUCT(_kern_ipc, OID_AUTO, mbsta /* * Zones from which we allocate. */ -uma_zone_t zone_mbuf; uma_zone_t zone_clust; -uma_zone_t zone_pack; uma_zone_t zone_jumbop; uma_zone_t zone_jumbo9; uma_zone_t zone_jumbo16; -uma_zone_t zone_ext_refcnt; +uma_zone_t zone_mbuf; +uma_zone_t zone_pack; /* * Local prototypes. */ -static int mb_ctor_mbuf(void *, int, void *, int); -static int mb_ctor_clust(void *, int, void *, int); -static int mb_ctor_pack(void *, int, void *, int); -static void mb_dtor_mbuf(void *, int, void *); -static void mb_dtor_clust(void *, int, void *); -static void mb_dtor_pack(void *, int, void *); -static int mb_zinit_pack(void *, int, int); -static void mb_zfini_pack(void *, int); - +#ifdef INVARIANTS +static int mb_ctor_pack(void *mem, int size, void *arg, int how); +#endif +static void mb_dtor_pack(void *mem, int size, void *arg); static void mb_reclaim(void *); +static int mb_zinit_pack(void *mem, int size, int how); +static void mb_zfini_pack(void *mem, int size); + static void mbuf_init(void *); static void *mbuf_jumbo_alloc(uma_zone_t, int, u_int8_t *, int); static void mbuf_jumbo_free(void *, int, u_int8_t); @@ -252,73 +250,66 @@ mbuf_init(void *dummy) * Configure UMA zones for Mbufs, Clusters, and Packets. */ zone_mbuf = uma_zcreate(MBUF_MEM_NAME, MSIZE, - mb_ctor_mbuf, mb_dtor_mbuf, #ifdef INVARIANTS - trash_init, trash_fini, + trash_ctor, trash_dtor, trash_init, trash_fini, #else - NULL, NULL, + NULL, NULL, NULL, NULL, #endif MSIZE - 1, UMA_ZONE_MAXBUCKET); zone_clust = uma_zcreate(MBUF_CLUSTER_MEM_NAME, MCLBYTES, - mb_ctor_clust, mb_dtor_clust, #ifdef INVARIANTS - trash_init, trash_fini, + trash_ctor, trash_dtor, trash_init, trash_fini, #else - NULL, NULL, + NULL, NULL, NULL, NULL, #endif - UMA_ALIGN_PTR, UMA_ZONE_REFCNT); + UMA_ALIGN_PTR, UMA_ZONE_MAXBUCKET); if (nmbclusters > 0) uma_zone_set_max(zone_clust, nmbclusters); - zone_pack = uma_zsecond_create(MBUF_PACKET_MEM_NAME, mb_ctor_pack, + zone_pack = uma_zsecond_create(MBUF_PACKET_MEM_NAME, +#ifdef INVARIANTS + mb_ctor_pack, +#else + NULL, +#endif mb_dtor_pack, mb_zinit_pack, mb_zfini_pack, zone_mbuf); /* Make jumbo frame zone too. Page size, 9k and 16k. */ zone_jumbop = uma_zcreate(MBUF_JUMBOP_MEM_NAME, MJUMPAGESIZE, - mb_ctor_clust, mb_dtor_clust, #ifdef INVARIANTS - trash_init, trash_fini, + trash_ctor, trash_dtor, trash_init, trash_fini, #else - NULL, NULL, + NULL, NULL, NULL, NULL, #endif - UMA_ALIGN_PTR, UMA_ZONE_REFCNT); + UMA_ALIGN_PTR, 0); if (nmbjumbop > 0) uma_zone_set_max(zone_jumbop, nmbjumbop); zone_jumbo9 = uma_zcreate(MBUF_JUMBO9_MEM_NAME, MJUM9BYTES, - mb_ctor_clust, mb_dtor_clust, #ifdef INVARIANTS - trash_init, trash_fini, + trash_ctor, trash_dtor, trash_init, trash_fini, #else - NULL, NULL, + NULL, NULL, NULL, NULL, #endif - UMA_ALIGN_PTR, UMA_ZONE_REFCNT); + UMA_ALIGN_PTR, 0); if (nmbjumbo9 > 0) uma_zone_set_max(zone_jumbo9, nmbjumbo9); uma_zone_set_allocf(zone_jumbo9, mbuf_jumbo_alloc); uma_zone_set_freef(zone_jumbo9, mbuf_jumbo_free); zone_jumbo16 = uma_zcreate(MBUF_JUMBO16_MEM_NAME, MJUM16BYTES, - mb_ctor_clust, mb_dtor_clust, #ifdef INVARIANTS - trash_init, trash_fini, + trash_ctor, trash_dtor, trash_init, trash_fini, #else - NULL, NULL, + NULL, NULL, NULL, NULL, #endif - UMA_ALIGN_PTR, UMA_ZONE_REFCNT); + UMA_ALIGN_PTR, 0); if (nmbjumbo16 > 0) uma_zone_set_max(zone_jumbo16, nmbjumbo16); uma_zone_set_allocf(zone_jumbo16, mbuf_jumbo_alloc); uma_zone_set_freef(zone_jumbo16, mbuf_jumbo_free); - zone_ext_refcnt = uma_zcreate(MBUF_EXTREFCNT_MEM_NAME, sizeof(u_int), - NULL, NULL, - NULL, NULL, - UMA_ALIGN_PTR, UMA_ZONE_ZINIT); - - /* uma_prealloc() goes here... */ - /* * Hook event handler for low-memory situation, used to * drain protocols and push data back to the caches (UMA @@ -373,86 +364,18 @@ mbuf_jumbo_free(void *mem, int size, u_i contigfree(mem, size, M_JUMBOFRAME); } -/* - * Constructor for Mbuf master zone. - * - * The 'arg' pointer points to a mb_args structure which - * contains call-specific information required to support the - * mbuf allocation API. See mbuf.h. - */ +#ifdef INVARIANTS static int -mb_ctor_mbuf(void *mem, int size, void *arg, int how) +mb_ctor_pack(void *mem, int size, void *arg, int how) { struct mbuf *m; - struct mb_args *args; -#ifdef MAC - int error; -#endif - int flags; - short type; -#ifdef INVARIANTS - trash_ctor(mem, size, arg, how); -#endif m = (struct mbuf *)mem; - args = (struct mb_args *)arg; - flags = args->flags; - type = args->type; - - /* - * The mbuf is initialized later. The caller has the - * responsibility to set up any MAC labels too. - */ - if (type == MT_NOINIT) - return (0); + trash_ctor(m->m_ext.ext_buf, MCLBYTES, arg, how); - m->m_next = NULL; - m->m_nextpkt = NULL; - m->m_len = 0; - m->m_flags = flags; - m->m_type = type; - if (flags & M_PKTHDR) { - m->m_data = m->m_pktdat; - m->m_pkthdr.rcvif = NULL; - m->m_pkthdr.header = NULL; - m->m_pkthdr.len = 0; - m->m_pkthdr.csum_flags = 0; - m->m_pkthdr.csum_data = 0; - m->m_pkthdr.tso_segsz = 0; - m->m_pkthdr.ether_vtag = 0; - m->m_pkthdr.flowid = 0; - SLIST_INIT(&m->m_pkthdr.tags); -#ifdef MAC - /* If the label init fails, fail the alloc */ - error = mac_mbuf_init(m, how); - if (error) - return (error); -#endif - } else - m->m_data = m->m_dat; return (0); } - -/* - * The Mbuf master zone destructor. - */ -static void -mb_dtor_mbuf(void *mem, int size, void *arg) -{ - struct mbuf *m; - unsigned long flags; - - m = (struct mbuf *)mem; - flags = (unsigned long)arg; - - if ((flags & MB_NOTAGS) == 0 && (m->m_flags & M_PKTHDR) != 0) - m_tag_delete_chain(m, NULL); - KASSERT((m->m_flags & M_EXT) == 0, ("%s: M_EXT set", __func__)); - KASSERT((m->m_flags & M_NOFREE) == 0, ("%s: M_NOFREE set", __func__)); -#ifdef INVARIANTS - trash_dtor(mem, size, arg); #endif -} /* * The Mbuf Packet zone destructor. @@ -463,21 +386,21 @@ mb_dtor_pack(void *mem, int size, void * struct mbuf *m; m = (struct mbuf *)mem; - if ((m->m_flags & M_PKTHDR) != 0) - m_tag_delete_chain(m, NULL); - /* Make sure we've got a clean cluster back. */ KASSERT((m->m_flags & M_EXT) == M_EXT, ("%s: M_EXT not set", __func__)); KASSERT(m->m_ext.ext_buf != NULL, ("%s: ext_buf == NULL", __func__)); - KASSERT(m->m_ext.ext_free == NULL, ("%s: ext_free != NULL", __func__)); + KASSERT(m->m_ext.ext_free == m_ext_free_nop, + ("%s: ext_free != m_ext_free_nop", __func__)); KASSERT(m->m_ext.ext_arg1 == NULL, ("%s: ext_arg1 != NULL", __func__)); KASSERT(m->m_ext.ext_arg2 == NULL, ("%s: ext_arg2 != NULL", __func__)); - KASSERT(m->m_ext.ext_size == MCLBYTES, ("%s: ext_size != MCLBYTES", __func__)); - KASSERT(m->m_ext.ext_type == EXT_PACKET, ("%s: ext_type != EXT_PACKET", __func__)); - KASSERT(*m->m_ext.ref_cnt == 1, ("%s: ref_cnt != 1", __func__)); -#ifdef INVARIANTS + KASSERT(m->m_ext.ext_size == MCLBYTES, ("%s: ext_size != MCLBYTES", + __func__)); + KASSERT(m->m_ext.ext_type == EXT_PACKET, ("%s: ext_type != EXT_PACKET", + __func__)); +#ifdef INVARIANTS trash_dtor(m->m_ext.ext_buf, MCLBYTES, arg); #endif + /* * If there are processes blocked on zone_clust, waiting for pages * to be freed up, * cause them to be woken up by draining the @@ -491,85 +414,6 @@ mb_dtor_pack(void *mem, int size, void * } /* - * The Cluster and Jumbo[PAGESIZE|9|16] zone constructor. - * - * Here the 'arg' pointer points to the Mbuf which we - * are configuring cluster storage for. If 'arg' is - * empty we allocate just the cluster without setting - * the mbuf to it. See mbuf.h. - */ -static int -mb_ctor_clust(void *mem, int size, void *arg, int how) -{ - struct mbuf *m; - u_int *refcnt; - int type; - uma_zone_t zone; - -#ifdef INVARIANTS - trash_ctor(mem, size, arg, how); -#endif - switch (size) { - case MCLBYTES: - type = EXT_CLUSTER; - zone = zone_clust; - break; -#if MJUMPAGESIZE != MCLBYTES - case MJUMPAGESIZE: - type = EXT_JUMBOP; - zone = zone_jumbop; - break; -#endif - case MJUM9BYTES: - type = EXT_JUMBO9; - zone = zone_jumbo9; - break; - case MJUM16BYTES: - type = EXT_JUMBO16; - zone = zone_jumbo16; - break; - default: - panic("unknown cluster size"); - break; - } - - m = (struct mbuf *)arg; - refcnt = uma_find_refcnt(zone, mem); - *refcnt = 1; - if (m != NULL) { - m->m_ext.ext_buf = (caddr_t)mem; - m->m_data = m->m_ext.ext_buf; - m->m_flags |= M_EXT; - m->m_ext.ext_free = NULL; - m->m_ext.ext_arg1 = NULL; - m->m_ext.ext_arg2 = NULL; - m->m_ext.ext_size = size; - m->m_ext.ext_type = type; - m->m_ext.ref_cnt = refcnt; - } - - return (0); -} - -/* - * The Mbuf Cluster zone destructor. - */ -static void -mb_dtor_clust(void *mem, int size, void *arg) -{ -#ifdef INVARIANTS - uma_zone_t zone; - - zone = m_getzone(size); - KASSERT(*(uma_find_refcnt(zone, mem)) <= 1, - ("%s: refcnt incorrect %u", __func__, - *(uma_find_refcnt(zone, mem))) ); - - trash_dtor(mem, size, arg); -#endif -} - -/* * The Packet secondary zone's init routine, executed on the * object's transition from mbuf keg slab to zone cache. */ @@ -579,13 +423,16 @@ mb_zinit_pack(void *mem, int size, int h struct mbuf *m; m = (struct mbuf *)mem; /* m is virgin. */ - if (uma_zalloc_arg(zone_clust, m, how) == NULL || - m->m_ext.ext_buf == NULL) + /* + * Allocate and attach the cluster to the ext. + */ + if ((mem = uma_zalloc(zone_clust, how)) == NULL) return (ENOMEM); - m->m_ext.ext_type = EXT_PACKET; /* Override. */ + m_extadd(m, mem, MCLBYTES, m_ext_free_nop, NULL, NULL, 0, EXT_PACKET); #ifdef INVARIANTS - trash_init(m->m_ext.ext_buf, MCLBYTES, how); + return trash_init(m->m_ext.ext_buf, MCLBYTES, how); #endif + return (0); } @@ -608,57 +455,34 @@ mb_zfini_pack(void *mem, int size) #endif } -/* - * The "packet" keg constructor. - */ -static int -mb_ctor_pack(void *mem, int size, void *arg, int how) +int +m_pkthdr_init(struct mbuf *m, int how) { - struct mbuf *m; - struct mb_args *args; #ifdef MAC int error; #endif - int flags; - short type; - - m = (struct mbuf *)mem; - args = (struct mb_args *)arg; - flags = args->flags; - type = args->type; -#ifdef INVARIANTS - trash_ctor(m->m_ext.ext_buf, MCLBYTES, arg, how); -#endif - m->m_next = NULL; - m->m_nextpkt = NULL; - m->m_data = m->m_ext.ext_buf; - m->m_len = 0; - m->m_flags = (flags | M_EXT); - m->m_type = type; - - if (flags & M_PKTHDR) { - m->m_pkthdr.rcvif = NULL; - m->m_pkthdr.len = 0; - m->m_pkthdr.header = NULL; - m->m_pkthdr.csum_flags = 0; - m->m_pkthdr.csum_data = 0; - m->m_pkthdr.tso_segsz = 0; - m->m_pkthdr.ether_vtag = 0; - m->m_pkthdr.flowid = 0; - SLIST_INIT(&m->m_pkthdr.tags); + m->m_data = m->m_pktdat; + SLIST_INIT(&m->m_pkthdr.tags); + m->m_pkthdr.rcvif = NULL; + m->m_pkthdr.header = NULL; + m->m_pkthdr.len = 0; + m->m_pkthdr.flowid = 0; + m->m_pkthdr.csum_flags = 0; + m->m_pkthdr.csum_data = 0; + m->m_pkthdr.tso_segsz = 0; + m->m_pkthdr.ether_vtag = 0; #ifdef MAC - /* If the label init fails, fail the alloc */ - error = mac_mbuf_init(m, how); - if (error) - return (error); + /* If the label init fails, fail the alloc */ + error = mac_mbuf_init(m, how); + if (error) + return (error); #endif - } - /* m_ext is already initialized. */ return (0); } + /* * This is the protocol drain routine. * @@ -680,3 +504,45 @@ mb_reclaim(void *junk) if (pr->pr_drain != NULL) (*pr->pr_drain)(); } + +struct mbuf * +_m_getjcl(int how, short type, int flags, int size, uma_zone_t zone, + int exttype) +{ + struct mbuf *m; + void *mem; + + if (size == MCLBYTES) + return m_getcl(how, type, flags); + /* + * Allocate the memory and header seperate for these sizes. + */ + mem = uma_zalloc(zone, how); + if (mem == NULL) + return (NULL); + m = m_alloc(zone_mbuf, 0, how, type, flags); + if (m == NULL) { + uma_zfree(zone, mem); + return (NULL); + } + m_extadd(m, mem, size, m_ext_free_zone, zone, mem, flags, exttype); + + return (m); +} + +void * +_m_cljget(struct mbuf *m, int how, int size, uma_zone_t zone, int exttype) +{ + void *mem; + + if (m && m->m_flags & M_EXT) + printf("%s: %p mbuf already has cluster\n", __func__, m); + if (m != NULL) + m->m_ext.ext_buf = NULL; + mem = uma_zalloc(zone, how); + if (mem == NULL) + return (NULL); + if (m) + m_extadd(m, mem, size, m_ext_free_zone, zone, mem, 0, exttype); + return (mem); +} Modified: projects/jeff_mbuf2/kern/uipc_mbuf.c ============================================================================== --- projects/jeff_mbuf2/kern/uipc_mbuf.c Sun May 10 04:38:37 2009 (r191957) +++ projects/jeff_mbuf2/kern/uipc_mbuf.c Sun May 10 05:17:51 2009 (r191958) @@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -87,6 +88,8 @@ SYSCTL_INT(_kern_ipc, OID_AUTO, m_defrag &m_defragrandomfailures, 0, ""); #endif +static void m_refm(struct mbuf *mb, struct mbuf *m); + /* * Allocate a given length worth of mbufs and/or clusters (whatever fits * best) and return a pointer to the top of the allocated chain. If an @@ -128,8 +131,7 @@ m_getm2(struct mbuf *m, int len, int how } /* Book keeping. */ - len -= (mb->m_flags & M_EXT) ? mb->m_ext.ext_size : - ((mb->m_flags & M_PKTHDR) ? MHLEN : MLEN); + len -= mb->m_size; if (mtail != NULL) mtail->m_next = mb; else @@ -164,147 +166,63 @@ m_freem(struct mbuf *mb) mb = m_free(mb); } -/*- - * Configure a provided mbuf to refer to the provided external storage - * buffer and setup a reference count for said buffer. If the setting - * up of the reference count fails, the M_EXT bit will not be set. If - * successfull, the M_EXT bit is set in the mbuf's flags. - * - * Arguments: - * mb The existing mbuf to which to attach the provided buffer. - * buf The address of the provided external storage buffer. - * size The size of the provided buffer. - * freef A pointer to a routine that is responsible for freeing the - * provided external storage buffer. - * args A pointer to an argument structure (of any type) to be passed - * to the provided freef routine (may be NULL). - * flags Any other flags to be passed to the provided mbuf. - * type The type that the external storage buffer should be - * labeled with. - * - * Returns: - * Nothing. +/* + * Reference the existing storage area of an mbuf. The reference is readonly + * and the referenced data can not be freed until the referencing mbuf is + * freed. */ -void -m_extadd(struct mbuf *mb, caddr_t buf, u_int size, - void (*freef)(void *, void *), void *arg1, void *arg2, int flags, int type) +static void +m_refm(struct mbuf *mb, struct mbuf *m) { - KASSERT(type != EXT_CLUSTER, ("%s: EXT_CLUSTER not allowed", __func__)); - if (type != EXT_EXTREF) - mb->m_ext.ref_cnt = (u_int *)uma_zalloc(zone_ext_refcnt, M_NOWAIT); - if (mb->m_ext.ref_cnt != NULL) { - *(mb->m_ext.ref_cnt) = 1; - mb->m_flags |= (M_EXT | flags); - mb->m_ext.ext_buf = buf; - mb->m_data = mb->m_ext.ext_buf; - mb->m_ext.ext_size = size; - mb->m_ext.ext_free = freef; - mb->m_ext.ext_arg1 = arg1; - mb->m_ext.ext_arg2 = arg2; - mb->m_ext.ext_type = type; - } + if (m->m_ref > 1) + atomic_add_int(&m->m_ref, 1); + else + m->m_ref++; + mb->m_flags |= M_EXT | M_RDONLY; + mb->m_data = m->m_data; + mb->m_size = m->m_size; + mb->m_ext.ext_buf = M_START(m); + mb->m_ext.ext_size = m->m_size; + mb->m_ext.ext_free = m_ext_free_mbuf; + mb->m_ext.ext_arg1 = m; + mb->m_ext.ext_arg2 = NULL; + mb->m_ext.ext_type = EXT_MBUF; + + CTR3(KTR_NET, "m_refm: %p ref %d buf %p", + mb, mb->m_ref, mb->m_ext.ext_buf); } /* - * Non-directly-exported function to clean up after mbufs with M_EXT - * storage attached to them if the reference count hits 1. + * Free the ext area of a mbuf assuming a uma zone and argument are + * presented. */ void -mb_free_ext(struct mbuf *m) +m_ext_free_zone(void *arg1, void *arg2) { - int skipmbuf; - - KASSERT((m->m_flags & M_EXT) == M_EXT, ("%s: M_EXT not set", __func__)); - KASSERT(m->m_ext.ref_cnt != NULL, ("%s: ref_cnt not set", __func__)); + uma_zfree(arg1, arg2); +} + +/* + * Free the ext area of a mbuf assuming it has been acquired with m_refm(). + */ +void +m_ext_free_mbuf(void *arg1, void *arg2) +{ /* - * check if the header is embedded in the cluster - */ - skipmbuf = (m->m_flags & M_NOFREE); - - /* Free attached storage if this mbuf is the only reference to it. */ - if (*(m->m_ext.ref_cnt) == 1 || - atomic_fetchadd_int(m->m_ext.ref_cnt, -1) == 1) { - switch (m->m_ext.ext_type) { - case EXT_PACKET: /* The packet zone is special. */ - if (*(m->m_ext.ref_cnt) == 0) - *(m->m_ext.ref_cnt) = 1; - uma_zfree(zone_pack, m); - return; /* Job done. */ - case EXT_CLUSTER: - uma_zfree(zone_clust, m->m_ext.ext_buf); - break; - case EXT_JUMBOP: - uma_zfree(zone_jumbop, m->m_ext.ext_buf); - break; - case EXT_JUMBO9: - uma_zfree(zone_jumbo9, m->m_ext.ext_buf); - break; - case EXT_JUMBO16: - uma_zfree(zone_jumbo16, m->m_ext.ext_buf); - break; - case EXT_SFBUF: - case EXT_NET_DRV: - case EXT_MOD_TYPE: - case EXT_DISPOSABLE: - *(m->m_ext.ref_cnt) = 0; - uma_zfree(zone_ext_refcnt, __DEVOLATILE(u_int *, - m->m_ext.ref_cnt)); - /* FALLTHROUGH */ - case EXT_EXTREF: - KASSERT(m->m_ext.ext_free != NULL, - ("%s: ext_free not set", __func__)); - (*(m->m_ext.ext_free))(m->m_ext.ext_arg1, - m->m_ext.ext_arg2); - break; - default: - KASSERT(m->m_ext.ext_type == 0, - ("%s: unknown ext_type", __func__)); - } - } - if (skipmbuf) - return; - - /* - * Free this mbuf back to the mbuf zone with all m_ext - * information purged. + * Release one more reference to this mbuf. If it is the last it + * will be freed. */ - m->m_ext.ext_buf = NULL; - m->m_ext.ext_free = NULL; - m->m_ext.ext_arg1 = NULL; - m->m_ext.ext_arg2 = NULL; - m->m_ext.ref_cnt = NULL; - m->m_ext.ext_size = 0; - m->m_ext.ext_type = 0; - m->m_flags &= ~M_EXT; - uma_zfree(zone_mbuf, m); + m_free(arg1); } -/* - * Attach the the cluster from *m to *n, set up m_ext in *n - * and bump the refcount of the cluster. - */ -static void -mb_dupcl(struct mbuf *n, struct mbuf *m) +void +m_ext_free_nop(void *arg1, void *arg2) { - KASSERT((m->m_flags & M_EXT) == M_EXT, ("%s: M_EXT not set", __func__)); - KASSERT(m->m_ext.ref_cnt != NULL, ("%s: ref_cnt not set", __func__)); - KASSERT((n->m_flags & M_EXT) == 0, ("%s: M_EXT set", __func__)); - if (*(m->m_ext.ref_cnt) == 1) - *(m->m_ext.ref_cnt) += 1; - else - atomic_add_int(m->m_ext.ref_cnt, 1); - n->m_ext.ext_buf = m->m_ext.ext_buf; - n->m_ext.ext_free = m->m_ext.ext_free; - n->m_ext.ext_arg1 = m->m_ext.ext_arg1; - n->m_ext.ext_arg2 = m->m_ext.ext_arg2; - n->m_ext.ext_size = m->m_ext.ext_size; - n->m_ext.ref_cnt = m->m_ext.ref_cnt; - n->m_ext.ext_type = m->m_ext.ext_type; - n->m_flags |= M_EXT; + /* Nothing to do. */ } /* @@ -357,11 +275,8 @@ m_sanity(struct mbuf *m0, int sanitize) * unrelated kernel memory before or after us is trashed. * No way to recover from that. */ - a = ((m->m_flags & M_EXT) ? m->m_ext.ext_buf : - ((m->m_flags & M_PKTHDR) ? (caddr_t)(&m->m_pktdat) : - (caddr_t)(&m->m_dat)) ); - b = (caddr_t)(a + (m->m_flags & M_EXT ? m->m_ext.ext_size : - ((m->m_flags & M_PKTHDR) ? MHLEN : MLEN))); + a = M_START(m); + b = (caddr_t)(a + m->m_size); if ((caddr_t)m->m_data < a) M_SANITY_ACTION("m_data outside mbuf data range left"); if ((caddr_t)m->m_data > b) @@ -532,6 +447,7 @@ m_copym(struct mbuf *m, int off0, int le struct mbuf *top; int copyhdr = 0; + CTR3(KTR_NET, "m_copym(%p, %d, %d)", m, off0, len); KASSERT(off >= 0, ("m_copym, negative off %d", off)); KASSERT(len >= 0, ("m_copym, negative len %d", len)); MBUF_CHECKSLEEP(wait); @@ -568,13 +484,16 @@ m_copym(struct mbuf *m, int off0, int le n->m_pkthdr.len = len; copyhdr = 0; } + /* + * If the copied data will fit in the space of standard + * mbuf prefer to copy rather than reference. + */ n->m_len = min(len, m->m_len - off); - if (m->m_flags & M_EXT) { - n->m_data = m->m_data + off; - mb_dupcl(n, m); + if (n->m_len > n->m_size) { + m_refm(n, m); + n->m_data += off; } else - bcopy(mtod(m, caddr_t)+off, mtod(n, caddr_t), - (u_int)n->m_len); + bcopy(mtod(m, caddr_t)+off, mtod(n, caddr_t), n->m_len); if (len != M_COPYALL) len -= n->m_len; off = 0; @@ -752,7 +671,9 @@ struct mbuf * m_copypacket(struct mbuf *m, int how) { struct mbuf *top, *n, *o; + int leading; + CTR1(KTR_NET, "m_copypacket(%p)", m); MBUF_CHECKSLEEP(how); MGET(n, how, m->m_type); top = n; @@ -762,13 +683,10 @@ m_copypacket(struct mbuf *m, int how) if (!m_dup_pkthdr(n, m, how)) goto nospace; n->m_len = m->m_len; - if (m->m_flags & M_EXT) { - n->m_data = m->m_data; - mb_dupcl(n, m); - } else { - n->m_data = n->m_pktdat + (m->m_data - m->m_pktdat ); - bcopy(mtod(m, char *), mtod(n, char *), n->m_len); - } + if (n->m_len > n->m_size) + m_refm(n, m); + else + bcopy(mtod(m, caddr_t), mtod(n, caddr_t), m->m_len); m = m->m_next; while (m) { @@ -780,13 +698,13 @@ m_copypacket(struct mbuf *m, int how) n = n->m_next; n->m_len = m->m_len; - if (m->m_flags & M_EXT) { - n->m_data = m->m_data; - mb_dupcl(n, m); + leading = M_LEADINGSPACE(m); + if (n->m_len + leading > n->m_size) { + m_refm(n, m); } else { - bcopy(mtod(m, char *), mtod(n, char *), n->m_len); + n->m_data = M_START(n) + leading; + bcopy(mtod(m, caddr_t), mtod(n, caddr_t), n->m_len); } - m = m->m_next; } return top; @@ -805,6 +723,7 @@ m_copydata(const struct mbuf *m, int off { u_int count; + CTR3(KTR_NET, "m_copydata(%p, %d, %d)", m, off, len); KASSERT(off >= 0, ("m_copydata, negative off %d", off)); KASSERT(len >= 0, ("m_copydata, negative len %d", len)); while (off > 0) { @@ -834,8 +753,9 @@ struct mbuf * m_dup(struct mbuf *m, int how) { struct mbuf **p, *top = NULL; - int remain, moff, nsize; + int remain, moff; + CTR1(KTR_NET, "m_dup(%p)", m); MBUF_CHECKSLEEP(how); /* Sanity check */ if (m == NULL) @@ -850,13 +770,10 @@ m_dup(struct mbuf *m, int how) struct mbuf *n; /* Get the next new mbuf */ - if (remain >= MINCLSIZE) { + if (remain >= MINCLSIZE) n = m_getcl(how, m->m_type, 0); - nsize = MCLBYTES; - } else { + else n = m_get(how, m->m_type); - nsize = MLEN; - } if (n == NULL) goto nospace; @@ -865,8 +782,6 @@ m_dup(struct mbuf *m, int how) m_free(n); goto nospace; } - if ((n->m_flags & M_EXT) == 0) - nsize = MHLEN; } n->m_len = 0; @@ -875,8 +790,8 @@ m_dup(struct mbuf *m, int how) p = &n->m_next; /* Copy data from original mbuf(s) into new mbuf */ - while (n->m_len < nsize && m != NULL) { - int chunk = min(nsize - n->m_len, m->m_len - moff); + while (n->m_len < n->m_size && m != NULL) { + int chunk = min(n->m_size - n->m_len, m->m_len - moff); bcopy(m->m_data + moff, n->m_data + n->m_len, chunk); moff += chunk; @@ -908,11 +823,13 @@ nospace: void m_cat(struct mbuf *m, struct mbuf *n) { + CTR2(KTR_NET, "m_cat(%p, %p)", m, n); + while (m->m_next) m = m->m_next; while (n) { if (m->m_flags & M_EXT || - m->m_data + m->m_len + n->m_len >= &m->m_dat[MLEN]) { + m->m_len + n->m_len > m->m_size) { /* just join the two chains */ m->m_next = n; return; @@ -932,6 +849,7 @@ m_adj(struct mbuf *mp, int req_len) struct mbuf *m; int count; + CTR2(KTR_NET, "m_adj(%p, %d)", mp, req_len); if ((m = mp) == NULL) return; if (len >= 0) { @@ -1014,13 +932,13 @@ m_pullup(struct mbuf *n, int len) int count; int space; + CTR2(KTR_NET, "m_pullup(%p, %d)", n, len); /* * If first mbuf has no cluster, and has room for len bytes * without shifting current data, pullup into it, * otherwise allocate a new mbuf to prepend to the chain. */ - if ((n->m_flags & M_EXT) == 0 && - n->m_data + len < &n->m_dat[MLEN] && n->m_next) { + if ((n->m_flags & M_EXT) == 0 && len < n->m_size && n->m_next) { if (n->m_len >= len) return (n); m = n; @@ -1036,7 +954,8 @@ m_pullup(struct mbuf *n, int len) if (n->m_flags & M_PKTHDR) M_MOVE_PKTHDR(m, n); } - space = &m->m_dat[MLEN] - (m->m_data + m->m_len); + /* XXX M_TRAILINGSPACE without M_WRITABLE */ + space = (M_START(m) + m->m_size) - (m->m_data + (m)->m_len); do { count = min(min(max(len, max_protohdr), space), n->m_len); bcopy(mtod(n, caddr_t), mtod(m, caddr_t) + m->m_len, @@ -1075,6 +994,7 @@ m_copyup(struct mbuf *n, int len, int ds struct mbuf *m; int count, space; + CTR2(KTR_NET, "m_copyup(%p, %d)", n, len); if (len > (MHLEN - dstoff)) goto bad; MGET(m, M_DONTWAIT, n->m_type); @@ -1084,7 +1004,8 @@ m_copyup(struct mbuf *n, int len, int ds if (n->m_flags & M_PKTHDR) M_MOVE_PKTHDR(m, n); m->m_data += dstoff; - space = &m->m_dat[MLEN] - (m->m_data + m->m_len); + /* XXX M_TRAILINGSPACE without M_WRITABLE */ + space = (M_START(m) + m->m_size) - (m->m_data + (m)->m_len); do { count = min(min(max(len, max_protohdr), space), n->m_len); memcpy(mtod(m, caddr_t) + m->m_len, mtod(n, caddr_t), @@ -1126,6 +1047,7 @@ m_split(struct mbuf *m0, int len0, int w struct mbuf *m, *n; u_int len = len0, remain; + CTR2(KTR_NET, "m_split(%p, %d)", m0, len0); MBUF_CHECKSLEEP(wait); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Sun May 10 15:37:50 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2B892106566B; Sun, 10 May 2009 15:37:50 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 154EC8FC0C; Sun, 10 May 2009 15:37:50 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AFbnlS061332; Sun, 10 May 2009 15:37:49 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AFbnlv061315; Sun, 10 May 2009 15:37:49 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905101537.n4AFbnlv061315@svn.freebsd.org> From: Rui Paulo Date: Sun, 10 May 2009 15:37:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191962 - in projects/mesh11s: . cddl/contrib/opensolaris/lib/libzpool/common/sys cddl/lib/libzpool contrib/bind9 contrib/cpio contrib/csup contrib/file contrib/file/Magdir contrib/file... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 15:37:50 -0000 Author: rpaulo Date: Sun May 10 15:37:48 2009 New Revision: 191962 URL: http://svn.freebsd.org/changeset/base/191962 Log: MFC 191746:191961 Added: projects/mesh11s/contrib/file/Magdir/wireless - copied unchanged from r191961, head/contrib/file/Magdir/wireless projects/mesh11s/contrib/file/Makefile.am-src - copied unchanged from r191961, head/contrib/file/Makefile.am-src projects/mesh11s/contrib/file/cdf.c - copied unchanged from r191961, head/contrib/file/cdf.c projects/mesh11s/contrib/file/cdf.h - copied unchanged from r191961, head/contrib/file/cdf.h projects/mesh11s/contrib/file/cdf_time.c - copied unchanged from r191961, head/contrib/file/cdf_time.c projects/mesh11s/contrib/file/encoding.c - copied unchanged from r191961, head/contrib/file/encoding.c projects/mesh11s/contrib/file/readcdf.c - copied unchanged from r191961, head/contrib/file/readcdf.c projects/mesh11s/lib/libc/gen/tcsetsid.3 - copied unchanged from r191961, head/lib/libc/gen/tcsetsid.3 projects/mesh11s/share/man/man4/iwnfw.4 - copied unchanged from r191961, head/share/man/man4/iwnfw.4 projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/amd64/opensolaris_atomic.S - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/common/atomic/amd64/opensolaris_atomic.S projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/ia64/opensolaris_atomic.S - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/common/atomic/ia64/opensolaris_atomic.S projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/sparc64/opensolaris_atomic.S - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/common/atomic/sparc64/opensolaris_atomic.S projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/zmod/opensolaris_crc32.c - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/uts/common/zmod/opensolaris_crc32.c projects/mesh11s/sys/contrib/dev/iwi/Makefile - copied unchanged from r191961, head/sys/contrib/dev/iwi/Makefile projects/mesh11s/sys/dev/bwi/ - copied from r191961, head/sys/dev/bwi/ projects/mesh11s/sys/fs/nfs/ - copied from r191961, head/sys/fs/nfs/ projects/mesh11s/sys/fs/nfsclient/ - copied from r191961, head/sys/fs/nfsclient/ projects/mesh11s/sys/fs/nfsserver/ - copied from r191961, head/sys/fs/nfsserver/ projects/mesh11s/sys/modules/bwi/ - copied from r191961, head/sys/modules/bwi/ Deleted: projects/mesh11s/contrib/file/.cvsignore projects/mesh11s/contrib/file/FREEBSD-upgrade projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/amd64/atomic.S projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/i386/atomic.S projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/ia64/atomic.S projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/sparc64/atomic.S projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/zmod/crc32.c projects/mesh11s/sys/compat/svr4/svr4_ttold.c projects/mesh11s/sys/compat/svr4/svr4_ttold.h projects/mesh11s/usr.bin/file/config.h Modified: projects/mesh11s/ (props changed) projects/mesh11s/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h projects/mesh11s/cddl/lib/libzpool/Makefile projects/mesh11s/contrib/bind9/ (props changed) projects/mesh11s/contrib/cpio/ (props changed) projects/mesh11s/contrib/csup/ (props changed) projects/mesh11s/contrib/file/ (props changed) projects/mesh11s/contrib/file/ChangeLog projects/mesh11s/contrib/file/Magdir/animation projects/mesh11s/contrib/file/Magdir/audio projects/mesh11s/contrib/file/Magdir/cafebabe projects/mesh11s/contrib/file/Magdir/compress projects/mesh11s/contrib/file/Magdir/elf projects/mesh11s/contrib/file/Magdir/epoc projects/mesh11s/contrib/file/Magdir/filesystems projects/mesh11s/contrib/file/Magdir/graphviz projects/mesh11s/contrib/file/Magdir/images projects/mesh11s/contrib/file/Magdir/jpeg projects/mesh11s/contrib/file/Magdir/mach projects/mesh11s/contrib/file/Magdir/macintosh projects/mesh11s/contrib/file/Magdir/msdos projects/mesh11s/contrib/file/Magdir/perl projects/mesh11s/contrib/file/Magdir/printer projects/mesh11s/contrib/file/Magdir/timezone projects/mesh11s/contrib/file/Magdir/xwindows projects/mesh11s/contrib/file/Makefile.am projects/mesh11s/contrib/file/Makefile.in projects/mesh11s/contrib/file/README projects/mesh11s/contrib/file/TODO projects/mesh11s/contrib/file/apprentice.c projects/mesh11s/contrib/file/apptype.c projects/mesh11s/contrib/file/ascmagic.c projects/mesh11s/contrib/file/asprintf.c (contents, props changed) projects/mesh11s/contrib/file/compress.c projects/mesh11s/contrib/file/config.h.in projects/mesh11s/contrib/file/configure projects/mesh11s/contrib/file/configure.ac projects/mesh11s/contrib/file/elfclass.h (props changed) projects/mesh11s/contrib/file/file.c projects/mesh11s/contrib/file/file.h projects/mesh11s/contrib/file/file.man projects/mesh11s/contrib/file/file_opts.h projects/mesh11s/contrib/file/fsmagic.c projects/mesh11s/contrib/file/funcs.c projects/mesh11s/contrib/file/getopt_long.c (contents, props changed) projects/mesh11s/contrib/file/is_tar.c projects/mesh11s/contrib/file/libmagic.man projects/mesh11s/contrib/file/magic.c projects/mesh11s/contrib/file/magic.h projects/mesh11s/contrib/file/magic.man projects/mesh11s/contrib/file/mygetopt.h (props changed) projects/mesh11s/contrib/file/patchlevel.h projects/mesh11s/contrib/file/print.c projects/mesh11s/contrib/file/readelf.c projects/mesh11s/contrib/file/softmagic.c projects/mesh11s/contrib/file/tests/Makefile.am (props changed) projects/mesh11s/contrib/file/tests/Makefile.in (props changed) projects/mesh11s/contrib/file/tests/test.c (props changed) projects/mesh11s/contrib/file/vasprintf.c (contents, props changed) projects/mesh11s/contrib/gdb/ (props changed) projects/mesh11s/contrib/gdtoa/ (props changed) projects/mesh11s/contrib/less/ (props changed) projects/mesh11s/contrib/less/COPYING projects/mesh11s/contrib/less/FREEBSD-upgrade projects/mesh11s/contrib/less/LICENSE projects/mesh11s/contrib/less/Makefile.in projects/mesh11s/contrib/less/NEWS projects/mesh11s/contrib/less/README projects/mesh11s/contrib/less/brac.c projects/mesh11s/contrib/less/ch.c projects/mesh11s/contrib/less/charset.c projects/mesh11s/contrib/less/charset.h projects/mesh11s/contrib/less/cmd.h projects/mesh11s/contrib/less/cmdbuf.c projects/mesh11s/contrib/less/command.c projects/mesh11s/contrib/less/configure projects/mesh11s/contrib/less/configure.ac projects/mesh11s/contrib/less/decode.c projects/mesh11s/contrib/less/defines.ds projects/mesh11s/contrib/less/defines.o2 projects/mesh11s/contrib/less/defines.o9 projects/mesh11s/contrib/less/defines.wn projects/mesh11s/contrib/less/edit.c projects/mesh11s/contrib/less/filename.c projects/mesh11s/contrib/less/forwback.c projects/mesh11s/contrib/less/funcs.h projects/mesh11s/contrib/less/help.c projects/mesh11s/contrib/less/ifile.c projects/mesh11s/contrib/less/input.c projects/mesh11s/contrib/less/install.sh projects/mesh11s/contrib/less/jump.c projects/mesh11s/contrib/less/less.h projects/mesh11s/contrib/less/less.hlp projects/mesh11s/contrib/less/less.man projects/mesh11s/contrib/less/less.nro projects/mesh11s/contrib/less/lessecho.c projects/mesh11s/contrib/less/lessecho.man projects/mesh11s/contrib/less/lessecho.nro projects/mesh11s/contrib/less/lesskey.c projects/mesh11s/contrib/less/lesskey.h projects/mesh11s/contrib/less/lesskey.man projects/mesh11s/contrib/less/lesskey.nro projects/mesh11s/contrib/less/lglob.h projects/mesh11s/contrib/less/line.c projects/mesh11s/contrib/less/linenum.c projects/mesh11s/contrib/less/lsystem.c projects/mesh11s/contrib/less/main.c projects/mesh11s/contrib/less/mark.c projects/mesh11s/contrib/less/mkhelp.c projects/mesh11s/contrib/less/optfunc.c projects/mesh11s/contrib/less/option.c projects/mesh11s/contrib/less/option.h projects/mesh11s/contrib/less/opttbl.c projects/mesh11s/contrib/less/os.c projects/mesh11s/contrib/less/output.c projects/mesh11s/contrib/less/pckeys.h projects/mesh11s/contrib/less/position.c projects/mesh11s/contrib/less/position.h projects/mesh11s/contrib/less/prompt.c projects/mesh11s/contrib/less/screen.c projects/mesh11s/contrib/less/scrsize.c projects/mesh11s/contrib/less/search.c projects/mesh11s/contrib/less/signal.c projects/mesh11s/contrib/less/tags.c projects/mesh11s/contrib/less/ttyin.c projects/mesh11s/contrib/less/version.c projects/mesh11s/contrib/libpcap/ (props changed) projects/mesh11s/contrib/ncurses/ (props changed) projects/mesh11s/contrib/netcat/ (props changed) projects/mesh11s/contrib/ntp/ (props changed) projects/mesh11s/contrib/openbsm/ (props changed) projects/mesh11s/contrib/openpam/ (props changed) projects/mesh11s/contrib/pf/ (props changed) projects/mesh11s/contrib/sendmail/ (props changed) projects/mesh11s/contrib/tcpdump/ (props changed) projects/mesh11s/contrib/top/ (props changed) projects/mesh11s/contrib/top/install-sh (props changed) projects/mesh11s/contrib/wpa/ (props changed) projects/mesh11s/crypto/openssh/ (props changed) projects/mesh11s/crypto/openssl/ (props changed) projects/mesh11s/gnu/usr.bin/patch/common.h projects/mesh11s/gnu/usr.bin/patch/inp.c projects/mesh11s/gnu/usr.bin/patch/patch.c projects/mesh11s/gnu/usr.bin/patch/pch.c projects/mesh11s/gnu/usr.bin/patch/pch.h projects/mesh11s/gnu/usr.bin/patch/util.c projects/mesh11s/lib/libarchive/archive_read_open_filename.c projects/mesh11s/lib/libc/ (props changed) projects/mesh11s/lib/libc/gen/Makefile.inc projects/mesh11s/lib/libc/gen/Symbol.map projects/mesh11s/lib/libc/gen/tcgetsid.3 projects/mesh11s/lib/libc/gen/termios.c projects/mesh11s/lib/libc/gen/ttyname.3 projects/mesh11s/lib/libc/stdio/asprintf.c (props changed) projects/mesh11s/lib/libc/stdlib/ptsname.3 projects/mesh11s/lib/libc/stdtime/ (props changed) projects/mesh11s/lib/libc/string/ffsll.c (props changed) projects/mesh11s/lib/libc/string/flsll.c (props changed) projects/mesh11s/lib/libc/string/wcpcpy.c (props changed) projects/mesh11s/lib/libc/string/wcpncpy.c (props changed) projects/mesh11s/lib/libmagic/Makefile projects/mesh11s/lib/libmagic/config.h projects/mesh11s/lib/libusb/ (props changed) projects/mesh11s/lib/libusb/libusb.3 (props changed) projects/mesh11s/lib/libusb/usb.h (props changed) projects/mesh11s/lib/libutil/ (props changed) projects/mesh11s/lib/libutil/login_tty.c projects/mesh11s/sbin/ (props changed) projects/mesh11s/sbin/ipfw/ (props changed) projects/mesh11s/share/man/man4/Makefile projects/mesh11s/share/man/man4/geom_fox.4 projects/mesh11s/share/man/man4/if_bridge.4 projects/mesh11s/share/man/man4/isp.4 projects/mesh11s/share/man/man4/mpt.4 projects/mesh11s/share/man/man4/smp.4 projects/mesh11s/share/man/man4/ubsec.4 projects/mesh11s/share/misc/bsd-family-tree projects/mesh11s/share/misc/committers-ports.dot projects/mesh11s/share/misc/committers-src.dot projects/mesh11s/share/zoneinfo/ (props changed) projects/mesh11s/sys/ (props changed) projects/mesh11s/sys/amd64/amd64/identcpu.c projects/mesh11s/sys/amd64/amd64/local_apic.c projects/mesh11s/sys/amd64/conf/DEFAULTS projects/mesh11s/sys/amd64/conf/GENERIC projects/mesh11s/sys/amd64/conf/NOTES projects/mesh11s/sys/amd64/conf/XENHVM projects/mesh11s/sys/amd64/include/clock.h projects/mesh11s/sys/amd64/include/pcpu.h projects/mesh11s/sys/amd64/include/xen/ (props changed) projects/mesh11s/sys/amd64/isa/clock.c projects/mesh11s/sys/amd64/linux32/linux.h projects/mesh11s/sys/amd64/linux32/linux32_sysvec.c projects/mesh11s/sys/arm/arm/cpufunc.c projects/mesh11s/sys/arm/arm/pmap.c projects/mesh11s/sys/arm/at91/at91_cfata.c projects/mesh11s/sys/arm/at91/if_ate.c projects/mesh11s/sys/arm/conf/AVILA projects/mesh11s/sys/arm/conf/BWCT projects/mesh11s/sys/arm/conf/CAMBRIA projects/mesh11s/sys/arm/conf/CRB projects/mesh11s/sys/arm/conf/DB-78XXX projects/mesh11s/sys/arm/conf/DB-88F5XXX projects/mesh11s/sys/arm/conf/DB-88F6XXX projects/mesh11s/sys/arm/conf/EP80219 projects/mesh11s/sys/arm/conf/GUMSTIX projects/mesh11s/sys/arm/conf/HL200 projects/mesh11s/sys/arm/conf/IQ31244 projects/mesh11s/sys/arm/conf/KB920X projects/mesh11s/sys/arm/conf/NSLU projects/mesh11s/sys/arm/conf/NSLU.hints projects/mesh11s/sys/arm/conf/SIMICS projects/mesh11s/sys/arm/conf/SKYEYE projects/mesh11s/sys/arm/include/pmap.h projects/mesh11s/sys/boot/uboot/lib/devicename.c projects/mesh11s/sys/boot/uboot/lib/disk.c projects/mesh11s/sys/boot/uboot/lib/libuboot.h projects/mesh11s/sys/cddl/compat/opensolaris/kern/opensolaris.c projects/mesh11s/sys/cddl/compat/opensolaris/kern/opensolaris_misc.c projects/mesh11s/sys/cddl/compat/opensolaris/sys/vnode.h projects/mesh11s/sys/cddl/contrib/opensolaris/common/acl/acl_common.c projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/vnode.c projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h projects/mesh11s/sys/compat/linux/linux_futex.c projects/mesh11s/sys/compat/linux/linux_ioctl.c projects/mesh11s/sys/compat/linux/linux_mib.c projects/mesh11s/sys/compat/linux/linux_mib.h projects/mesh11s/sys/compat/linux/linux_misc.c projects/mesh11s/sys/compat/linux/linux_socket.c projects/mesh11s/sys/compat/linux/linux_socket.h projects/mesh11s/sys/compat/linux/linux_stats.c projects/mesh11s/sys/compat/linux/linux_util.h projects/mesh11s/sys/compat/svr4/svr4_ioctl.c projects/mesh11s/sys/compat/svr4/svr4_ioctl.h projects/mesh11s/sys/compat/svr4/svr4_proto.h projects/mesh11s/sys/compat/svr4/svr4_stat.c projects/mesh11s/sys/compat/svr4/svr4_syscall.h projects/mesh11s/sys/compat/svr4/svr4_syscallnames.c projects/mesh11s/sys/compat/svr4/svr4_sysent.c projects/mesh11s/sys/conf/NOTES projects/mesh11s/sys/conf/files projects/mesh11s/sys/conf/files.i386 projects/mesh11s/sys/conf/files.pc98 projects/mesh11s/sys/conf/kern.post.mk projects/mesh11s/sys/conf/newvers.sh projects/mesh11s/sys/conf/options projects/mesh11s/sys/contrib/dev/iwi/ipw2200-bss.fw.uu projects/mesh11s/sys/contrib/dev/iwi/ipw2200-ibss.fw.uu projects/mesh11s/sys/contrib/dev/iwi/ipw2200-sniffer.fw.uu projects/mesh11s/sys/contrib/pf/ (props changed) projects/mesh11s/sys/dev/acpica/acpi_cpu.c projects/mesh11s/sys/dev/asr/asr.c projects/mesh11s/sys/dev/ata/ata-pci.h projects/mesh11s/sys/dev/ata/ata-usb.c (props changed) projects/mesh11s/sys/dev/ata/chipsets/ata-siliconimage.c projects/mesh11s/sys/dev/ath/ah_osdep.c projects/mesh11s/sys/dev/ath/ah_osdep.h projects/mesh11s/sys/dev/ath/ath_hal/ar5211/ar5211_interrupts.c projects/mesh11s/sys/dev/ath/ath_hal/ar5212/ar5212_interrupts.c projects/mesh11s/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c projects/mesh11s/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c projects/mesh11s/sys/dev/ath/if_ath.c projects/mesh11s/sys/dev/bce/if_bce.c projects/mesh11s/sys/dev/bce/if_bcereg.h projects/mesh11s/sys/dev/cxgb/ (props changed) projects/mesh11s/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c projects/mesh11s/sys/dev/ipw/if_ipw.c projects/mesh11s/sys/dev/iwi/if_iwi.c projects/mesh11s/sys/dev/iwi/if_iwivar.h projects/mesh11s/sys/dev/iwn/if_iwn.c projects/mesh11s/sys/dev/sound/pci/ich.c projects/mesh11s/sys/dev/sound/usb/uaudio.c (props changed) projects/mesh11s/sys/dev/sound/usb/uaudio.h (props changed) projects/mesh11s/sys/dev/sound/usb/uaudio_pcm.c (props changed) projects/mesh11s/sys/dev/sound/usb/uaudioreg.h (props changed) projects/mesh11s/sys/dev/ubsec/ubsec.c projects/mesh11s/sys/dev/ubsec/ubsecreg.h projects/mesh11s/sys/dev/usb/README.TXT (props changed) projects/mesh11s/sys/dev/usb/bluetooth/TODO.TXT (props changed) projects/mesh11s/sys/dev/usb/bluetooth/ng_ubt.c (props changed) projects/mesh11s/sys/dev/usb/bluetooth/ng_ubt_var.h (props changed) projects/mesh11s/sys/dev/usb/bluetooth/ubtbcmfw.c (props changed) projects/mesh11s/sys/dev/usb/controller/at91dci.c (props changed) projects/mesh11s/sys/dev/usb/controller/at91dci.h (props changed) projects/mesh11s/sys/dev/usb/controller/at91dci_atmelarm.c (props changed) projects/mesh11s/sys/dev/usb/controller/atmegadci.c (props changed) projects/mesh11s/sys/dev/usb/controller/atmegadci.h (props changed) projects/mesh11s/sys/dev/usb/controller/atmegadci_atmelarm.c (props changed) projects/mesh11s/sys/dev/usb/controller/ehci.c (contents, props changed) projects/mesh11s/sys/dev/usb/controller/ehci.h (props changed) projects/mesh11s/sys/dev/usb/controller/ehci_ixp4xx.c (props changed) projects/mesh11s/sys/dev/usb/controller/ehci_mbus.c (props changed) projects/mesh11s/sys/dev/usb/controller/ehci_pci.c (props changed) projects/mesh11s/sys/dev/usb/controller/musb_otg.c (props changed) projects/mesh11s/sys/dev/usb/controller/musb_otg.h (props changed) projects/mesh11s/sys/dev/usb/controller/musb_otg_atmelarm.c (props changed) projects/mesh11s/sys/dev/usb/controller/ohci.c (contents, props changed) projects/mesh11s/sys/dev/usb/controller/ohci.h (props changed) projects/mesh11s/sys/dev/usb/controller/ohci_atmelarm.c (props changed) projects/mesh11s/sys/dev/usb/controller/ohci_pci.c (props changed) projects/mesh11s/sys/dev/usb/controller/uhci.c (contents, props changed) projects/mesh11s/sys/dev/usb/controller/uhci.h (props changed) projects/mesh11s/sys/dev/usb/controller/uhci_pci.c (props changed) projects/mesh11s/sys/dev/usb/controller/usb_controller.c (props changed) projects/mesh11s/sys/dev/usb/controller/uss820dci.c (props changed) projects/mesh11s/sys/dev/usb/controller/uss820dci.h (props changed) projects/mesh11s/sys/dev/usb/controller/uss820dci_atmelarm.c (props changed) projects/mesh11s/sys/dev/usb/input/uhid.c (props changed) projects/mesh11s/sys/dev/usb/input/ukbd.c (props changed) projects/mesh11s/sys/dev/usb/input/ums.c (props changed) projects/mesh11s/sys/dev/usb/input/usb_rdesc.h (props changed) projects/mesh11s/sys/dev/usb/misc/udbp.c (props changed) projects/mesh11s/sys/dev/usb/misc/udbp.h (props changed) projects/mesh11s/sys/dev/usb/misc/ufm.c (props changed) projects/mesh11s/sys/dev/usb/net/if_aue.c (contents, props changed) projects/mesh11s/sys/dev/usb/net/if_auereg.h (props changed) projects/mesh11s/sys/dev/usb/net/if_axe.c (contents, props changed) projects/mesh11s/sys/dev/usb/net/if_axereg.h (props changed) projects/mesh11s/sys/dev/usb/net/if_cdce.c (contents, props changed) projects/mesh11s/sys/dev/usb/net/if_cdcereg.h (props changed) projects/mesh11s/sys/dev/usb/net/if_cue.c (contents, props changed) projects/mesh11s/sys/dev/usb/net/if_cuereg.h (props changed) projects/mesh11s/sys/dev/usb/net/if_kue.c (contents, props changed) projects/mesh11s/sys/dev/usb/net/if_kuefw.h (props changed) projects/mesh11s/sys/dev/usb/net/if_kuereg.h (props changed) projects/mesh11s/sys/dev/usb/net/if_rue.c (contents, props changed) projects/mesh11s/sys/dev/usb/net/if_ruereg.h (props changed) projects/mesh11s/sys/dev/usb/net/if_udav.c (contents, props changed) projects/mesh11s/sys/dev/usb/net/if_udavreg.h (props changed) projects/mesh11s/sys/dev/usb/net/usb_ethernet.c (contents, props changed) projects/mesh11s/sys/dev/usb/net/usb_ethernet.h (contents, props changed) projects/mesh11s/sys/dev/usb/quirk/usb_quirk.c (props changed) projects/mesh11s/sys/dev/usb/quirk/usb_quirk.h (props changed) projects/mesh11s/sys/dev/usb/serial/u3g.c (contents, props changed) projects/mesh11s/sys/dev/usb/serial/uark.c (props changed) projects/mesh11s/sys/dev/usb/serial/ubsa.c (props changed) projects/mesh11s/sys/dev/usb/serial/ubser.c (props changed) projects/mesh11s/sys/dev/usb/serial/uchcom.c (props changed) projects/mesh11s/sys/dev/usb/serial/ucycom.c (props changed) projects/mesh11s/sys/dev/usb/serial/ufoma.c (props changed) projects/mesh11s/sys/dev/usb/serial/uftdi.c (props changed) projects/mesh11s/sys/dev/usb/serial/uftdi_reg.h (props changed) projects/mesh11s/sys/dev/usb/serial/ugensa.c (props changed) projects/mesh11s/sys/dev/usb/serial/uipaq.c (props changed) projects/mesh11s/sys/dev/usb/serial/ulpt.c (props changed) projects/mesh11s/sys/dev/usb/serial/umct.c (props changed) projects/mesh11s/sys/dev/usb/serial/umodem.c (props changed) projects/mesh11s/sys/dev/usb/serial/umoscom.c (props changed) projects/mesh11s/sys/dev/usb/serial/uplcom.c (props changed) projects/mesh11s/sys/dev/usb/serial/usb_serial.c (props changed) projects/mesh11s/sys/dev/usb/serial/usb_serial.h (props changed) projects/mesh11s/sys/dev/usb/serial/uslcom.c (props changed) projects/mesh11s/sys/dev/usb/serial/uvisor.c (props changed) projects/mesh11s/sys/dev/usb/serial/uvscom.c (props changed) projects/mesh11s/sys/dev/usb/storage/rio500_usb.h (props changed) projects/mesh11s/sys/dev/usb/storage/umass.c (props changed) projects/mesh11s/sys/dev/usb/storage/urio.c (props changed) projects/mesh11s/sys/dev/usb/storage/ustorage_fs.c (contents, props changed) projects/mesh11s/sys/dev/usb/template/usb_template.c (props changed) projects/mesh11s/sys/dev/usb/template/usb_template.h (props changed) projects/mesh11s/sys/dev/usb/template/usb_template_cdce.c (props changed) projects/mesh11s/sys/dev/usb/template/usb_template_msc.c (props changed) projects/mesh11s/sys/dev/usb/template/usb_template_mtp.c (props changed) projects/mesh11s/sys/dev/usb/ufm_ioctl.h (props changed) projects/mesh11s/sys/dev/usb/usb.h (props changed) projects/mesh11s/sys/dev/usb/usb_bus.h (props changed) projects/mesh11s/sys/dev/usb/usb_busdma.c (props changed) projects/mesh11s/sys/dev/usb/usb_busdma.h (props changed) projects/mesh11s/sys/dev/usb/usb_cdc.h (props changed) projects/mesh11s/sys/dev/usb/usb_compat_linux.c (contents, props changed) projects/mesh11s/sys/dev/usb/usb_compat_linux.h (props changed) projects/mesh11s/sys/dev/usb/usb_controller.h (props changed) projects/mesh11s/sys/dev/usb/usb_core.c (props changed) projects/mesh11s/sys/dev/usb/usb_core.h (contents, props changed) projects/mesh11s/sys/dev/usb/usb_debug.c (props changed) projects/mesh11s/sys/dev/usb/usb_debug.h (props changed) projects/mesh11s/sys/dev/usb/usb_defs.h (props changed) projects/mesh11s/sys/dev/usb/usb_dev.c (props changed) projects/mesh11s/sys/dev/usb/usb_dev.h (props changed) projects/mesh11s/sys/dev/usb/usb_device.c (contents, props changed) projects/mesh11s/sys/dev/usb/usb_device.h (contents, props changed) projects/mesh11s/sys/dev/usb/usb_dynamic.c (props changed) projects/mesh11s/sys/dev/usb/usb_dynamic.h (props changed) projects/mesh11s/sys/dev/usb/usb_endian.h (props changed) projects/mesh11s/sys/dev/usb/usb_error.c (props changed) projects/mesh11s/sys/dev/usb/usb_error.h (props changed) projects/mesh11s/sys/dev/usb/usb_generic.c (contents, props changed) projects/mesh11s/sys/dev/usb/usb_generic.h (props changed) projects/mesh11s/sys/dev/usb/usb_handle_request.c (props changed) projects/mesh11s/sys/dev/usb/usb_handle_request.h (props changed) projects/mesh11s/sys/dev/usb/usb_hid.c (props changed) projects/mesh11s/sys/dev/usb/usb_hid.h (props changed) projects/mesh11s/sys/dev/usb/usb_hub.c (contents, props changed) projects/mesh11s/sys/dev/usb/usb_hub.h (props changed) projects/mesh11s/sys/dev/usb/usb_if.m (props changed) projects/mesh11s/sys/dev/usb/usb_ioctl.h (props changed) projects/mesh11s/sys/dev/usb/usb_lookup.c (props changed) projects/mesh11s/sys/dev/usb/usb_lookup.h (props changed) projects/mesh11s/sys/dev/usb/usb_mbuf.c (props changed) projects/mesh11s/sys/dev/usb/usb_mbuf.h (props changed) projects/mesh11s/sys/dev/usb/usb_mfunc.h (props changed) projects/mesh11s/sys/dev/usb/usb_msctest.c (props changed) projects/mesh11s/sys/dev/usb/usb_msctest.h (props changed) projects/mesh11s/sys/dev/usb/usb_parse.c (props changed) projects/mesh11s/sys/dev/usb/usb_parse.h (props changed) projects/mesh11s/sys/dev/usb/usb_pci.h (props changed) projects/mesh11s/sys/dev/usb/usb_process.c (props changed) projects/mesh11s/sys/dev/usb/usb_process.h (props changed) projects/mesh11s/sys/dev/usb/usb_request.c (props changed) projects/mesh11s/sys/dev/usb/usb_request.h (props changed) projects/mesh11s/sys/dev/usb/usb_revision.h (contents, props changed) projects/mesh11s/sys/dev/usb/usb_transfer.c (contents, props changed) projects/mesh11s/sys/dev/usb/usb_transfer.h (props changed) projects/mesh11s/sys/dev/usb/usb_util.c (props changed) projects/mesh11s/sys/dev/usb/usb_util.h (props changed) projects/mesh11s/sys/dev/usb/usbdevs (props changed) projects/mesh11s/sys/dev/usb/usbhid.h (props changed) projects/mesh11s/sys/dev/usb/wlan/if_rum.c (props changed) projects/mesh11s/sys/dev/usb/wlan/if_rumfw.h (props changed) projects/mesh11s/sys/dev/usb/wlan/if_rumreg.h (props changed) projects/mesh11s/sys/dev/usb/wlan/if_rumvar.h (props changed) projects/mesh11s/sys/dev/usb/wlan/if_ural.c (props changed) projects/mesh11s/sys/dev/usb/wlan/if_uralreg.h (props changed) projects/mesh11s/sys/dev/usb/wlan/if_uralvar.h (props changed) projects/mesh11s/sys/dev/usb/wlan/if_zyd.c (props changed) projects/mesh11s/sys/dev/usb/wlan/if_zydfw.h (props changed) projects/mesh11s/sys/dev/usb/wlan/if_zydreg.h (props changed) projects/mesh11s/sys/dev/wpi/if_wpi.c projects/mesh11s/sys/dev/xen/netfront/ (props changed) projects/mesh11s/sys/dev/xen/xenpci/ (props changed) projects/mesh11s/sys/geom/vinum/geom_vinum.c projects/mesh11s/sys/geom/vinum/geom_vinum.h projects/mesh11s/sys/geom/vinum/geom_vinum_events.c projects/mesh11s/sys/geom/vinum/geom_vinum_plex.c projects/mesh11s/sys/geom/vinum/geom_vinum_raid5.c projects/mesh11s/sys/geom/vinum/geom_vinum_rm.c projects/mesh11s/sys/geom/vinum/geom_vinum_subr.c projects/mesh11s/sys/geom/vinum/geom_vinum_var.h projects/mesh11s/sys/i386/bios/apm.c projects/mesh11s/sys/i386/conf/DEFAULTS projects/mesh11s/sys/i386/conf/GENERIC projects/mesh11s/sys/i386/conf/NOTES projects/mesh11s/sys/i386/conf/PAE projects/mesh11s/sys/i386/conf/XBOX projects/mesh11s/sys/i386/conf/XEN projects/mesh11s/sys/i386/i386/identcpu.c projects/mesh11s/sys/i386/i386/local_apic.c projects/mesh11s/sys/i386/ibcs2/ibcs2_ioctl.c projects/mesh11s/sys/i386/ibcs2/ibcs2_isc_syscall.h projects/mesh11s/sys/i386/ibcs2/ibcs2_isc_sysent.c projects/mesh11s/sys/i386/ibcs2/ibcs2_proto.h projects/mesh11s/sys/i386/ibcs2/ibcs2_socksys.c projects/mesh11s/sys/i386/ibcs2/ibcs2_syscall.h projects/mesh11s/sys/i386/ibcs2/ibcs2_sysent.c projects/mesh11s/sys/i386/ibcs2/ibcs2_xenix.h projects/mesh11s/sys/i386/ibcs2/ibcs2_xenix_syscall.h projects/mesh11s/sys/i386/ibcs2/ibcs2_xenix_sysent.c projects/mesh11s/sys/i386/ibcs2/syscalls.master projects/mesh11s/sys/i386/include/clock.h projects/mesh11s/sys/i386/isa/clock.c projects/mesh11s/sys/i386/linux/linux.h projects/mesh11s/sys/i386/linux/linux_sysvec.c projects/mesh11s/sys/i386/xen/clock.c projects/mesh11s/sys/i386/xen/mp_machdep.c projects/mesh11s/sys/ia64/conf/DEFAULTS projects/mesh11s/sys/ia64/conf/NOTES projects/mesh11s/sys/isa/atrtc.c projects/mesh11s/sys/isa/rtc.h projects/mesh11s/sys/kern/init_main.c projects/mesh11s/sys/kern/kern_exit.c projects/mesh11s/sys/kern/kern_fork.c projects/mesh11s/sys/kern/kern_jail.c projects/mesh11s/sys/kern/kern_linker.c projects/mesh11s/sys/kern/kern_malloc.c projects/mesh11s/sys/kern/kern_mib.c projects/mesh11s/sys/kern/kern_osd.c projects/mesh11s/sys/kern/kern_prot.c projects/mesh11s/sys/kern/kern_vimage.c projects/mesh11s/sys/kern/subr_kdb.c projects/mesh11s/sys/kern/subr_pcpu.c projects/mesh11s/sys/kern/sys_socket.c projects/mesh11s/sys/kern/tty.c projects/mesh11s/sys/kern/tty_ttydisc.c projects/mesh11s/sys/kern/uipc_socket.c projects/mesh11s/sys/kern/uipc_syscalls.c projects/mesh11s/sys/kern/uipc_usrreq.c projects/mesh11s/sys/kern/vfs_export.c projects/mesh11s/sys/kern/vfs_vnops.c projects/mesh11s/sys/legacy/dev/ata/ata-usb.c (props changed) projects/mesh11s/sys/legacy/dev/sound/usb/uaudio.c (props changed) projects/mesh11s/sys/legacy/dev/sound/usb/uaudio.h (props changed) projects/mesh11s/sys/legacy/dev/sound/usb/uaudio_pcm.c (props changed) projects/mesh11s/sys/legacy/dev/sound/usb/uaudioreg.h (props changed) projects/mesh11s/sys/legacy/dev/usb/ (props changed) projects/mesh11s/sys/legacy/dev/usb/ehci_ixp4xx.c (props changed) projects/mesh11s/sys/mips/conf/ADM5120 projects/mesh11s/sys/mips/conf/IDT projects/mesh11s/sys/mips/conf/MALTA projects/mesh11s/sys/mips/conf/QEMU projects/mesh11s/sys/mips/conf/SENTRY5 projects/mesh11s/sys/modules/dtrace/dtnfsclient/ (props changed) projects/mesh11s/sys/modules/ip6_mroute_mod/ (props changed) projects/mesh11s/sys/modules/ipmi/ipmi_linux/ (props changed) projects/mesh11s/sys/modules/linux/Makefile projects/mesh11s/sys/modules/opensolaris/Makefile projects/mesh11s/sys/modules/svr4/Makefile projects/mesh11s/sys/modules/zfs/Makefile projects/mesh11s/sys/net/bpf.c projects/mesh11s/sys/net/if.c projects/mesh11s/sys/net/if_clone.c projects/mesh11s/sys/net/if_ethersubr.c projects/mesh11s/sys/net/if_var.h projects/mesh11s/sys/net/netisr.c projects/mesh11s/sys/net/rtsock.c projects/mesh11s/sys/net80211/ieee80211.h projects/mesh11s/sys/net80211/ieee80211_adhoc.c projects/mesh11s/sys/net80211/ieee80211_ddb.c projects/mesh11s/sys/net80211/ieee80211_freebsd.c projects/mesh11s/sys/net80211/ieee80211_ht.h projects/mesh11s/sys/net80211/ieee80211_node.h projects/mesh11s/sys/net80211/ieee80211_proto.c projects/mesh11s/sys/net80211/ieee80211_superg.c projects/mesh11s/sys/net80211/ieee80211_superg.h projects/mesh11s/sys/net80211/ieee80211_var.h projects/mesh11s/sys/netgraph/netgraph.h projects/mesh11s/sys/netgraph/ng_base.c projects/mesh11s/sys/netinet/if_ether.c projects/mesh11s/sys/netinet/igmp.c projects/mesh11s/sys/netinet/in_rmx.c projects/mesh11s/sys/netinet/in_var.h projects/mesh11s/sys/netinet/ip_fw2.c projects/mesh11s/sys/netinet/ip_input.c projects/mesh11s/sys/netinet/sctp_crc32.c projects/mesh11s/sys/netinet/sctp_os_bsd.h projects/mesh11s/sys/netinet/sctp_uio.h projects/mesh11s/sys/netinet/tcp_hostcache.c projects/mesh11s/sys/netinet6/in6_mcast.c projects/mesh11s/sys/netinet6/in6_rmx.c projects/mesh11s/sys/netinet6/ip6_mroute.c projects/mesh11s/sys/netinet6/ip6_output.c projects/mesh11s/sys/netinet6/mld6.c projects/mesh11s/sys/netinet6/nd6.c projects/mesh11s/sys/netinet6/nd6_nbr.c projects/mesh11s/sys/netinet6/route6.c projects/mesh11s/sys/netipsec/xform_tcp.c projects/mesh11s/sys/nfsclient/nfs_kdtrace.c projects/mesh11s/sys/nfsclient/nfs_krpc.c projects/mesh11s/sys/nfsclient/nfs_vnops.c projects/mesh11s/sys/nfsserver/nfs_srvsubs.c projects/mesh11s/sys/nlm/nlm_advlock.c projects/mesh11s/sys/nlm/nlm_prot_impl.c projects/mesh11s/sys/pc98/cbus/clock.c projects/mesh11s/sys/pc98/conf/DEFAULTS projects/mesh11s/sys/pc98/conf/NOTES projects/mesh11s/sys/powerpc/conf/GENERIC projects/mesh11s/sys/powerpc/conf/MPC85XX projects/mesh11s/sys/powerpc/conf/NOTES projects/mesh11s/sys/sparc64/conf/GENERIC projects/mesh11s/sys/sys/buf_ring.h projects/mesh11s/sys/sys/ioctl.h projects/mesh11s/sys/sys/ioctl_compat.h projects/mesh11s/sys/sys/jail.h projects/mesh11s/sys/sys/kernel.h projects/mesh11s/sys/sys/param.h projects/mesh11s/sys/sys/proc.h projects/mesh11s/sys/sys/sysctl.h projects/mesh11s/sys/sys/termios.h projects/mesh11s/sys/sys/ucred.h projects/mesh11s/sys/sys/vimage.h projects/mesh11s/sys/ufs/ufs/ufs_extern.h projects/mesh11s/sys/vm/vm_fault.c projects/mesh11s/sys/vm/vnode_pager.c projects/mesh11s/sys/xen/evtchn.h (props changed) projects/mesh11s/sys/xen/hypervisor.h (props changed) projects/mesh11s/sys/xen/xen_intr.h (props changed) projects/mesh11s/tools/regression/lib/msun/test-conj.t (props changed) projects/mesh11s/tools/regression/usr.bin/pkill/pgrep-_g.t (props changed) projects/mesh11s/tools/regression/usr.bin/pkill/pgrep-_s.t (props changed) projects/mesh11s/tools/regression/usr.bin/pkill/pkill-_g.t (props changed) projects/mesh11s/tools/tools/ath/common/dumpregs.h (props changed) projects/mesh11s/tools/tools/ath/common/dumpregs_5210.c (props changed) projects/mesh11s/tools/tools/ath/common/dumpregs_5211.c (props changed) projects/mesh11s/tools/tools/ath/common/dumpregs_5212.c (props changed) projects/mesh11s/tools/tools/ath/common/dumpregs_5416.c (props changed) projects/mesh11s/usr.bin/calendar/calendars/calendar.freebsd projects/mesh11s/usr.bin/csup/ (props changed) projects/mesh11s/usr.bin/file/Makefile projects/mesh11s/usr.bin/kdump/mkioctls projects/mesh11s/usr.bin/procstat/ (props changed) projects/mesh11s/usr.sbin/dumpcis/cardinfo.h (props changed) projects/mesh11s/usr.sbin/dumpcis/cis.h (props changed) projects/mesh11s/usr.sbin/freebsd-update/freebsd-update.8 projects/mesh11s/usr.sbin/makefs/ffs/ffs_bswap.c (props changed) projects/mesh11s/usr.sbin/makefs/ffs/ffs_subr.c (props changed) projects/mesh11s/usr.sbin/makefs/ffs/ufs_bswap.h (props changed) projects/mesh11s/usr.sbin/makefs/getid.c (props changed) projects/mesh11s/usr.sbin/zic/ (props changed) Modified: projects/mesh11s/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h ============================================================================== --- projects/mesh11s/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Sun May 10 15:37:48 2009 (r191962) @@ -418,6 +418,7 @@ typedef struct vsecattr { #define VOP_FSYNC(vp, f, cr, ct) fsync((vp)->v_fd) #define VN_RELE(vp) vn_close(vp, 0, NULL, NULL) +#define VN_RELE_ASYNC(vp, taskq) vn_close(vp, 0, NULL, NULL) #define vn_lock(vp, type) #define VOP_UNLOCK(vp, type) Modified: projects/mesh11s/cddl/lib/libzpool/Makefile ============================================================================== --- projects/mesh11s/cddl/lib/libzpool/Makefile Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/cddl/lib/libzpool/Makefile Sun May 10 15:37:48 2009 (r191962) @@ -13,7 +13,7 @@ # ATOMIC_SRCS .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "ia64" .PATH: ${.CURDIR}/../../../sys/cddl/contrib/opensolaris/common/atomic/${MACHINE_ARCH} -ATOMIC_SRCS= atomic.S +ATOMIC_SRCS= opensolaris_atomic.S .else .PATH: ${.CURDIR}/../../../sys/cddl/compat/opensolaris/kern ATOMIC_SRCS= opensolaris_atomic.c Modified: projects/mesh11s/contrib/file/ChangeLog ============================================================================== --- projects/mesh11s/contrib/file/ChangeLog Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/ChangeLog Sun May 10 15:37:48 2009 (r191962) @@ -1,9 +1,105 @@ +2008-12-12 15:50 Christos Zoulas + + * fix initial offset calculation for non 4K sector files + + * add loop limits to avoid DoS attacks by constructing + looping sector references. + +2008-12-03 13:05 Christos Zoulas + + * fix memory botches on cdf file parsing. + + * exit with non-zero value for any error, not just for the last + file processed. + +2008-11-09 20:42 Charles Longeau + + * Replace all str{cpy,cat} functions with strl{cpy,cat} + * Ensure that strl{cpy,cat} are included in libmagic, + as needed. + +2008-11-06 18:18 Christos Zoulas + + * Handle ID3 format files. + +2008-11-06 23:00 Reuben Thomas + + * Fix --mime, --mime-type and --mime-encoding under new scheme. + + * Rename "ascii" to "text" and add "encoding" test. + + * Return a precise ("utf-16le" or "utf-16be") MIME charset for + UTF-16. + + * Fix error in comment caused by automatic indentation adding + words! + +2008-11-06 10:35 Christos Zoulas + + * use memchr instead of strchr because the string + might not be NUL terminated (Scott MacVicar) + +2008-11-03 07:31 Reuben Thomas + + * Fix a printf with a non-literal format string. + + * Fix formatting and punctuation of help for "--apple". + +2008-10-30 11:00 Reuben Thomas + + * Correct words counts in comments of struct magic. + + * Fix handle_annotation to allow both Apple and MIME types to be + printed, and to return correct code if MIME type is + printed (1, not 0) or if there's an error (-1 not 1). + + * Fix output of charset for MIME type (precede with semi-colon; + fixes Debian bug #501460). + + * Fix potential attacks via conversion specifications in magic + strings. + + * Add a FIXME for Debian bug #488562 (magic files should be + read in a defined order, by sorting the names). + +2008-10-18 16:45 Christos Zoulas + + * Added APPLE file creator/type + +2008-10-12 10:20 Christos Zoulas + + * Added CDF parsing + +2008-10-09 16:40 Christos Zoulas + + * filesystem and msdos patches (Joerg Jenderek) + +2008-10-09 13:20 Christos Zoulas + + * correct --exclude documentation issues: remove troff and fortran + and rename "token" to "tokens". (Randy McMurchy) + +2008-10-01 10:30 Christos Zoulas + + * Read ~/.magic in addition to the default magic file not instead + of, as documented in the man page. + +2008-09-10 21:30 Reuben Thomas + + * Comment out graphviz patterns, as they match too many files. + 2008-08-30 12:54 Christos Zoulas * Don't eat trailing \n in magic enties. * Cast defines to allow compilation using a c++ compiler. +2008-08-25 23:56 Reuben Thomas + + * Add text/x-lua MIME type for Lua scripts. + + * Escape { in regex in graphviz patterns. + 2008-07-26 00:59 Reuben Thomas * Add MIME types for special files. @@ -55,22 +151,22 @@ 2008-05-06 00:13 Robert Byrnes - * src/Makefile.am: + * src/Makefile.am: Ensure that getopt_long and [v]asprintf are included in libmagic, as needed. Remove unnecessary EXTRA_DIST. - * src/Makefile.in: + * src/Makefile.in: Rerun automake. - * src/vasprintf.c (dispatch): + * src/vasprintf.c (dispatch): Fix variable precision bug: be sure to step past '*'. - * src/vasprintf.c (core): + * src/vasprintf.c (core): Remove unreachable code. - * src/apprentice.c (set_test_type): + * src/apprentice.c (set_test_type): Add cast to avoid compiler warning. 2008-04-22 23:45 Christos Zoulas @@ -81,12 +177,12 @@ 2008-04-04 11:00 Christos Zoulas - * >= <= is not supported, so fix the magic and warn about it. + * >= <= is not supported, so fix the magic and warn about it. reported by: Thien-Thi Nguyen 2008-03-27 16:16 Robert Byrnes - * src/readelf.c (donote): + * src/readelf.c (donote): ELF core file command name/line bug fixes and enhancements: Try larger offsets first to avoid false matches @@ -112,7 +208,7 @@ * Clarify UTF-8 BOM message (Reuben Thomas) * Add HTML comment to token list in names.h - + 2007-02-04 15:50 Christos Zoulas * Debian fixes (Reuben Thomas) @@ -152,7 +248,7 @@ 2007-10-28 20:48 Christos Zoulas - * float and double magic support (Behan Webster) + * float and double magic support (Behan Webster) 2007-10-28 20:48 Christos Zoulas @@ -199,7 +295,7 @@ be easily parsed: mimetype [charset=character-set] [encoding=encoding-mime-type] - Remove spurious extra text from some MIME type printouts + Remove spurious extra text from some MIME type printouts (mostly in is_tar). Fix one case where -i produced nothing at all (for a 1-byte file, @@ -229,7 +325,7 @@ 2007-03-15 10:51 Christos Zoulas * fix fortran and nroff reversed tests (Dmitry V. Levin) - + * fix exclude option (Dmitry V. Levin) 2007-02-08 17:30 Christos Zoulas @@ -248,7 +344,7 @@ * Add exclude flag. 2007-01-18 05:29 Anon Ymous - + * Move the "type" detection code from parse() into its own table driven routine. This avoids maintaining multiple lists in file.h. @@ -256,7 +352,7 @@ * Add an optional conditional field (ust before the type field). This code is wrapped in "#ifdef ENABLE_CONDITIONALS" as it is likely to go away. - + 2007-01-16 23:24 Anon Ymous * Fix an initialization bug in check_mem(). @@ -327,7 +423,7 @@ 2006-12-08 16:32 Christos Zoulas * store and print the line number of the magic - entry for debugging. + entry for debugging. * if the magic entry did not print anything, don't treat it as a match @@ -342,7 +438,7 @@ file_softmagic. 2006-11-25 13:35 Christos Zoulas - + * Don't store the current offset in the magic struct, because it needs to be restored and it was not done properly all the time. Bug @@ -432,7 +528,7 @@ * Look for note sections in non executables. 2005-09-20 13:33 Christos Zoulas - + * Don't print SVR4 Style in core files multiple times (Radek Vokál) @@ -443,9 +539,9 @@ 2005-08-18 09:53 Christos Zoulas * Remove erroreous mention of /etc/magic in the file man page - This is gentoo bug 101639. (Mike Frysinger) + This is gentoo bug 101639. (Mike Frysinger) - * Cross-compile support and detection (Mike Frysinger) + * Cross-compile support and detection (Mike Frysinger) 2005-08-12 10:17 Christos Zoulas @@ -477,20 +573,20 @@ * Avoid NULL pointer dereference in time conversion. 2005-03-06 00:00 Joerg Walter - + * Add indirect magic offset support, and search mode. 2005-01-12 00:00 Stepan Kasal - * src/ascmagic.c (file_ascmagic): Fix three bugs about text files: - If a CRLF text file happens to have CR at offset HOWMANY - 1 - (currently 0xffff), it should not be counted as CR line - terminator. - If a line has length exactly MAXLINELEN, it should not yet be - treated as a ``very long line'', as MAXLINELEN is ``longest sane - line length''. - With CRLF, the line length was not computed correctly, and even - lines of length MAXLINELEN - 1 were treated as ``very long''. + * src/ascmagic.c (file_ascmagic): Fix three bugs about text files: + If a CRLF text file happens to have CR at offset HOWMANY - 1 + (currently 0xffff), it should not be counted as CR line + terminator. + If a line has length exactly MAXLINELEN, it should not yet be + treated as a ``very long line'', as MAXLINELEN is ``longest sane + line length''. + With CRLF, the line length was not computed correctly, and even + lines of length MAXLINELEN - 1 were treated as ``very long''. 2004-12-07 14:15 Christos Zoulas @@ -525,12 +621,12 @@ * Remove 3rd and 4th copyright clause; approved by Ian Darwin. - * Fix small memory leaks; caught by: Tamas Sarlos + * Fix small memory leaks; caught by: Tamas Sarlos 2004-07-24 16:33 Christos Zoulas - * magic.mime update Danny Milosavljevic + * magic.mime update Danny Milosavljevic * FreeBSD version update Oliver Eikemeier Modified: projects/mesh11s/contrib/file/Magdir/animation ============================================================================== --- projects/mesh11s/contrib/file/Magdir/animation Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/animation Sun May 10 15:37:48 2009 (r191962) @@ -325,6 +325,7 @@ # MP2, M1A 0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1 +!:mime audio/mpeg # rates >2 byte&0xF0 0x10 \b, 32 kbps >2 byte&0xF0 0x20 \b, 48 kbps @@ -399,6 +400,7 @@ # MP3, M2A 0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2 +!:mime audio/mpeg # rate >2 byte&0xF0 0x10 \b, 8 kbps >2 byte&0xF0 0x20 \b, 16 kbps @@ -790,3 +792,24 @@ 0 belong 0x00000001 >4 byte&0x1F 0x07 !:mime video/h264 + +# Type: Bink Video +# URL: http://wiki.multimedia.cx/index.php?title=3DBink_Container +# From: 2008-07-18 +0 string BIK Bink Video +>3 regex =[a-z] rev.%s +#>4 ulelong x size %d +>20 ulelong x \b, %d +>24 ulelong x \bx%d +>8 ulelong x \b, %d frames +>32 ulelong x at rate %d/ +>28 ulelong >1 \b%d +>40 ulelong =0 \b, no audio +>40 ulelong !0 \b, %d audio track +>>40 ulelong !1 \bs +# follow properties of the first audio track only +>>48 uleshort x %dHz +>>51 byte&0x20 0 mono +>>51 byte&0x20 !0 stereo +#>>51 byte&0x10 0 FFT +#>>51 byte&0x10 !0 DCT Modified: projects/mesh11s/contrib/file/Magdir/audio ============================================================================== --- projects/mesh11s/contrib/file/Magdir/audio Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/audio Sun May 10 15:37:48 2009 (r191962) @@ -286,43 +286,14 @@ # SGI SoundTrack 0 string _SGI_SoundTrack SGI SoundTrack project file # ID3 version 2 tags -0 string ID3 Audio file with ID3 version 2. -# ??? Normally such a file is an MP3 file, but this will give false positives -!:mime audio/mpeg ->3 ubyte <0xff \b%d -#>4 ubyte <0xff \b%d tag ->2584 string fLaC \b, FLAC encoding ->>2588 byte&0x7f >0 \b, unknown version ->>2588 byte&0x7f 0 \b -# some common bits/sample values ->>>2600 beshort&0x1f0 0x030 \b, 4 bit ->>>2600 beshort&0x1f0 0x050 \b, 6 bit ->>>2600 beshort&0x1f0 0x070 \b, 8 bit ->>>2600 beshort&0x1f0 0x0b0 \b, 12 bit ->>>2600 beshort&0x1f0 0x0f0 \b, 16 bit ->>>2600 beshort&0x1f0 0x170 \b, 24 bit ->>>2600 byte&0xe 0x0 \b, mono ->>>2600 byte&0xe 0x2 \b, stereo ->>>2600 byte&0xe 0x4 \b, 3 channels ->>>2600 byte&0xe 0x6 \b, 4 channels ->>>2600 byte&0xe 0x8 \b, 5 channels ->>>2600 byte&0xe 0xa \b, 6 channels ->>>2600 byte&0xe 0xc \b, 7 channels ->>>2600 byte&0xe 0xe \b, 8 channels -# some common sample rates ->>>2597 belong&0xfffff0 0x0ac440 \b, 44.1 kHz ->>>2597 belong&0xfffff0 0x0bb800 \b, 48 kHz ->>>2597 belong&0xfffff0 0x07d000 \b, 32 kHz ->>>2597 belong&0xfffff0 0x056220 \b, 22.05 kHz ->>>2597 belong&0xfffff0 0x05dc00 \b, 24 kHz ->>>2597 belong&0xfffff0 0x03e800 \b, 16 kHz ->>>2597 belong&0xfffff0 0x02b110 \b, 11.025 kHz ->>>2597 belong&0xfffff0 0x02ee00 \b, 12 kHz ->>>2597 belong&0xfffff0 0x01f400 \b, 8 kHz ->>>2597 belong&0xfffff0 0x177000 \b, 96 kHz ->>>2597 belong&0xfffff0 0x0fa000 \b, 64 kHz ->>>2601 byte&0xf >0 \b, >4G samples ->2584 string !fLaC \b, MP3 encoding +0 string ID3 Audio file with ID3 version 2 +>3 byte x \b.%d +>4 byte x \b.%d +>>5 byte &0x80 \b, unsynchronized frames +>>5 byte &0x40 \b, extended header +>>5 byte &0x20 \b, experimental +>>5 byte &0x10 \b, footer present +>(6.I) indirect x \b, contains: # NSF (NES sound file) magic 0 string NESM\x1a NES Sound File Modified: projects/mesh11s/contrib/file/Magdir/cafebabe ============================================================================== --- projects/mesh11s/contrib/file/Magdir/cafebabe Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/cafebabe Sun May 10 15:37:48 2009 (r191962) @@ -12,16 +12,18 @@ # (and use as a hack). Let's not use 18, because the Mach-O people # might add another one or two as time goes by... # -0 beshort 0xcafe ->2 beshort 0xbabe +0 belong 0xcafebabe !:mime application/x-java-applet ->>2 belong >30 compiled Java class data, ->>>6 beshort x version %d. ->>>4 beshort x \b%d ->>4 belong 1 Mach-O fat file with 1 architecture ->>4 belong >1 ->>>4 belong <20 Mach-O fat file with %ld architectures ->2 beshort 0xd00d JAR compressed with pack200, +>4 belong >30 compiled Java class data, +>>6 beshort x version %d. +>>4 beshort x \b%d + +0 belong 0xcafebabe +>4 belong 1 Mach-O fat file with 1 architecture +>4 belong >1 +>>4 belong <20 Mach-O fat file with %ld architectures + +0 belong 0xcafed00d JAR compressed with pack200, >>5 byte x version %d. >>4 byte x \b%d !:mime application/x-java-pack200 Modified: projects/mesh11s/contrib/file/Magdir/compress ============================================================================== --- projects/mesh11s/contrib/file/Magdir/compress Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/compress Sun May 10 15:37:48 2009 (r191962) @@ -11,6 +11,7 @@ # standard unix compress 0 string \037\235 compress'd data !:mime application/x-compress +!:apple LZIVZIVU >2 byte&0x80 >0 block compressed >2 byte&0x1f x %d bits @@ -76,6 +77,11 @@ !:mime application/x-bzip2 >3 byte >47 \b, block size = %c00k +# lzip +0 string LZIP lzip compressed data +!:mime application/x-lzip +>4 byte x \b, version: %d + # squeeze and crunch # Michael Haardt 0 beshort 0x76FF squeezed data, Modified: projects/mesh11s/contrib/file/Magdir/elf ============================================================================== --- projects/mesh11s/contrib/file/Magdir/elf Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/elf Sun May 10 15:37:48 2009 (r191962) @@ -143,11 +143,13 @@ >>18 leshort 91 picoJava, >>18 leshort 92 OpenRISC, >>18 leshort 93 ARC Cores Tangent-A5, ->>18 leshort 0x3426 OpenRISC (obsolete), ->>18 leshort 0x8472 OpenRISC (obsolete), >>18 leshort 94 Tensilica Xtensa, >>18 leshort 97 NatSemi 32k, >>18 leshort 106 Analog Devices Blackfin, +>>18 leshort 113 Altera Nios II, +>>18 leshort 0xae META, +>>18 leshort 0x3426 OpenRISC (obsolete), +>>18 leshort 0x8472 OpenRISC (obsolete), >>18 leshort 0x9026 Alpha (unofficial), >>20 lelong 0 invalid version >>20 lelong 1 version 1 Modified: projects/mesh11s/contrib/file/Magdir/epoc ============================================================================== --- projects/mesh11s/contrib/file/Magdir/epoc Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/epoc Sun May 10 15:37:48 2009 (r191962) @@ -1,10 +1,11 @@ - #------------------------------------------------------------------------------ -# Epoc 32 : file(1) magic for Epoc Documents [psion/osaris +# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1] # Stefan Praszalowicz (hpicollo@worldnet.fr) -#0 lelong 0x10000037 Epoc32 +# Useful information for improving this file can be found at: +# http://software.frodo.looijaard.name/psiconv/formats/Index.html +0 lelong 0x10000037 >4 lelong 0x1000006D ->>8 lelong 0x1000007F Word ->>8 lelong 0x10000088 Sheet ->>8 lelong 0x1000007D Sketch ->>8 lelong 0x10000085 TextEd +>>8 lelong 0x1000007F Psion Word +>>8 lelong 0x10000088 Psion Sheet +>>8 lelong 0x1000007D Psion Sketch +>>8 lelong 0x10000085 Psion TextEd Modified: projects/mesh11s/contrib/file/Magdir/filesystems ============================================================================== --- projects/mesh11s/contrib/file/Magdir/filesystems Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/filesystems Sun May 10 15:37:48 2009 (r191962) @@ -104,9 +104,32 @@ >>>346 string des\ Betriebssystems >>>>366 string Betriebssystem\ nicht\ vorhanden \b, Microsoft Windows XP MBR (german) >>>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x ->0x145 string Default:\ F \b, FREE-DOS MBR +#>0x145 string Default:\ F \b, FREE-DOS MBR +#>0x14B string Default:\ F \b, FREE-DOS 1.0 MBR +>0x145 search/7 Default:\ F \b, FREE-DOS MBR +#>>313 string F0\ .\ .\ . +#>>>322 string disk\ 1 +#>>>>382 string FAT3 >64 string no\ active\ partition\ found >>96 string read\ error\ while\ reading\ drive \b, FREE-DOS Beta 0.9 MBR +# Ranish Partition Manager http://www.ranish.com/part/ +>387 search/4 \0\ Error!\r +>>378 search/7 Virus! +>>>397 search/4 Booting\ +>>>>408 search/4 HD1/\0 \b, Ranish MBR ( +>>>>>416 string Writing\ changes... \b2.37 +>>>>>>438 ubyte x \b,0x%x dots +>>>>>>440 ubyte >0 \b,virus check +>>>>>>441 ubyte >0 \b,partition %c +#2.38,2.42,2.44 +>>>>>416 string !Writing\ changes... \b +>>>>>>418 ubyte 1 \bvirus check, +>>>>>>419 ubyte x \b0x%x seconds +>>>>>>420 ubyte&0x0F >0 \b,partition +>>>>>>>420 ubyte&0x0F <5 \b %x +>>>>>>>420 ubyte&0x0F 0Xf \b ask +>>>>>420 ubyte x \b) +# >271 string Operating\ system\ loading >>296 string error\r \b, SYSLINUX MBR (2.10) # http://www.acronis.de/ @@ -124,18 +147,20 @@ >0x40 string SBML # label with 11 characters of FAT 12 bit filesystem >>43 string SMART\ BTMGR ->>>430 string SBMK\ Bad!\r ->>>>3 string SBM \b, Smart Boot Manager ->>>>>6 string >\0 \b, version %s +>>>430 string SBMK\ Bad!\r \b, Smart Boot Manager +# OEM-ID not always "SBM" +#>>>>3 strings SBM +>>>>6 string >\0 \b, version %s >382 string XOSLLOADXCF \b, eXtended Operating System Loader >6 string LILO \b, LInux i386 boot LOader >>120 string LILO \b, version 22.3.4 SuSe >>172 string LILO \b, version 22.5.8 Debian -# updated by Joerg Jenderek +# updated by Joerg Jenderek at Oct 2008 # variables according to grub-0.97/stage1/stage1.S or # http://www.gnu.org/software/grub/manual/grub.html#Embedded-data # usual values are marked with comments to get only informations of strange GRUB loaders ->0 ulelong 0x009048EB +>342 search/60 \0Geom\0 +#>0 ulelong x %x=0x009048EB , 0x2a9048EB 0 >>0x41 ubyte <2 >>>0x3E ubyte >2 \b; GRand Unified Bootloader # 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 @@ -178,15 +203,14 @@ >3 string BCDL >>498 string BCDL\ \ \ \ BIN \b, Bootable CD Loader (1.50Z) # mbr partion table entries -# OEM-ID not Microsoft,SYSLINUX,or MTOOLs +# OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs >3 string !MS >>3 string !SYSLINUX >>>3 string !MTOOL +>>>>3 string !NEWLDR +>>>>>5 string !DOS # not FAT (32 bit) ->>>>82 string !FAT32 -#not IO.SYS ->>>>>472 string !IO\ \ \ \ \ \ SYS ->>>>>>480 string !IO\ \ \ \ \ \ SYS +>>>>>>82 string !FAT32 #not Linux kernel >>>>>>>514 string !HdrS #not BeOS @@ -272,6 +296,11 @@ >>>>>>>>>(1.b+11) ubyte 0xb >>>>>>>>>>(1.b+12) ubyte 0x56 >>>>>>>>>>(1.b+13) ubyte 0xb4 \b, mkdosfs boot message display +>214 string Please\ try\ to\ install\ FreeDOS\ \b, DOS Emulator boot message display +#>>244 string from\ dosemu-freedos-*-bin.tgz\r +#>>>170 string Sorry,\ could\ not\ load\ an\ +#>>>>195 string operating\ system.\r\n +# >103 string This\ is\ not\ a\ bootable\ disk.\ >>132 string Please\ insert\ a\ bootable\ >>>157 string floppy\ and\r\n @@ -374,12 +403,22 @@ >430 string Datentr\204ger\ entfernen\xFF\r\n >>454 string Medienfehler\xFF\r\n >>>469 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (4.german) ->>>>368 ubyte&0xDF >0 ->>>>>368 string x %-.5s ->>>>>>373 ubyte&0xDF >0 ->>>>>>>373 string x \b%-.3s ->>>>>376 ubyte&0xDF >0 ->>>>>>376 string x \b.%-.3s +>>>>379 string \0 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +>>>>>>376 ubyte&0xDF >0 +>>>>>>>376 string x \b.%-.3s +# variant +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# + #>3 string NTFS\ \ \ \ >389 string Fehler\ beim\ Lesen\ >>407 string des\ Datentr\204gers @@ -567,12 +606,27 @@ >>>489 string Any\ key\ to\ retry \b, DR-DOS Bootloader >>471 string Cannot\ load\ DOS\ >>487 string press\ key\ to\ retry \b, Open-DOS Bootloader +#?? >444 string KERNEL\ \ SYS >>314 string BOOT\ error! \b, FREE-DOS Bootloader >499 string KERNEL\ \ SYS >>305 string BOOT\ err!\0 \b, Free-DOS Bootloader >449 string KERNEL\ \ SYS >>319 string BOOT\ error! \b, FREE-DOS 0.5 Bootloader +# +>449 string Loading\ FreeDOS +>>0x1AF ulelong >0 \b, FREE-DOS 0.95,1.0 Bootloader +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +# +>331 string Error!.0 \b, FREE-DOS 1.0 bootloader +# >125 string Loading\ FreeDOS...\r >>311 string BOOT\ error!\r \b, FREE-DOS bootloader >>>441 ubyte&0xDF >0 @@ -706,13 +760,7 @@ #it also hangs with another message ("NF"). >>>>>492 string RENF \b, FAT (12 bit) >>>>>495 string RENF \b, FAT (16 bit) -# added by Joerg Jenderek -# http://syslinux.zytor.com/iso.php -0 ulelong 0x7c40eafa isolinux Loader -# http://syslinux.zytor.com/pxe.php -0 ulelong 0x007c05ea pxelinux Loader -0 ulelong 0x60669c66 pxelinux Loader -# loader end +# x86 bootloader end # updated by Joerg Jenderek at Sep 2007 >3 ubyte 0 #no active flag @@ -732,6 +780,7 @@ # older drives may use Near JuMP instruction E9 xx xx >0 lelong&0x009000EB 0x009000EB >0 lelong&0x000000E9 0x000000E9 +# minimal short forward jump found 03cx?? # maximal short forward jump is 07fx >1 ubyte <0xff \b, code offset 0x%x # mtools-3.9.8/msdos.h @@ -740,91 +789,92 @@ >>11 uleshort&0x000f x >>>11 uleshort <32769 >>>>11 uleshort >31 ->>>>>3 string >\0 \b, OEM-ID "%8.8s" +>>>>>21 ubyte&0xf0 0xF0 +>>>>>>3 string >\0 \b, OEM-ID "%8.8s" #http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC ->>>>>>8 string IHC \b cached by Windows 9M ->>>>>11 uleshort >512 \b, Bytes/sector %u -#>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual) ->>>>>11 uleshort <512 \b, Bytes/sector %u ->>>>>13 ubyte >1 \b, sectors/cluster %u -#>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies) ->>>>>14 uleshort >32 \b, reserved sectors %u -#>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32) -#>>>>>14 uleshort >1 \b, reserved sectors %u -#>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16) ->>>>>14 uleshort <1 \b, reserved sectors %u ->>>>>16 ubyte >2 \b, FATs %u -#>>>>>16 ubyte =2 \b, FATs %u (usual) ->>>>>16 ubyte =1 \b, FAT %u ->>>>>16 ubyte >0 ->>>>>17 uleshort >0 \b, root entries %u -#>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32) ->>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB) -#>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32) ->>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x -#>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy) ->>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x ->>>>>22 uleshort >0 \b, sectors/FAT %u -#>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32) ->>>>>26 ubyte >2 \b, heads %u -#>>>>>26 ubyte =2 \b, heads %u (usual floppy) ->>>>>26 ubyte =1 \b, heads %u +>>>>>>>8 string IHC \b cached by Windows 9M +>>>>>>11 uleshort >512 \b, Bytes/sector %u +#>>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual) +>>>>>>11 uleshort <512 \b, Bytes/sector %u +>>>>>>13 ubyte >1 \b, sectors/cluster %u +#>>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies) +>>>>>>14 uleshort >32 \b, reserved sectors %u +#>>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32) +#>>>>>>14 uleshort >1 \b, reserved sectors %u +#>>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16) +>>>>>>14 uleshort <1 \b, reserved sectors %u +>>>>>>16 ubyte >2 \b, FATs %u +#>>>>>>16 ubyte =2 \b, FATs %u (usual) +>>>>>>16 ubyte =1 \b, FAT %u +>>>>>>16 ubyte >0 +>>>>>>17 uleshort >0 \b, root entries %u +#>>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32) +>>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB) +#>>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32) +>>>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x +#>>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy) +>>>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x +>>>>>>22 uleshort >0 \b, sectors/FAT %u +#>>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32) +>>>>>>26 ubyte >2 \b, heads %u +#>>>>>>26 ubyte =2 \b, heads %u (usual floppy) +>>>>>>26 ubyte =1 \b, heads %u #skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk ->>>>>38 ubyte !0x70 ->>>>>>28 ulelong >0 \b, hidden sectors %u -#>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy) ->>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB) -#>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB) +>>>>>>38 ubyte !0x70 +>>>>>>>28 ulelong >0 \b, hidden sectors %u +#>>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy) +>>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB) +#>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB) # FAT<32 specific ->>>>>82 string !FAT32 -#>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk) -#>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy) ->>>>>>36 ubyte !0x80 ->>>>>>>36 ubyte !0 \b, physical drive 0x%x ->>>>>>37 ubyte >0 \b, reserved 0x%x -#>>>>>>37 ubyte =0 \b, reserved 0x%x ->>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>38 ubyte =0x29 ->>>>>>>39 ulelong x \b, serial number 0x%x ->>>>>>>43 string >>>>>>43 string >NO\ NAME \b, label: "%11.11s" ->>>>>>>43 string =NO\ NAME \b, unlabeled ->>>>>>54 string FAT \b, FAT ->>>>>>>54 string FAT12 \b (12 bit) ->>>>>>>54 string FAT16 \b (16 bit) +>>>>>>82 string !FAT32 +#>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk) +#>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy) +>>>>>>>36 ubyte !0x80 +>>>>>>>>36 ubyte !0 \b, physical drive 0x%x +>>>>>>>37 ubyte >0 \b, reserved 0x%x +#>>>>>>>37 ubyte =0 \b, reserved 0x%x +>>>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>38 ubyte =0x29 +>>>>>>>>39 ulelong x \b, serial number 0x%x +>>>>>>>>43 string >>>>>>>43 string >NO\ NAME \b, label: "%11.11s" +>>>>>>>>43 string =NO\ NAME \b, unlabeled +>>>>>>>54 string FAT \b, FAT +>>>>>>>>54 string FAT12 \b (12 bit) +>>>>>>>>54 string FAT16 \b (16 bit) # FAT32 specific ->>>>>82 string FAT32 \b, FAT (32 bit) ->>>>>>36 ulelong x \b, sectors/FAT %u ->>>>>>40 uleshort >0 \b, extension flags %u -#>>>>>>40 uleshort =0 \b, extension flags %u ->>>>>>42 uleshort >0 \b, fsVersion %u -#>>>>>>42 uleshort =0 \b, fsVersion %u (usual) ->>>>>>44 ulelong >2 \b, rootdir cluster %u -#>>>>>>44 ulelong =2 \b, rootdir cluster %u -#>>>>>>44 ulelong =1 \b, rootdir cluster %u ->>>>>>48 uleshort >1 \b, infoSector %u -#>>>>>>48 uleshort =1 \b, infoSector %u (usual) ->>>>>>48 uleshort <1 \b, infoSector %u ->>>>>>50 uleshort >6 \b, Backup boot sector %u -#>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual) ->>>>>>50 uleshort <6 \b, Backup boot sector %u ->>>>>>54 ulelong >0 \b, reserved1 0x%x ->>>>>>58 ulelong >0 \b, reserved2 0x%x ->>>>>>62 ulelong >0 \b, reserved3 0x%x +>>>>>>82 string FAT32 \b, FAT (32 bit) +>>>>>>>36 ulelong x \b, sectors/FAT %u +>>>>>>>40 uleshort >0 \b, extension flags %u +#>>>>>>>40 uleshort =0 \b, extension flags %u +>>>>>>>42 uleshort >0 \b, fsVersion %u +#>>>>>>>42 uleshort =0 \b, fsVersion %u (usual) +>>>>>>>44 ulelong >2 \b, rootdir cluster %u +#>>>>>>>44 ulelong =2 \b, rootdir cluster %u +#>>>>>>>44 ulelong =1 \b, rootdir cluster %u +>>>>>>>48 uleshort >1 \b, infoSector %u +#>>>>>>>48 uleshort =1 \b, infoSector %u (usual) +>>>>>>>48 uleshort <1 \b, infoSector %u +>>>>>>>50 uleshort >6 \b, Backup boot sector %u +#>>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual) +>>>>>>>50 uleshort <6 \b, Backup boot sector %u +>>>>>>>54 ulelong >0 \b, reserved1 0x%x +>>>>>>>58 ulelong >0 \b, reserved2 0x%x +>>>>>>>62 ulelong >0 \b, reserved3 0x%x # same structure as FAT1X ->>>>>>64 ubyte >0x80 \b, physical drive 0x%x -#>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk) ->>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x -#>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy) ->>>>>>65 ubyte >0 \b, reserved 0x%x ->>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>66 ubyte =0x29 ->>>>>>>67 ulelong x \b, serial number 0x%x ->>>>>>>71 string >>>>>71 string >NO\ NAME \b, label: "%11.11s" ->>>>>>71 string =NO\ NAME \b, unlabeled +>>>>>>>64 ubyte >0x80 \b, physical drive 0x%x +#>>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk) +>>>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x +#>>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy) +>>>>>>>65 ubyte >0 \b, reserved 0x%x +>>>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>66 ubyte =0x29 +>>>>>>>>67 ulelong x \b, serial number 0x%x +>>>>>>>>71 string >>>>>>71 string >NO\ NAME \b, label: "%11.11s" +>>>>>>>71 string =NO\ NAME \b, unlabeled ### FATs end >0x200 lelong 0x82564557 \b, BSD disklabel # FATX @@ -854,6 +904,13 @@ 0x18b string OS/2 OS/2 Boot Manager +# updated by Joerg Jenderek at Oct 2008!! +# http://syslinux.zytor.com/iso.php +0 ulelong 0x7c40eafa isolinux Loader +# http://syslinux.zytor.com/pxe.php +0 ulelong 0x007c05ea pxelinux Loader +0 ulelong 0x60669c66 pxelinux Loader + # added by Joerg Jenderek # In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or # grub-1.94/kern/i386/pc/startup.S @@ -1324,6 +1381,14 @@ >0x10024 belong x (blocksize %d, >0x10060 string >\0 lockproto %s) +# BTRFS +0x10040 string _BHRfS_M BTRFS Filesystem +>0x1012b string >\0 (label "%s", +>0x10090 lelong x sectorsize %d, +>0x10094 lelong x nodesize %d, +>0x10098 lelong x leafsize %d) + + # dvdisaster's .ecc # From: "Nelson A. de Oliveira" 0 string *dvdisaster* dvdisaster error correction file Modified: projects/mesh11s/contrib/file/Magdir/graphviz ============================================================================== --- projects/mesh11s/contrib/file/Magdir/graphviz Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/graphviz Sun May 10 15:37:48 2009 (r191962) @@ -1,7 +1,10 @@ - #------------------------------------------------------------------------------ # graphviz: file(1) magic for http://www.graphviz.org/ -0 regex/100 [\r\n\t\ ]*graph[\r\n\t\ ]*.*\\{ graphviz graph text -!:mime text/vnd.graphviz -0 regex/100 [\r\n\t\ ]*digraph[\r\n\t\ ]*.*\\{ graphviz digraph text -!:mime text/vnd.graphviz + +# FIXME: These patterns match too generally. For example, the first +# line matches a LaTeX file containing the word "graph" (with a { +# following later) and the second line matches this file. +#0 regex/100 [\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{ graphviz graph text +#!:mime text/vnd.graphviz +#0 regex/100 [\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{ graphviz digraph text +#!:mime text/vnd.graphviz Modified: projects/mesh11s/contrib/file/Magdir/images ============================================================================== --- projects/mesh11s/contrib/file/Magdir/images Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/images Sun May 10 15:37:48 2009 (r191962) @@ -110,6 +110,7 @@ # GIF 0 string GIF8 GIF image data !:mime image/gif +!:apple 8BIMGIFf >4 string 7a \b, version 8%s, >4 string 9a \b, version 8%s, >6 leshort >0 %hd x @@ -600,3 +601,7 @@ # Wavelet Scalar Quantization format used in gray-scale fingerprint images # From Tano M Fotang 0 string \xff\xa0\xff\xa8\x00 Wavelet Scalar Quantization image data + +# JPEG 2000 Code Stream Bitmap +# From Petr Splichal +0 string \xFF\x4F\xFF\x51\x00 JPEG-2000 Code Stream Bitmap data Modified: projects/mesh11s/contrib/file/Magdir/jpeg ============================================================================== --- projects/mesh11s/contrib/file/Magdir/jpeg Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/jpeg Sun May 10 15:37:48 2009 (r191962) @@ -10,6 +10,7 @@ # 0 beshort 0xffd8 JPEG image data !:mime image/jpeg +!:apple 8BIMJPEG !:strength +1 >6 string JFIF \b, JFIF standard # The following added by Erik Rossen 1999-09-06 Modified: projects/mesh11s/contrib/file/Magdir/mach ============================================================================== --- projects/mesh11s/contrib/file/Magdir/mach Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/mach Sun May 10 15:37:48 2009 (r191962) @@ -4,7 +4,7 @@ # Java ByteCode, so they are both handled in the file "cafebabe". # The "feedface" ones are handled herein. #------------------------------------------------------------ -0 lelong&0xfeffffff 0xfeedface Mach-O +0 lelong&0xfffffffe 0xfeedface Mach-O >0 byte 0xcf 64-bit >12 lelong 1 object >12 lelong 2 executable Modified: projects/mesh11s/contrib/file/Magdir/macintosh ============================================================================== --- projects/mesh11s/contrib/file/Magdir/macintosh Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/macintosh Sun May 10 15:37:48 2009 (r191962) @@ -11,6 +11,8 @@ # Stuffit archives are the de facto standard of compression for Macintosh # files obtained from most archives. (franklsm@tuns.ca) 0 string SIT! StuffIt Archive (data) +!:mime application/x-stuffit +!:apple SIT!SIT! >2 string x : %s 0 string SITD StuffIt Deluxe (data) >2 string x : %s @@ -20,6 +22,7 @@ # Newer StuffIt archives (grant@netbsd.org) 0 string StuffIt StuffIt Archive !:mime application/x-stuffit +!:apple SIT!SIT! #>162 string >0 : %s # Macintosh Applications and Installation binaries (franklsm@tuns.ca) Modified: projects/mesh11s/contrib/file/Magdir/msdos ============================================================================== --- projects/mesh11s/contrib/file/Magdir/msdos Sun May 10 11:05:22 2009 (r191961) +++ projects/mesh11s/contrib/file/Magdir/msdos Sun May 10 15:37:48 2009 (r191962) @@ -4,15 +4,15 @@ # # .BAT files (Daniel Quinlan, quinlan@yggdrasil.com) -# updated by Joerg Jenderek +# updated by Joerg Jenderek at Oct 2008 0 string @ ->1 string/cB \ echo\ off MS-DOS batch file text +>1 string/cB \ echo\ off DOS batch file text !:mime text/x-msdos-batch ->1 string/cB echo\ off MS-DOS batch file text +>1 string/cB echo\ off DOS batch file text !:mime text/x-msdos-batch ->1 string/cB rem\ MS-DOS batch file text +>1 string/cB rem\ DOS batch file text !:mime text/x-msdos-batch ->1 string/cB set\ MS-DOS batch file text +>1 string/cB set\ DOS batch file text !:mime text/x-msdos-batch @@ -285,8 +285,9 @@ # Uncommenting only the first two lines will cover about 2/3 of COM files, # but it isn't feasible to match all COM files since there must be at least # two dozen different one-byte "magics". -#0 byte 0xe9 DOS executable (COM) -#>0x1FE leshort 0xAA55 \b, boot code +# test too generic ? +0 byte 0xe9 DOS executable (COM) +>0x1FE leshort 0xAA55 \b, boot code >6 string SFX\ of\ LHarc (%s) 0 belong 0xffffffff DOS executable (device driver) #CMD640X2.SYS @@ -309,25 +310,38 @@ >>77 string >\x40 >>>77 string <\x5B >>>>77 string x \b, name: %.8s -#0 byte 0x8c DOS executable (COM) -# 0xeb conflicts with "sequent" magic -#0 byte 0xeb DOS executable (COM) -#>0x1FE leshort 0xAA55 \b, boot code -#>85 string UPX \b, UPX compressed -#>4 string \ $ARX \b, ARX self-extracting archive -#>4 string \ $LHarc \b, LHarc self-extracting archive -#>0x20e string SFX\ by\ LARC \b, LARC self-extracting archive +# test too generic ? +0 byte 0x8c DOS executable (COM) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Sun May 10 18:11:14 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DA689106566B; Sun, 10 May 2009 18:11:14 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C91F18FC13; Sun, 10 May 2009 18:11:14 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIBELn064560; Sun, 10 May 2009 18:11:14 GMT (envelope-from pho@svn.freebsd.org) Received: (from pho@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIBE28064558; Sun, 10 May 2009 18:11:14 GMT (envelope-from pho@svn.freebsd.org) Message-Id: <200905101811.n4AIBE28064558@svn.freebsd.org> From: Peter Holm Date: Sun, 10 May 2009 18:11:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191965 - projects/stress2/misc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 18:11:15 -0000 Author: pho Date: Sun May 10 18:11:14 2009 New Revision: 191965 URL: http://svn.freebsd.org/changeset/base/191965 Log: Added two more nullfs test scenarios Added: projects/stress2/misc/nullfs2.sh (contents, props changed) projects/stress2/misc/nullfs3.sh (contents, props changed) Added: projects/stress2/misc/nullfs2.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/nullfs2.sh Sun May 10 18:11:14 2009 (r191965) @@ -0,0 +1,52 @@ +#!/bin/sh + +# +# Copyright (c) 2009 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +# Simple nullfs test scenario + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +. ../default.cfg + +[ -d mp1 ] || mkdir mp1 + +mp=`pwd`/mp1 +mount | grep -q $mp && umount -f $mp + +mount -t nullfs `dirname $RUNDIR` $mp + +export RUNDIR=`pwd`/mp1/stressX +export runRUNTIME=10m +(cd ..; ./run.sh marcus.cfg) + +umount $mp + +mount | grep -q $mp && umount -f $mp + +rm -rf mp1 Added: projects/stress2/misc/nullfs3.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/nullfs3.sh Sun May 10 18:11:14 2009 (r191965) @@ -0,0 +1,55 @@ +#!/bin/sh + +# +# Copyright (c) 2009 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +# Test scenario by "Paul B. Mahol" + +# Caused: lock violation + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +. ../default.cfg + +[ -d mp1 ] || mkdir mp1 +[ -d $RUNDIR ] || mkdir $RUNDIR + +mp=`pwd`/mp1 +mount | grep -q $mp && umount -f $mp + +mount -t nullfs `dirname $RUNDIR` $mp + +cd $mp/stressX +whereis something +cd / + +umount $mp + +mount | grep -q $mp && umount -f $mp + +rm -rf $mp From owner-svn-src-projects@FreeBSD.ORG Sun May 10 18:17:27 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 032441065675; Sun, 10 May 2009 18:17:27 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E50008FC22; Sun, 10 May 2009 18:17:26 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIHQmU064783; Sun, 10 May 2009 18:17:26 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIHQ8v064781; Sun, 10 May 2009 18:17:26 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905101817.n4AIHQ8v064781@svn.freebsd.org> From: Rui Paulo Date: Sun, 10 May 2009 18:17:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191967 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 18:17:27 -0000 Author: rpaulo Date: Sun May 10 18:17:26 2009 New Revision: 191967 URL: http://svn.freebsd.org/changeset/base/191967 Log: Implement more peer link management. Peering now works more reliably. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_node.h Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Sun May 10 18:16:07 2009 (r191966) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Sun May 10 18:17:26 2009 (r191967) @@ -69,26 +69,18 @@ static int mesh_input(struct ieee80211_n static void mesh_recv_mgmt(struct ieee80211_node *, struct mbuf *, int, int, int, uint32_t); static void mesh_recv_action(struct ieee80211_node *, struct mbuf *); -static void mesh_peer_timeout(void *); +static __inline void mesh_peer_timeout_setup(struct ieee80211_node *); +static void mesh_peer_timeout_backoff(struct ieee80211_node *); +static void mesh_peer_timeout_cb(void *); +static __inline void mesh_peer_timeout_stop(struct ieee80211_node *); +static int mesh_verify_meshid(struct ieee80211vap *, + struct ieee80211_meshid_ie *); +static int mesh_verify_meshconf(struct ieee80211vap *, + struct ieee80211_meshconf_ie *); int ieee80211_mesh_retrytimeout = 40; /* 40 miliseconds */ #define RETRY_TIMEOUT msecs_to_ticks(ieee80211_mesh_retrytimeout) int ieee80211_mesh_maxretries = 60; -#define MESH_SET_TIMEOUT(xni) \ -do { \ - xni->ni_mtimerboff = RETRY_TIMEOUT; \ - callout_reset(&xni->ni_mtimer, RETRY_TIMEOUT, mesh_peer_timeout, xni); \ -} while (0) -/* - * Same as above but backoffs timer statisically 50%. - * XXX: wrong arc4random usage. - */ -#define MESH_SET_TIMEOUT_BACKOFF(xni) \ -do { \ - xni->ni_mtimerboff = xni->ni_mtimerboff + \ - ((arc4random() & 0xff) % xni->ni_mtimerboff); \ - callout_reset(&xni->ni_mtimer, RETRY_TIMEOUT, mesh_peer_timeout, xni); \ -} while (0) /* unalligned little endian access */ #define LE_READ_2(p) \ @@ -96,6 +88,16 @@ do { \ ((((const uint8_t *)(p))[0] ) | \ (((const uint8_t *)(p))[1] << 8))) + +static const char *nodemeshstates[] = { + "IDLE", + "OPEN SENT", + "OPEN RECEIVED", + "CONFIRM RECEIVED", + "ESTABLISHED", + "HOLDING" +}; + void ieee80211_mesh_attach(struct ieee80211com *ic) { @@ -421,14 +423,14 @@ mesh_recv_mgmt(struct ieee80211_node *ni ni->ni_peerstate = IEEE80211_NODE_MESH_OPENSNT; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, - ni, "peer link: switching to state %d", - ni->ni_peerstate); + ni, "peer link: switching to state %s", + nodemeshstates[ni->ni_peerstate]); args[0] = ni->ni_plid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, IEEE80211_ACTION_MESHPEERING_OPEN, args); ni->ni_mrcount = 0; - MESH_SET_TIMEOUT(ni); + mesh_peer_timeout_setup(ni); } if (ni != NULL) { IEEE80211_RSSI_LPF(ni->ni_avgrssi, rssi); @@ -590,7 +592,9 @@ mesh_recv_action(struct ieee80211_node * * Check if we agree on Mesh ID and Configuration. * XXX: TBD */ - if (!meshid || !meshconf || !meshpeer) { + if (mesh_verify_meshid(vap, meshid) || + mesh_verify_meshconf(vap, meshconf) || + !meshpeer) { IEEE80211_DISCARD(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, wh, NULL, "%s", "action frame not for our mesh"); @@ -598,10 +602,10 @@ mesh_recv_action(struct ieee80211_node * return; } - switch (ia->ia_category) { /* * Mesh Peer Link Management Finite State Machine handling. */ + switch (ia->ia_category) { case IEEE80211_ACTION_CAT_MESHPEERING: switch (ia->ia_action) { case IEEE80211_ACTION_MESHPEERING_OPEN: @@ -613,8 +617,8 @@ mesh_recv_action(struct ieee80211_node * ni->ni_peerstate = IEEE80211_NODE_MESH_OPENRCV; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, - ni, "peer link: switching to state %d", - ni->ni_peerstate); + ni, "peer link: switching to state %s", + nodemeshstates[ni->ni_peerstate]); ni->ni_llid = meshpeer->peer_llinkid; get_random_bytes(&ni->ni_plid, 2); args[0] = ni->ni_plid; @@ -628,7 +632,7 @@ mesh_recv_action(struct ieee80211_node * ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, IEEE80211_ACTION_MESHPEERING_CONFIRM, args); - /* XXX setup timeout1 */ + mesh_peer_timeout_setup(ni); break; case IEEE80211_NODE_MESH_OPENRCV: /* We received a duplicate open, confirm again. */ @@ -644,28 +648,28 @@ mesh_recv_action(struct ieee80211_node * ni->ni_llid = meshpeer->peer_llinkid; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, - ni, "peer link: switching to state %d", - ni->ni_peerstate); + ni, "peer link: switching to state %s", + nodemeshstates[ni->ni_peerstate]); args[0] = ni->ni_plid; args[1] = ni->ni_llid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, IEEE80211_ACTION_MESHPEERING_CONFIRM, args); - /* XXX setup timeout1 */ + /* NB: don't setup/clear any timeout */ break; case IEEE80211_NODE_MESH_CONFIRMRECV: ni->ni_peerstate = IEEE80211_NODE_MESH_ESTABLISHED; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, - ni, "peer link: switching to state %d", - ni->ni_peerstate); + ni, "peer link: switching to state %s", + nodemeshstates[ni->ni_peerstate]); ni->ni_llid = meshpeer->peer_llinkid; args[0] = ni->ni_plid; args[1] = ni->ni_llid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, IEEE80211_ACTION_MESHPEERING_CONFIRM, args); - /* clear timeoutC */ + mesh_peer_timeout_stop(ni); break; case IEEE80211_NODE_MESH_ESTABLISHED: args[0] = ni->ni_plid; @@ -694,15 +698,16 @@ mesh_recv_action(struct ieee80211_node * ni->ni_peerstate = IEEE80211_NODE_MESH_ESTABLISHED; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, - ni, "peer link: switching to state %d", - ni->ni_peerstate); + ni, "peer link: switching to state %s", + nodemeshstates[ni->ni_peerstate]); + mesh_peer_timeout_stop(ni); break; case IEEE80211_NODE_MESH_OPENSNT: ni->ni_peerstate = IEEE80211_NODE_MESH_CONFIRMRECV; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, - ni, "peer link: switching to state %d", - ni->ni_peerstate); + ni, "peer link: switching to state %s", + nodemeshstates[ni->ni_peerstate]); break; case IEEE80211_NODE_MESH_HOLDING: args[0] = ni->ni_llid; @@ -727,7 +732,7 @@ mesh_recv_action(struct ieee80211_node * switch (ni->ni_peerstate) { case IEEE80211_NODE_MESH_OPENRCV: ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING; - MESH_SET_TIMEOUT(ni); + mesh_peer_timeout_setup(ni); break; case IEEE80211_NODE_MESH_OPENSNT: break; @@ -744,11 +749,38 @@ mesh_recv_action(struct ieee80211_node * } } +static __inline void +mesh_peer_timeout_setup(struct ieee80211_node *ni) +{ + ni->ni_mtimerval = RETRY_TIMEOUT; + callout_reset(&ni->ni_mtimer, RETRY_TIMEOUT, mesh_peer_timeout_cb, ni); +} + +/* + * Same as above but backoffs timer statisically 50%. + */ +static void +mesh_peer_timeout_backoff(struct ieee80211_node *ni) +{ + uint32_t r; + + r = arc4random(); + ni->ni_mtimerval += r % ni->ni_mtimerval; + callout_reset(&ni->ni_mtimer, ni->ni_mtimerval, mesh_peer_timeout_cb, + ni); +} + +static __inline void +mesh_peer_timeout_stop(struct ieee80211_node *ni) +{ + callout_stop(&ni->ni_mtimer); +} + /* * Mesh Peer Link Management FSM timeout handling. */ static void -mesh_peer_timeout(void *arg) +mesh_peer_timeout_cb(void *arg) { struct ieee80211_node *ni = (struct ieee80211_node *)arg; struct ieee80211vap *vap = ni->ni_vap; @@ -756,8 +788,8 @@ mesh_peer_timeout(void *arg) IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, - ni, "mesh link timeout, state %d, retry counter %d", - ni->ni_peerstate, ni->ni_mrcount); + ni, "mesh link timeout, state %s, retry counter %d", + nodemeshstates[ni->ni_peerstate], ni->ni_mrcount); switch (ni->ni_peerstate) { case IEEE80211_NODE_MESH_OPENSNT: @@ -770,24 +802,70 @@ mesh_peer_timeout(void *arg) IEEE80211_ACTION_MESHPEERING_CLOSE, args); ni->ni_mrcount = 0; ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING; - MESH_SET_TIMEOUT(ni); + IEEE80211_NOTE(vap, + IEEE80211_MSG_MESH, + ni, "peer link: switching to state %s", + nodemeshstates[ni->ni_peerstate]); + mesh_peer_timeout_setup(ni); } else { args[0] = ni->ni_plid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, IEEE80211_ACTION_MESHPEERING_OPEN, args); ni->ni_mrcount++; - MESH_SET_TIMEOUT_BACKOFF(ni); + mesh_peer_timeout_backoff(ni); } break; case IEEE80211_NODE_MESH_CONFIRMRECV: - + if (ni->ni_mrcount == ieee80211_mesh_maxretries) { + args[0] = ni->ni_plid; + args[2] = IEEE80211_REASON_MESH_CONFIRM_TIMEOUT; + ieee80211_send_action(ni, + IEEE80211_ACTION_CAT_MESHPEERING, + IEEE80211_ACTION_MESHPEERING_CLOSE, args); + ni->ni_mrcount = 0; + ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING; + IEEE80211_NOTE(vap, + IEEE80211_MSG_MESH, + ni, "peer link: switching to state %s", + nodemeshstates[ni->ni_peerstate]); + mesh_peer_timeout_setup(ni); + } else { + ni->ni_mrcount++; + mesh_peer_timeout_setup(ni); + } break; case IEEE80211_NODE_MESH_HOLDING: + ni->ni_peerstate = IEEE80211_NODE_MESH_IDLE; + IEEE80211_NOTE(vap, + IEEE80211_MSG_MESH, + ni, "peer link: switching to state %s", + nodemeshstates[ni->ni_peerstate]); break; } } +static __inline int +mesh_verify_meshid(struct ieee80211vap *vap, + struct ieee80211_meshid_ie *meshid) +{ + if (meshid == NULL) + return 1; + + return memcmp(vap->iv_meshid, (uint8_t *)&meshid[1], vap->iv_meshidlen); +} + +static __inline int +mesh_verify_meshconf(struct ieee80211vap *vap, + struct ieee80211_meshconf_ie *meshconf) +{ + if (meshconf == NULL) + return 1; + + /* XXX TBD */ + return 0; +} + /* * Parse a MESH ID ie on station join. */ @@ -844,7 +922,7 @@ ieee80211_add_meshconf(uint8_t *frm, str .conf_cap = 1, /* XXX */ }; - KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a mbss vap")); + KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a MBSS vap")); memcpy(frm, &ie, sizeof(ie)); return frm + sizeof(ie); @@ -885,8 +963,10 @@ ieee80211_add_meshpeer(uint8_t *frm, uin break; } return frm; -#undef ADDSHORT +#undef ADDSHORT } + + void ieee80211_create_mbss(struct ieee80211vap *vap, struct ieee80211_channel *chan) { @@ -894,7 +974,7 @@ ieee80211_create_mbss(struct ieee80211va struct ieee80211_node *ni; IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH, - "%s: creating mbss on channel %u\n", __func__, + "%s: creating MBSS on channel %u\n", __func__, ieee80211_chan2ieee(ic, chan)); ni = ieee80211_alloc_node(&ic->ic_sta, vap, vap->iv_myaddr); Modified: projects/mesh11s/sys/net80211/ieee80211_node.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_node.h Sun May 10 18:16:07 2009 (r191966) +++ projects/mesh11s/sys/net80211/ieee80211_node.h Sun May 10 18:17:26 2009 (r191967) @@ -187,7 +187,7 @@ struct ieee80211_node { uint16_t ni_plid; /* peer link ID */ struct callout ni_mtimer; /* mesh timer */ uint8_t ni_mrcount; /* mesh retry counter */ - uint8_t ni_mtimerboff; /* mesh timer backoff value */ + uint8_t ni_mtimerval; /* mesh timer value */ /* 11n state */ uint16_t ni_htcap; /* HT capabilities */ From owner-svn-src-projects@FreeBSD.ORG Sun May 10 18:19:10 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BC22C1065670; Sun, 10 May 2009 18:19:10 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AB14B8FC19; Sun, 10 May 2009 18:19:10 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIJAEL064857; Sun, 10 May 2009 18:19:10 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIJAAN064856; Sun, 10 May 2009 18:19:10 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905101819.n4AIJAAN064856@svn.freebsd.org> From: Rui Paulo Date: Sun, 10 May 2009 18:19:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191968 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 18:19:11 -0000 Author: rpaulo Date: Sun May 10 18:19:10 2009 New Revision: 191968 URL: http://svn.freebsd.org/changeset/base/191968 Log: Fix direction matching on input path. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Sun May 10 18:17:26 2009 (r191967) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Sun May 10 18:19:10 2009 (r191968) @@ -267,7 +267,7 @@ mesh_input(struct ieee80211_node *ni, st case IEEE80211_FC0_TYPE_MGT: vap->iv_stats.is_rx_mgmt++; IEEE80211_NODE_STAT(ni, rx_mgmt); - if (dir != IEEE80211_FC1_DIR_NODS) { + if (dir != IEEE80211_FC1_DIR_DSTODS) { IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh, "data", "incorrect dir 0x%x", dir); vap->iv_stats.is_rx_wrongdir++; From owner-svn-src-projects@FreeBSD.ORG Sun May 10 18:19:17 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7F2E2106573A; Sun, 10 May 2009 18:19:16 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4EB7D8FC1A; Sun, 10 May 2009 18:19:16 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIJGl5064896; Sun, 10 May 2009 18:19:16 GMT (envelope-from pho@svn.freebsd.org) Received: (from pho@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIJGWT064893; Sun, 10 May 2009 18:19:16 GMT (envelope-from pho@svn.freebsd.org) Message-Id: <200905101819.n4AIJGWT064893@svn.freebsd.org> From: Peter Holm Date: Sun, 10 May 2009 18:19:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191969 - projects/stress2/misc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 18:19:18 -0000 Author: pho Date: Sun May 10 18:19:16 2009 New Revision: 191969 URL: http://svn.freebsd.org/changeset/base/191969 Log: Added test scenarios for page faults while doing filesystem data move to or from userspace during read(2) and write(2) Added: projects/stress2/misc/datamove.sh (contents, props changed) projects/stress2/misc/datamove2.sh (contents, props changed) projects/stress2/misc/datamove3.sh (contents, props changed) Added: projects/stress2/misc/datamove.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/datamove.sh Sun May 10 18:19:16 2009 (r191969) @@ -0,0 +1,213 @@ +#!/bin/sh + +# +# Copyright (c) 2009 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +# There is a well-known problem in FreeBSD, caused by allowing page faults +# while doing filesystem data move to or from userspace during read(2) and +# write(2). The issue is that if the userspace address being read or write +# from/to is backed by the mapping of the same file we are doing i/o to, +# we deadlock. + +# Test scenario by ups + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +here=`pwd` +cd /tmp +sed '1,/^EOF/d' < $here/$0 > dl.c +cc -o dl -Wall dl.c +rm -f dl.c + +n=5 +old=`sysctl vm.old_msync | awk '{print $NF}'` +sysctl vm.old_msync=1 +for i in `jot $n`; do + mkdir -p /tmp/dl.dir.$i + cd /tmp/dl.dir.$i + /tmp/dl & +done +cd /tmp +for i in `jot $n`; do + wait +done +for i in `jot $n`; do + rm -rf /tmp/dl.dir.$i +done +sysctl vm.old_msync=$old + +rm -rf /tmp/dl +exit 0 +EOF +#include +#include +#include +#include +#include +#include +#include + + +int prepareFile(char* filename,int* fdp); +int mapBuffer(char** bufferp,int fd1,int fd2); +int startIO(int fd,char *buffer); + +int pagesize; + +#define FILESIZE (32*1024) +char wbuffer[FILESIZE]; + +/* Create a FILESIZE sized file - then remove file data from the cache*/ +int prepareFile(char* filename,int* fdp) +{ + int fd; + int len; + int status; + void *addr; + + fd = open(filename,O_CREAT | O_TRUNC | O_RDWR,S_IRWXU); + if (fd == -1) + { + perror("Creating file"); + return fd; + } + + len = write(fd,wbuffer,FILESIZE); + if (len < 0) + { + perror("Write failed"); + return 1; + } + + status = fsync(fd); + if (status != 0) + { + perror("fsync failed"); + return 1; + } + + addr = mmap(NULL,FILESIZE, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0); + if (addr == MAP_FAILED) + { + perror("Mmap failed"); + return 1; + } + + status = msync(addr,FILESIZE,MS_INVALIDATE | MS_SYNC); + if (status != 0) + { + perror("Msync failed"); + return 1; + } + + munmap(addr,FILESIZE); + + *fdp = fd; + return 0; +} + + +/* mmap a 2 page buffer - first page is from fd1, second page from fd2 */ +int mapBuffer(char** bufferp,int fd1,int fd2) +{ + void* addr; + char *buffer; + + addr = mmap(NULL,pagesize*2, PROT_READ | PROT_WRITE , MAP_SHARED, fd1, 0); + if (addr == MAP_FAILED) + { + perror("Mmap failed"); + return 1; + } + + buffer = addr; + addr = mmap(buffer + pagesize,pagesize, PROT_READ | PROT_WRITE , MAP_FIXED | +MAP_SHARED, fd2, 0); + + if (addr == MAP_FAILED) + { + perror("Mmap2 failed"); + return 1; + } + *bufferp = buffer; + return 0; +} + + +int startIO(int fd,char *buffer) +{ + ssize_t len; + len = write(fd,buffer,2*pagesize); + if (len == -1) + { + perror("write failed"); + return 1; + } + return 0; +} + + +int main(int argc,char *argv[],char *envp[]) +{ + + int fdA,fdB,fdDelayA,fdDelayB; + int status; + char *bufferA,*bufferB; + pid_t pid; + + pagesize = getpagesize(); + + if ((prepareFile("A",&fdA)) + || (prepareFile("B",&fdB)) + || (prepareFile("DelayA",&fdDelayA)) + || (prepareFile("DelayB",&fdDelayB)) + || (mapBuffer(&bufferA,fdDelayA,fdB)) + || (mapBuffer(&bufferB,fdDelayB,fdA))) + exit(1); + + pid = fork(); + + if (pid == 0) + { + status = startIO(fdA,bufferA); + exit(status); + } + + if (pid == -1) + { + exit(1); + } + status = startIO(fdB,bufferB); + exit(status); + +} + + + + + Added: projects/stress2/misc/datamove2.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/datamove2.sh Sun May 10 18:19:16 2009 (r191969) @@ -0,0 +1,210 @@ +#!/bin/sh + +# +# Copyright (c) 2009 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +# Variation of the datamove.sh scenario by not using "sysctl vm.old_msync=1" + +# Deadlock seen + +# Test scenario by ups + +here=`pwd` +cd /tmp +sed '1,/^EOF/d' < $here/$0 > dl.c +cc -o dl -Wall dl.c +rm -f dl.c + +for i in `jot 3`; do + $here/../testcases/swap/swap -t 10m -i 200 -h & + /tmp/dl + ps | grep swap | grep -v swap | awk '{print $1}' | xargs kill +done +rm -rf /tmp/dl +exit 0 +EOF +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +int prepareFile(char *filename, int *fdp); +int mapBuffer (char **bufferp, int fd1, int fd2); +int startIO (int fd, char *buffer); + +int pagesize; + +#define FILESIZE (32*1024) +char wbuffer [FILESIZE]; + +/* Create a FILESIZE sized file - then remove file data from the cache */ +int +prepareFile(char *filename, int *fdp) +{ + int fd; + int len; + int status; + void *addr; + + fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, S_IRWXU); + if (fd == -1) { + perror("Creating file"); + return fd; + } + len = write(fd, wbuffer, FILESIZE); + if (len < 0) { + perror("Write failed"); + return 1; + } + status = fsync(fd); + if (status != 0) { + perror("fsync failed"); + return 1; + } + addr = mmap(NULL, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (addr == MAP_FAILED) { + perror("Mmap failed"); + return 1; + } + status = msync(addr, FILESIZE, MS_INVALIDATE | MS_SYNC); + if (status != 0) { + perror("Msync failed"); + return 1; + } + if (munmap(addr, FILESIZE) == -1) { + perror("munmap failed"); + return 1; + } + + *fdp = fd; + return 0; +} + + +/* mmap a 2 page buffer - first page is from fd1, second page from fd2 */ +int +mapBuffer(char **bufferp, int fd1, int fd2) +{ + void *addr; + char *buffer; + + addr = mmap(NULL, pagesize * 2, PROT_READ | PROT_WRITE, MAP_SHARED, fd1, 0); + if (addr == MAP_FAILED) { + perror("Mmap failed"); + return 1; + } + buffer = addr; + addr = mmap(buffer + pagesize, pagesize, PROT_READ | PROT_WRITE, MAP_FIXED | + MAP_SHARED, fd2, 0); + + if (addr == MAP_FAILED) { + perror("Mmap2 failed"); + return 1; + } + *bufferp = buffer; + return 0; +} + +void +unmapBuffer(char *bufferp) +{ + if (munmap(bufferp, pagesize * 2) == -1) + err(1, "unmap 1. buffer"); + if (munmap(bufferp + pagesize * 2, pagesize * 2) == -1) + err(1, "unmap 2. buffer"); +} + +int +startIO(int fd, char *buffer) +{ + ssize_t len; + + len = write(fd, buffer, 2 * pagesize); + if (len == -1) { + perror("write failed"); + return 1; + } + return 0; +} + + +int +main(int argc, char *argv[], char *envp[]) +{ + + int fdA, fdB, fdDelayA, fdDelayB; + int status; + int i; + char *bufferA, *bufferB; + pid_t pid; + + pagesize = getpagesize(); + + for (i = 0; i < 1000; i++) { + if ((prepareFile("A", &fdA)) + || (prepareFile("B", &fdB)) + || (prepareFile("DelayA", &fdDelayA)) + || (prepareFile("DelayB", &fdDelayB)) + || (mapBuffer(&bufferA, fdDelayA, fdB)) + || (mapBuffer(&bufferB, fdDelayB, fdA))) + exit(1); + + pid = fork(); + + if (pid == 0) { + status = startIO(fdA, bufferA); + exit(status); + } + if (pid == -1) { + perror("fork"); + exit(1); + } + status = startIO(fdB, bufferB); + if (wait(&status) == -1) + err(1, "wait"); + + close(fdA); + close(fdB); + close(fdDelayA); + close(fdDelayB); + unmapBuffer(bufferA); + unmapBuffer(bufferB); + unlink("A"); + unlink("B"); + unlink("DelayA"); + unlink("DelayB"); + } + exit(status); + +} Added: projects/stress2/misc/datamove3.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/datamove3.sh Sun May 10 18:19:16 2009 (r191969) @@ -0,0 +1,219 @@ +#!/bin/sh + +# +# Copyright (c) 2009 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +# Threaded variation of datamove.sh + +# Based on a test scenario by ups and suggestions by kib + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +here=`pwd` +cd /tmp +sed '1,/^EOF/d' < $here/$0 > dl.c +cc -o dl -Wall dl.c -lpthread +rm -f dl.c + +n=5 +old=`sysctl vm.old_msync | awk '{print $NF}'` +sysctl vm.old_msync=1 +for i in `jot $n`; do + mkdir -p /tmp/dl.dir.$i + cd /tmp/dl.dir.$i + /tmp/dl & +done +cd /tmp +for i in `jot $n`; do + wait +done +for i in `jot $n`; do + rm -rf /tmp/dl.dir.$i +done +sysctl vm.old_msync=$old + +rm -rf /tmp/dl +exit 0 +EOF +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct args { + char *bp; + int fd1; + int fd2; +} a[2]; + +int prepareFile(char *, int *); +void * mapBuffer(void *); +int startIO(int, char *); + +int pagesize; + +#define FILESIZE (32*1024) +char wbuffer [FILESIZE]; + +/* Create a FILESIZE sized file - then remove file data from the cache */ +int +prepareFile(char *filename, int *fdp) +{ + int fd; + int len; + int status; + void *addr; + + fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, S_IRWXU); + if (fd == -1) { + perror("Creating file"); + return fd; + } + len = write(fd, wbuffer, FILESIZE); + if (len < 0) { + perror("Write failed"); + return 1; + } + status = fsync(fd); + if (status != 0) { + perror("fsync failed"); + return 1; + } + addr = mmap(NULL, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (addr == MAP_FAILED) { + perror("Mmap failed"); + return 1; + } + status = msync(addr, FILESIZE, MS_INVALIDATE | MS_SYNC); + if (status != 0) { + perror("Msync failed"); + return 1; + } + munmap(addr, FILESIZE); + + *fdp = fd; + return 0; +} + + +/* mmap a 2 page buffer - first page is from fd1, second page from fd2 */ +void * +mapBuffer(void *ar) +{ + void *addr; + char *buffer; + int i; + + i = (int )ar; + addr = mmap(NULL, pagesize * 2, PROT_READ | PROT_WRITE, MAP_SHARED, a[i].fd1, 0); + if (addr == MAP_FAILED) { + err(1, "Mmap failed"); + } + buffer = addr; + addr = mmap(buffer + pagesize, pagesize, PROT_READ | PROT_WRITE, MAP_FIXED | + MAP_SHARED, a[i].fd2, 0); + + if (addr == MAP_FAILED) { + err(1, "Mmap2 failed"); + } + a[i].bp = buffer; + sleep(1); + return (NULL); +} + + +int +startIO(int fd, char *buffer) +{ + ssize_t len; + + len = write(fd, buffer, 2 * pagesize); + if (len == -1) { + warn("startIO(%d, %p): write failed", fd, buffer); + return 1; + } + return 0; +} + + + +int +main(int argc, char *argv[], char *envp[]) +{ + + int fdA, fdB, fdDelayA, fdDelayB; + int r, status; + char *bufferA, *bufferB; + pid_t pid; + pthread_t threads[2]; + + pagesize = getpagesize(); + + if ((prepareFile("A", &fdA)) + || (prepareFile("B", &fdB)) + || (prepareFile("DelayA", &fdDelayA)) + || (prepareFile("DelayB", &fdDelayB))) + exit(1); + + a[0].fd1 = fdDelayA; + a[0].fd2 = fdB; + + a[1].fd1 = fdDelayB; + a[1].fd2 = fdA; + + if ((r = pthread_create(&threads[0], NULL, mapBuffer, (void *)0)) != 0) + err(1, "pthread_create(): %s\n", strerror(r)); + if ((r = pthread_create(&threads[1], NULL, mapBuffer, (void *)1)) != 0) + err(1, "pthread_create(): %s\n", strerror(r)); + + while (a[0].bp == NULL || a[1].bp == NULL) + pthread_yield(); + + bufferA = a[0].bp; + bufferB = a[1].bp; + + pid = fork(); + + if (pid == 0) { + status = startIO(fdA, bufferA); + exit(status); + } + if (pid == -1) { + exit(1); + } + status = startIO(fdB, bufferB); + exit(status); + +} From owner-svn-src-projects@FreeBSD.ORG Sun May 10 18:23:17 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 98494106564A; Sun, 10 May 2009 18:23:17 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6D01D8FC15; Sun, 10 May 2009 18:23:17 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AINHaK065039; Sun, 10 May 2009 18:23:17 GMT (envelope-from pho@svn.freebsd.org) Received: (from pho@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AINHeb065038; Sun, 10 May 2009 18:23:17 GMT (envelope-from pho@svn.freebsd.org) Message-Id: <200905101823.n4AINHeb065038@svn.freebsd.org> From: Peter Holm Date: Sun, 10 May 2009 18:23:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191970 - projects/stress2/misc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 18:23:17 -0000 Author: pho Date: Sun May 10 18:23:17 2009 New Revision: 191970 URL: http://svn.freebsd.org/changeset/base/191970 Log: Added test scenario variation of tmpfs.sh Added: projects/stress2/misc/tmpfs3.sh (contents, props changed) Added: projects/stress2/misc/tmpfs3.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/tmpfs3.sh Sun May 10 18:23:17 2009 (r191970) @@ -0,0 +1,46 @@ +#!/bin/sh + +# +# Copyright (c) 2009 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $Id: nfs.sh,v 1.2 2008/02/25 16:31:43 pho Exp $ +# + +# panic: tmpfs_alloc_vp: type 0xc866ce58 0, seen. + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +. ../default.cfg + +mount | grep "$mntpoint" | grep -q tmpfs && umount $mntpoint +mount -t tmpfs tmpfs $mntpoint + +export RUNDIR=$mntpoint/stressX +export runRUNTIME=10m # Run tests for 10 minutes + +(cd /home/pho/stress2; ./run.sh vfs.cfg) + +umount $mntpoint +mount | grep "$mntpoint" | grep -q tmpfs && umount -f $mntpoint From owner-svn-src-projects@FreeBSD.ORG Sun May 10 18:25:15 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 23FA91065672; Sun, 10 May 2009 18:25:15 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EC83D8FC1D; Sun, 10 May 2009 18:25:14 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIPETL065115; Sun, 10 May 2009 18:25:14 GMT (envelope-from pho@svn.freebsd.org) Received: (from pho@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIPE22065114; Sun, 10 May 2009 18:25:14 GMT (envelope-from pho@svn.freebsd.org) Message-Id: <200905101825.n4AIPE22065114@svn.freebsd.org> From: Peter Holm Date: Sun, 10 May 2009 18:25:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191971 - projects/stress2/misc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 18:25:15 -0000 Author: pho Date: Sun May 10 18:25:14 2009 New Revision: 191971 URL: http://svn.freebsd.org/changeset/base/191971 Log: Added simple test scenario for PMC(3) Added: projects/stress2/misc/pmc.sh (contents, props changed) Added: projects/stress2/misc/pmc.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/stress2/misc/pmc.sh Sun May 10 18:25:14 2009 (r191971) @@ -0,0 +1,48 @@ +#!/bin/sh + +# +# Copyright (c) 2008-2009 Peter Holm +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +# Simple pmc test + +[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 + +. ../default.cfg + +kldstat -v | grep -q hwpmc || kldload hwpmc + +for i in `jot 2`; do + pmcstat -P instructions -O /tmp/sample.out.$i find /var -name not.there & +done + +export runRUNTIME=5m +(cd /home/pho/stress2; ./run.sh vfs.cfg) + +for i in `jot 2`; do + wait +done From owner-svn-src-projects@FreeBSD.ORG Sun May 10 18:58:30 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AB821106564A; Sun, 10 May 2009 18:58:30 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9A7D28FC16; Sun, 10 May 2009 18:58:30 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIwUOm065898; Sun, 10 May 2009 18:58:30 GMT (envelope-from pho@svn.freebsd.org) Received: (from pho@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIwUUg065897; Sun, 10 May 2009 18:58:30 GMT (envelope-from pho@svn.freebsd.org) Message-Id: <200905101858.n4AIwUUg065897@svn.freebsd.org> From: Peter Holm Date: Sun, 10 May 2009 18:58:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191974 - projects/stress2/testcases/swap X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 18:58:30 -0000 Author: pho Date: Sun May 10 18:58:30 2009 New Revision: 191974 URL: http://svn.freebsd.org/changeset/base/191974 Log: Handle the noswap scenario. While here, remove unused variable and fix spacing Modified: projects/stress2/testcases/swap/swap.c Modified: projects/stress2/testcases/swap/swap.c ============================================================================== --- projects/stress2/testcases/swap/swap.c Sun May 10 18:43:43 2009 (r191973) +++ projects/stress2/testcases/swap/swap.c Sun May 10 18:58:30 2009 (r191974) @@ -48,7 +48,6 @@ setup(int nb) int pct; unsigned long mem; int64_t swapinfo = 0; - unsigned long s; struct rlimit rlp; if (nb == 0) { @@ -69,7 +68,10 @@ setup(int nb) if (op->hog >= 3) pct = random_int(100, 110); - s = size = swapinfo / 100 * pct + mem; + if (swapinfo == 0) + size = mem / 100 * pct; + else + size = swapinfo / 100 * pct + mem; size = size / op->incarnations; @@ -84,7 +86,7 @@ setup(int nb) if (op->verbose > 1 && nb == 0) printf("setup: pid %d, %d%%. Total %luMb\n", - getpid(), pct, size / 1024 / 1024 * op->incarnations); + getpid(), pct, size / 1024 / 1024 * op->incarnations); } else size = getval(); return (0); From owner-svn-src-projects@FreeBSD.ORG Sun May 10 21:01:33 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C3536106566C; Sun, 10 May 2009 21:01:33 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B1C1D8FC15; Sun, 10 May 2009 21:01:33 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AL1X54068887; Sun, 10 May 2009 21:01:33 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AL1XZb068885; Sun, 10 May 2009 21:01:33 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905102101.n4AL1XZb068885@svn.freebsd.org> From: Rui Paulo Date: Sun, 10 May 2009 21:01:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191982 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2009 21:01:34 -0000 Author: rpaulo Date: Sun May 10 21:01:33 2009 New Revision: 191982 URL: http://svn.freebsd.org/changeset/base/191982 Log: Initial take on handling data frames. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_output.c Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Sun May 10 20:41:52 2009 (r191981) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Sun May 10 21:01:33 2009 (r191982) @@ -224,8 +224,8 @@ mesh_input(struct ieee80211_node *ni, st struct ieee80211com *ic = ni->ni_ic; struct ifnet *ifp = vap->iv_ifp; struct ieee80211_frame *wh; - int need_tap; - uint8_t dir, type, subtype; + int hdrspace, need_tap; + uint8_t dir, type, subtype, qos; KASSERT(ni != NULL, ("null node")); ni->ni_inact = ni->ni_inact_reload; @@ -264,12 +264,71 @@ mesh_input(struct ieee80211_node *ni, st switch (type) { case IEEE80211_FC0_TYPE_DATA: + hdrspace = ieee80211_hdrspace(ic, wh); + if (m->m_len < hdrspace && + (m = m_pullup(m, hdrspace)) == NULL) { + IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY, + ni->ni_macaddr, NULL, + "data too short: expecting %u", hdrspace); + vap->iv_stats.is_rx_tooshort++; + goto out; /* XXX */ + } + if (dir != IEEE80211_FC1_DIR_DSTODS) { + IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, + wh, "data", "incorrect dir 0x%x", dir); + vap->iv_stats.is_rx_wrongdir++; + goto err; + } + /* + * Save QoS bits for use below--before we strip the header. + */ + if (subtype == IEEE80211_FC0_SUBTYPE_QOS) { + qos = (dir == IEEE80211_FC1_DIR_DSTODS) ? + ((struct ieee80211_qosframe_addr4 *)wh)->i_qos[0] : + ((struct ieee80211_qosframe *)wh)->i_qos[0]; + } else + qos = 0; + /* + * Next up, any fragmentation. + */ +#if 0 + if (!IEEE80211_IS_MULTICAST(wh->i_addr3)) { + m = ieee80211_defrag(ni, m, hdrspace); + if (m == NULL) { + /* Fragment dropped or frame not complete yet */ + goto out; + } + } +#endif + wh = NULL; /* no longer valid, catch any uses */ + if (bpf_peers_present(vap->iv_rawbpf)) + bpf_mtap(vap->iv_rawbpf, m); + need_tap = 0; + /* + * Finally, strip the 802.11 header. + */ + m = ieee80211_decap(vap, m, hdrspace); + if (m == NULL) { + /* XXX mask bit to check for both */ + /* don't count Null data frames as errors */ + if (subtype == IEEE80211_FC0_SUBTYPE_NODATA || + subtype == IEEE80211_FC0_SUBTYPE_QOS_NULL) + goto out; + IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT, + ni->ni_macaddr, "data", "%s", "decap error"); + vap->iv_stats.is_rx_decap++; + IEEE80211_NODE_STAT(ni, rx_decap); + goto err; + } + /* XXX SuperG/HT */ + ieee80211_deliver_data(vap, ni, m); + return type; case IEEE80211_FC0_TYPE_MGT: vap->iv_stats.is_rx_mgmt++; IEEE80211_NODE_STAT(ni, rx_mgmt); - if (dir != IEEE80211_FC1_DIR_DSTODS) { + if (dir != IEEE80211_FC1_DIR_NODS) { IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, - wh, "data", "incorrect dir 0x%x", dir); + wh, "mgt", "incorrect dir 0x%x", dir); vap->iv_stats.is_rx_wrongdir++; goto err; } @@ -298,9 +357,7 @@ mesh_input(struct ieee80211_node *ni, st if (bpf_peers_present(vap->iv_rawbpf)) bpf_mtap(vap->iv_rawbpf, m); vap->iv_recv_mgmt(ni, m, subtype, rssi, noise, rstamp); - m_freem(m); - return IEEE80211_FC0_TYPE_MGT; - + goto out; case IEEE80211_FC0_TYPE_CTL: vap->iv_stats.is_rx_ctl++; IEEE80211_NODE_STAT(ni, rx_ctrl); Modified: projects/mesh11s/sys/net80211/ieee80211_output.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_output.c Sun May 10 20:41:52 2009 (r191981) +++ projects/mesh11s/sys/net80211/ieee80211_output.c Sun May 10 21:01:33 2009 (r191982) @@ -202,6 +202,8 @@ ieee80211_start(struct ifnet *ifp) */ /* XXX only if dwds in use? */ ieee80211_dwds_mcast(vap, m); + } else if (vap->iv_opmode == IEEE80211_M_MBSS) { + } } ni = ieee80211_find_txnode(vap, eh->ether_dhost); @@ -499,6 +501,7 @@ ieee80211_send_setup( IEEE80211_ADDR_COPY(wh->i_addr3, sa); break; case IEEE80211_M_WDS: + case IEEE80211_M_MBSS: /* XXX confirm */ wh->i_fc[1] = IEEE80211_FC1_DIR_DSTODS; IEEE80211_ADDR_COPY(wh->i_addr1, da); IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr); @@ -507,9 +510,6 @@ ieee80211_send_setup( break; case IEEE80211_M_MONITOR: /* NB: to quiet compiler */ break; - case IEEE80211_M_MBSS: - /* XXXRP TBD */ - break; } } else { wh->i_fc[1] = IEEE80211_FC1_DIR_NODS; From owner-svn-src-projects@FreeBSD.ORG Mon May 11 18:20:35 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3BDAB1065674; Mon, 11 May 2009 18:20:35 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 104118FC14; Mon, 11 May 2009 18:20:35 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4BIKY8w098598; Mon, 11 May 2009 18:20:34 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4BIKYv6098596; Mon, 11 May 2009 18:20:34 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905111820.n4BIKYv6098596@svn.freebsd.org> From: Rui Paulo Date: Mon, 11 May 2009 18:20:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191997 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 May 2009 18:20:35 -0000 Author: rpaulo Date: Mon May 11 18:20:34 2009 New Revision: 191997 URL: http://svn.freebsd.org/changeset/base/191997 Log: Checkpoint input data processing. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_mesh.h Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Mon May 11 17:29:11 2009 (r191996) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Mon May 11 18:20:34 2009 (r191997) @@ -264,7 +264,10 @@ mesh_input(struct ieee80211_node *ni, st switch (type) { case IEEE80211_FC0_TYPE_DATA: - hdrspace = ieee80211_hdrspace(ic, wh); + IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni, + "%s", "received data frame"); + hdrspace = ieee80211_hdrspace(ic, wh) + + sizeof(struct ieee80211_meshcontrol); if (m->m_len < hdrspace && (m = m_pullup(m, hdrspace)) == NULL) { IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY, @@ -291,7 +294,6 @@ mesh_input(struct ieee80211_node *ni, st /* * Next up, any fragmentation. */ -#if 0 if (!IEEE80211_IS_MULTICAST(wh->i_addr3)) { m = ieee80211_defrag(ni, m, hdrspace); if (m == NULL) { @@ -299,7 +301,6 @@ mesh_input(struct ieee80211_node *ni, st goto out; } } -#endif wh = NULL; /* no longer valid, catch any uses */ if (bpf_peers_present(vap->iv_rawbpf)) bpf_mtap(vap->iv_rawbpf, m); @@ -320,6 +321,7 @@ mesh_input(struct ieee80211_node *ni, st IEEE80211_NODE_STAT(ni, rx_decap); goto err; } + /* XXX SuperG/HT */ ieee80211_deliver_data(vap, ni, m); return type; Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Mon May 11 17:29:11 2009 (r191996) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Mon May 11 18:20:34 2009 (r191997) @@ -264,6 +264,13 @@ struct ieee80211_meshpuc_ie { #define IEEE80211_ACTION_MESHPEERING_CONFIRM 1 #define IEEE80211_ACTION_MESHPEERING_CLOSE 2 +struct ieee80211_meshcontrol { + uint8_t mc_flags; + uint8_t mc_ttl; + uint32_t mc_seq; + /* more mesh addresses follow */ +} __packed; + void ieee80211_mesh_attach(struct ieee80211com *); void ieee80211_mesh_detach(struct ieee80211com *); void ieee80211_parse_meshid(struct ieee80211_node *, const uint8_t *); From owner-svn-src-projects@FreeBSD.ORG Tue May 12 01:00:30 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9D98B106566B; Tue, 12 May 2009 01:00:30 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 80D248FC0A; Tue, 12 May 2009 01:00:30 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4C10U8V006765; Tue, 12 May 2009 01:00:30 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4C10UwR006762; Tue, 12 May 2009 01:00:30 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200905120100.n4C10UwR006762@svn.freebsd.org> From: Kip Macy Date: Tue, 12 May 2009 01:00:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192005 - projects/releng_7_xen/sys/dev/xen/console X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 May 2009 01:00:30 -0000 Author: kmacy Date: Tue May 12 01:00:30 2009 New Revision: 192005 URL: http://svn.freebsd.org/changeset/base/192005 Log: convert xen console lock to a spin lock to handle case of being called from interrupt context Modified: projects/releng_7_xen/sys/dev/xen/console/console.c projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h Modified: projects/releng_7_xen/sys/dev/xen/console/console.c ============================================================================== --- projects/releng_7_xen/sys/dev/xen/console/console.c Mon May 11 23:03:15 2009 (r192004) +++ projects/releng_7_xen/sys/dev/xen/console/console.c Tue May 12 01:00:30 2009 (r192005) @@ -77,18 +77,8 @@ static unsigned int wc, wp; /* write_con #define XCUNIT(x) (minor(x)) #define ISTTYOPEN(tp) ((tp) && ((tp)->t_state & TS_ISOPEN)) #define CN_LOCK_INIT(x, _name) \ - mtx_init(&x, _name, NULL, MTX_DEF|MTX_RECURSE) + mtx_init(&x, _name, NULL, MTX_SPIN|MTX_RECURSE) -#define CN_LOCK(l) \ - do { \ - if (panicstr == NULL) \ - mtx_lock(&(l)); \ - } while (0) -#define CN_UNLOCK(l) \ - do { \ - if (panicstr == NULL) \ - mtx_unlock(&(l)); \ - } while (0) #define CN_LOCK_ASSERT(x) mtx_assert(&x, MA_OWNED) #define CN_LOCK_DESTROY(x) mtx_destroy(&x) Modified: projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c ============================================================================== --- projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c Mon May 11 23:03:15 2009 (r192004) +++ projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c Tue May 12 01:00:30 2009 (r192005) @@ -83,25 +83,27 @@ xencons_handle_input(void *unused) struct xencons_interface *intf; XENCONS_RING_IDX cons, prod; - mtx_lock(&cn_mtx); + CN_LOCK(cn_mtx); intf = xencons_interface(); cons = intf->in_cons; prod = intf->in_prod; - + CN_UNLOCK(cn_mtx); + /* XXX needs locking */ while (cons != prod) { xencons_rx(intf->in + MASK_XENCONS_IDX(cons, intf->in), 1); cons++; } + CN_LOCK(cn_mtx); mb(); intf->in_cons = cons; notify_remote_via_evtchn(xen_start_info->console_evtchn); xencons_tx(); - mtx_unlock(&cn_mtx); + CN_UNLOCK(cn_mtx); } void Modified: projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h ============================================================================== --- projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h Mon May 11 23:03:15 2009 (r192004) +++ projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h Tue May 12 01:00:30 2009 (r192005) @@ -5,6 +5,18 @@ #ifndef _XENCONS_RING_H #define _XENCONS_RING_H +#define CN_LOCK(l) \ + do { \ + if (panicstr == NULL) \ + mtx_lock_spin(&(l)); \ + } while (0) +#define CN_UNLOCK(l) \ + do { \ + if (panicstr == NULL) \ + mtx_unlock_spin(&(l)); \ + } while (0) + + int xencons_ring_init(void); int xencons_ring_send(const char *data, unsigned len); void xencons_rx(char *buf, unsigned len); From owner-svn-src-projects@FreeBSD.ORG Tue May 12 09:38:51 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D68C01065673; Tue, 12 May 2009 09:38:51 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AA1338FC1B; Tue, 12 May 2009 09:38:51 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4C9cpTB017164; Tue, 12 May 2009 09:38:51 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4C9cpJJ017162; Tue, 12 May 2009 09:38:51 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905120938.n4C9cpJJ017162@svn.freebsd.org> From: Rui Paulo Date: Tue, 12 May 2009 09:38:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192014 - projects/mesh11s/sys/dev/ral X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 May 2009 09:38:52 -0000 Author: rpaulo Date: Tue May 12 09:38:51 2009 New Revision: 192014 URL: http://svn.freebsd.org/changeset/base/192014 Log: Program the rx filter to handle MBSS. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/dev/ral/rt2560.c projects/mesh11s/sys/dev/ral/rt2661.c Modified: projects/mesh11s/sys/dev/ral/rt2560.c ============================================================================== --- projects/mesh11s/sys/dev/ral/rt2560.c Tue May 12 09:28:45 2009 (r192013) +++ projects/mesh11s/sys/dev/ral/rt2560.c Tue May 12 09:38:51 2009 (r192014) @@ -1350,7 +1350,8 @@ rt2560_beacon_expire(struct rt2560_softc struct rt2560_tx_data *data; if (ic->ic_opmode != IEEE80211_M_IBSS && - ic->ic_opmode != IEEE80211_M_HOSTAP) + ic->ic_opmode != IEEE80211_M_HOSTAP && + ic->ic_opmode != IEEE80211_M_MBSS) return; data = &sc->bcnq.data[sc->bcnq.next]; @@ -2705,7 +2706,8 @@ rt2560_init_locked(struct rt2560_softc * tmp = RT2560_DROP_PHY_ERROR | RT2560_DROP_CRC_ERROR; if (ic->ic_opmode != IEEE80211_M_MONITOR) { tmp |= RT2560_DROP_CTL | RT2560_DROP_VERSION_ERROR; - if (ic->ic_opmode != IEEE80211_M_HOSTAP) + if (ic->ic_opmode != IEEE80211_M_HOSTAP && + ic->ic_opmode != IEEE80211_M_MBSS) tmp |= RT2560_DROP_TODS; if (!(ifp->if_flags & IFF_PROMISC)) tmp |= RT2560_DROP_NOT_TO_ME; Modified: projects/mesh11s/sys/dev/ral/rt2661.c ============================================================================== --- projects/mesh11s/sys/dev/ral/rt2661.c Tue May 12 09:28:45 2009 (r192013) +++ projects/mesh11s/sys/dev/ral/rt2661.c Tue May 12 09:38:51 2009 (r192014) @@ -2441,7 +2441,8 @@ rt2661_init_locked(struct rt2661_softc * if (ic->ic_opmode != IEEE80211_M_MONITOR) { tmp |= RT2661_DROP_CTL | RT2661_DROP_VER_ERROR | RT2661_DROP_ACKCTS; - if (ic->ic_opmode != IEEE80211_M_HOSTAP) + if (ic->ic_opmode != IEEE80211_M_HOSTAP && + ic->ic_opmode != IEEE80211_M_MBSS) tmp |= RT2661_DROP_TODS; if (!(ifp->if_flags & IFF_PROMISC)) tmp |= RT2661_DROP_NOT_TO_ME; From owner-svn-src-projects@FreeBSD.ORG Wed May 13 09:03:55 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 43115106564A; Wed, 13 May 2009 09:03:55 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 31B438FC0C; Wed, 13 May 2009 09:03:55 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4D93tsE047276; Wed, 13 May 2009 09:03:55 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4D93tHM047274; Wed, 13 May 2009 09:03:55 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905130903.n4D93tHM047274@svn.freebsd.org> From: Rui Paulo Date: Wed, 13 May 2009 09:03:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192037 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 May 2009 09:03:55 -0000 Author: rpaulo Date: Wed May 13 09:03:54 2009 New Revision: 192037 URL: http://svn.freebsd.org/changeset/base/192037 Log: Add a meshqosframe_addr struct for storing mesh data packets. This fixes a stack corruption problem the previous commit introduced. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211.h projects/mesh11s/sys/net80211/ieee80211_input.c Modified: projects/mesh11s/sys/net80211/ieee80211.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211.h Wed May 13 08:50:13 2009 (r192036) +++ projects/mesh11s/sys/net80211/ieee80211.h Wed May 13 09:03:54 2009 (r192037) @@ -107,6 +107,20 @@ struct ieee80211_qosframe_addr4 { uint8_t i_qos[2]; } __packed; +struct ieee80211_meshqosframe_addr4 { + uint8_t i_fc[2]; + uint8_t i_dur[2]; + uint8_t i_addr1[IEEE80211_ADDR_LEN]; + uint8_t i_addr2[IEEE80211_ADDR_LEN]; + uint8_t i_addr3[IEEE80211_ADDR_LEN]; + uint8_t i_seq[2]; + uint8_t i_addr4[IEEE80211_ADDR_LEN]; + uint8_t i_qos[2]; + uint8_t i_mflags; /* address extension flags */ + uint8_t i_mttl; /* mesh ttl */ + uint8_t i_mseq[4]; /* mesh sequence no */ +} __packed; + #define IEEE80211_FC0_VERSION_MASK 0x03 #define IEEE80211_FC0_VERSION_SHIFT 0 #define IEEE80211_FC0_VERSION_0 0x00 Modified: projects/mesh11s/sys/net80211/ieee80211_input.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_input.c Wed May 13 08:50:13 2009 (r192036) +++ projects/mesh11s/sys/net80211/ieee80211_input.c Wed May 13 09:03:54 2009 (r192037) @@ -226,7 +226,7 @@ ieee80211_deliver_data(struct ieee80211v struct mbuf * ieee80211_decap(struct ieee80211vap *vap, struct mbuf *m, int hdrlen) { - struct ieee80211_qosframe_addr4 wh; /* Max size address frames */ + struct ieee80211_meshqosframe_addr4 wh; /* Max size address frames */ struct ether_header *eh; struct llc *llc; From owner-svn-src-projects@FreeBSD.ORG Wed May 13 10:16:31 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B6FFA106566B; Wed, 13 May 2009 10:16:31 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A41EA8FC1E; Wed, 13 May 2009 10:16:31 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4DAGVQi048772; Wed, 13 May 2009 10:16:31 GMT (envelope-from rwatson@svn.freebsd.org) Received: (from rwatson@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4DAGVLR048770; Wed, 13 May 2009 10:16:31 GMT (envelope-from rwatson@svn.freebsd.org) Message-Id: <200905131016.n4DAGVLR048770@svn.freebsd.org> From: Robert Watson Date: Wed, 13 May 2009 10:16:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192038 - in projects/pnet/sys: net sys X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 May 2009 10:16:32 -0000 Author: rwatson Date: Wed May 13 10:16:31 2009 New Revision: 192038 URL: http://svn.freebsd.org/changeset/base/192038 Log: Use SWIs for netisr2 rather than kthreads -- SWIs have a slightly more efficient wakeup routine (since they don't need to look up sleep queues). Suggested by: jhb Modified: projects/pnet/sys/net/netisr2.c projects/pnet/sys/sys/pcpu.h Modified: projects/pnet/sys/net/netisr2.c ============================================================================== --- projects/pnet/sys/net/netisr2.c Wed May 13 09:03:54 2009 (r192037) +++ projects/pnet/sys/net/netisr2.c Wed May 13 10:16:31 2009 (r192038) @@ -69,7 +69,6 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include #include #include @@ -196,11 +195,12 @@ struct netisr_work { * Currently, #workstreams must equal #CPUs. */ struct netisr_workstream { - struct thread *nws_thread; /* Thread serving stream. */ + struct intr_event *nws_intr_event; /* Handler for stream. */ + void *nws_swi_cookie; /* swi(9) cookie for stream. */ struct mtx nws_mtx; /* Synchronize work. */ - struct cv nws_cv; /* Wake up worker. */ u_int nws_cpu; /* CPU pinning. */ u_int nws_flags; /* Wakeup flags. */ + u_int nws_swi_flags; /* Flags used in swi. */ u_int nws_pendingwork; /* Across all protos. */ /* @@ -210,11 +210,6 @@ struct netisr_workstream { } __aligned(CACHE_LINE_SIZE); /* - * Kernel process associated with worker threads. - */ -static struct proc *netisr2_proc; - -/* * Per-CPU workstream data, indexed by CPU ID. */ static struct netisr_workstream nws[MAXCPU]; @@ -239,15 +234,19 @@ static u_int nws_count; #define NWS_SIGNALED 0x00000002 /* Signal issued. */ /* + * Flags used internally to the SWI handler -- no locking required. + */ +#define NWS_SWI_BOUND 0x00000001 /* SWI bound to CPU. */ + +/* * Synchronization for each workstream: a mutex protects all mutable fields - * in each stream, including per-protocol state (mbuf queues). The CV will - * be used to wake up the worker if asynchronous dispatch is required. + * in each stream, including per-protocol state (mbuf queues). The SWI is + * woken up if asynchronous dispatch is required. */ #define NWS_LOCK(s) mtx_lock(&(s)->nws_mtx) #define NWS_LOCK_ASSERT(s) mtx_assert(&(s)->nws_mtx, MA_OWNED) #define NWS_UNLOCK(s) mtx_unlock(&(s)->nws_mtx) -#define NWS_SIGNAL(s) cv_signal(&(s)->nws_cv) -#define NWS_WAIT(s) cv_wait(&(s)->nws_cv, &(s)->nws_mtx) +#define NWS_SIGNAL(s) swi_sched((s)->nws_swi_cookie, 0) /* * Utility routines for protocols that implement their own mapping of flows @@ -498,38 +497,33 @@ netisr2_process_workstream(struct netisr } /* - * Worker thread that waits for and processes packets in a set of workstreams - * that it owns. Each thread has one cv, which is uses for all workstreams - * it handles. + * SWI handler for netisr2 -- processes prackets in a set of workstreams that + * it owns. */ static void -netisr2_worker(void *arg) +swi_net(void *arg) { struct netisr_workstream *nwsp; nwsp = arg; - thread_lock(curthread); - sched_prio(curthread, SWI_NET * RQ_PPQ + PI_SOFT); - sched_bind(curthread, nwsp->nws_cpu); - thread_unlock(curthread); - /* - * Main work loop. In the future we will want to support stopping - * workers, as well as re-balancing work, in which case we'll need to - * also handle state transitions. - * - * XXXRW: netisr_rwlock. + * On first execution, force the ithread to the desired CPU. There + * should be a better way to do this. */ + if (!(nwsp->nws_swi_flags & NWS_SWI_BOUND)) { + thread_lock(curthread); + sched_bind(curthread, nwsp->nws_cpu); + thread_unlock(curthread); + nwsp->nws_swi_flags |= NWS_SWI_BOUND; + } + NWS_LOCK(nwsp); - while (1) { - while (nwsp->nws_pendingwork == 0) { - nwsp->nws_flags &= ~(NWS_SIGNALED | NWS_RUNNING); - NWS_WAIT(nwsp); - nwsp->nws_flags |= NWS_RUNNING; - } + nwsp->nws_flags |= NWS_RUNNING; + while (nwsp->nws_pendingwork != 0) netisr2_process_workstream(nwsp, NETISR_ALLPROT); - } + nwsp->nws_flags &= ~(NWS_SIGNALED | NWS_RUNNING); + NWS_UNLOCK(nwsp); } static int @@ -624,6 +618,26 @@ netisr2_dispatch(u_int proto, uintptr_t return (0); } +static void +netisr2_start_swi(u_int cpuid, struct pcpu *pc) +{ + char swiname[12]; + struct netisr_workstream *nwsp; + int error; + + nwsp = &nws[cpuid]; + mtx_init(&nwsp->nws_mtx, "netisr2_mtx", NULL, MTX_DEF); + nwsp->nws_cpu = cpuid; + snprintf(swiname, sizeof(swiname), "netisr2: %d", cpuid); + error = swi_add(&nwsp->nws_intr_event, swiname, swi_net, nwsp, + SWI_NET, INTR_MPSAFE, &nwsp->nws_swi_cookie); + if (error) + panic("netisr2_init: swi_add %d", error); + pc->pc_netisr2 = nwsp->nws_intr_event; + nws_array[nws_count] = nwsp->nws_cpu; + nws_count++; +} + /* * Initialize the netisr subsystem. We rely on BSS and static initialization * of most fields in global data structures. @@ -635,30 +649,16 @@ netisr2_dispatch(u_int proto, uintptr_t static void netisr2_init(void *arg) { - struct netisr_workstream *nwsp; - u_int cpuid; - int error; KASSERT(curcpu == 0, ("netisr2_init: not on CPU 0")); NETISR_LOCK_INIT(); - - KASSERT(PCPU_GET(netisr2) == NULL, ("netisr2_init: pc_netisr2")); - - cpuid = curcpu; - nwsp = &nws[cpuid]; - mtx_init(&nwsp->nws_mtx, "netisr2_mtx", NULL, MTX_DEF); - cv_init(&nwsp->nws_cv, "netisr2_cv"); - nwsp->nws_cpu = cpuid; - error = kproc_kthread_add(netisr2_worker, nwsp, &netisr2_proc, - &nwsp->nws_thread, 0, 0, "netisr2", "netisr2: cpu%d", cpuid); - PCPU_SET(netisr2, nwsp->nws_thread); - if (error) - panic("netisr2_init: kproc_kthread_add %d", error); - nws_array[nws_count] = nwsp->nws_cpu; - nws_count++; if (netisr_maxthreads < 1) netisr_maxthreads = 1; + if (netisr_maxthreads > MAXCPU) + netisr_maxthreads = MAXCPU; + + netisr2_start_swi(curcpu, pcpu_find(curcpu)); } SYSINIT(netisr2_init, SI_SUB_SOFTINTR, SI_ORDER_FIRST, netisr2_init, NULL); @@ -669,9 +669,7 @@ SYSINIT(netisr2_init, SI_SUB_SOFTINTR, S static void netisr2_start(void *arg) { - struct netisr_workstream *nwsp; struct pcpu *pc; - int error; SLIST_FOREACH(pc, &cpuhead, pc_allcpu) { if (nws_count >= netisr_maxthreads) @@ -682,18 +680,7 @@ netisr2_start(void *arg) /* Worker will already be present for boot CPU. */ if (pc->pc_netisr2 != NULL) continue; - nwsp = &nws[pc->pc_cpuid]; - mtx_init(&nwsp->nws_mtx, "netisr2_mtx", NULL, MTX_DEF); - cv_init(&nwsp->nws_cv, "netisr2_cv"); - nwsp->nws_cpu = pc->pc_cpuid; - error = kproc_kthread_add(netisr2_worker, nwsp, - &netisr2_proc, &nwsp->nws_thread, 0, 0, "netisr2", - "netisr2: cpu%d", pc->pc_cpuid); - pc->pc_netisr2 = nwsp->nws_thread; - if (error) - panic("netisr2_start: kproc_kthread_add %d", error); - nws_array[nws_count] = pc->pc_cpuid; - nws_count++; + netisr2_start_swi(pc->pc_cpuid, pc); } } SYSINIT(netisr2_start, SI_SUB_SMP, SI_ORDER_MIDDLE, netisr2_start, NULL); @@ -709,7 +696,7 @@ DB_SHOW_COMMAND(netisr2, db_show_netisr2 "Proto", "Len", "WMark", "Max", "Disp", "Drop", "Queue", "Handle"); for (cpu = 0; cpu < MAXCPU; cpu++) { nwsp = &nws[cpu]; - if (nwsp->nws_thread == NULL) + if (nwsp->nws_intr_event == NULL) continue; first = 1; for (proto = 0; proto < NETISR_MAXPROT; proto++) { Modified: projects/pnet/sys/sys/pcpu.h ============================================================================== --- projects/pnet/sys/sys/pcpu.h Wed May 13 09:03:54 2009 (r192037) +++ projects/pnet/sys/sys/pcpu.h Wed May 13 10:16:31 2009 (r192038) @@ -86,6 +86,7 @@ struct pcpu { struct vmmeter pc_cnt; /* VM stats counters */ long pc_cp_time[CPUSTATES]; /* statclock ticks */ struct device *pc_device; + void *pc_netisr2; /* netisr2 SWI cookie. */ /* * Stuff for read mostly lock From owner-svn-src-projects@FreeBSD.ORG Wed May 13 12:19:54 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8B0B6106566B; Wed, 13 May 2009 12:19:54 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 793088FC0C; Wed, 13 May 2009 12:19:54 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4DCJspH056138; Wed, 13 May 2009 12:19:54 GMT (envelope-from rwatson@svn.freebsd.org) Received: (from rwatson@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4DCJsmo056137; Wed, 13 May 2009 12:19:54 GMT (envelope-from rwatson@svn.freebsd.org) Message-Id: <200905131219.n4DCJsmo056137@svn.freebsd.org> From: Robert Watson Date: Wed, 13 May 2009 12:19:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192039 - projects/pnet/sys/net X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 May 2009 12:19:54 -0000 Author: rwatson Date: Wed May 13 12:19:54 2009 New Revision: 192039 URL: http://svn.freebsd.org/changeset/base/192039 Log: Create at most one thread by default -- we want this to be a drop-in replacement for netisr1 in 8.0, so don't want to deal with full performance evaluation of the MP case yet. Add a tunable/sysctl to disable binding threads to CPUs, and set that by default, as we'll be using just one netisr by default. Modified: projects/pnet/sys/net/netisr2.c Modified: projects/pnet/sys/net/netisr2.c ============================================================================== --- projects/pnet/sys/net/netisr2.c Wed May 13 10:16:31 2009 (r192038) +++ projects/pnet/sys/net/netisr2.c Wed May 13 12:19:54 2009 (r192039) @@ -132,11 +132,16 @@ SYSCTL_INT(_net_isr2, OID_AUTO, direct, * thread for CPU 0, so in practice we ignore values <= 1. This must be set * as a tunable, no run-time reconfiguration yet. */ -static int netisr_maxthreads = MAXCPU; /* Bound number of threads. */ +static int netisr_maxthreads = 1; /* Max number of threads. */ TUNABLE_INT("net.isr2.maxthreads", &netisr_maxthreads); SYSCTL_INT(_net_isr2, OID_AUTO, maxthreads, CTLFLAG_RD, &netisr_maxthreads, 0, "Use at most this many CPUs for netisr2 processing"); +static int netisr_bindthreads = 0; /* Bind threads to CPUs. */ +TUNABLE_INT("net.isr2.bindthreads", &netisr_bindthreads); +SYSCTL_INT(_net_isr2, OID_AUTO, bindthreads, CTLFLAG_RD, &netisr_bindthreads, + 0, "Bind netisr2 threads to CPUs."); + /* * Each protocol is described by an instance of netisr_proto, which holds all * global per-protocol information. This data structure is set up by @@ -511,7 +516,7 @@ swi_net(void *arg) * On first execution, force the ithread to the desired CPU. There * should be a better way to do this. */ - if (!(nwsp->nws_swi_flags & NWS_SWI_BOUND)) { + if (netisr_bindthreads && !(nwsp->nws_swi_flags & NWS_SWI_BOUND)) { thread_lock(curthread); sched_bind(curthread, nwsp->nws_cpu); thread_unlock(curthread); From owner-svn-src-projects@FreeBSD.ORG Wed May 13 15:07:26 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5613C1065670; Wed, 13 May 2009 15:07:26 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 44E3E8FC18; Wed, 13 May 2009 15:07:26 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4DF7QAn059681; Wed, 13 May 2009 15:07:26 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4DF7QQK059680; Wed, 13 May 2009 15:07:26 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905131507.n4DF7QQK059680@svn.freebsd.org> From: Rui Paulo Date: Wed, 13 May 2009 15:07:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192044 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 May 2009 15:07:26 -0000 Author: rpaulo Date: Wed May 13 15:07:26 2009 New Revision: 192044 URL: http://svn.freebsd.org/changeset/base/192044 Log: Use an enum for mesh peering actions. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Wed May 13 14:43:26 2009 (r192043) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Wed May 13 15:07:26 2009 (r192044) @@ -260,9 +260,11 @@ struct ieee80211_meshpuc_ie { #define IEEE80211_ACTION_CAT_RESOURCE 16 #define IEEE80211_ACTION_CAT_PROXY 17 -#define IEEE80211_ACTION_MESHPEERING_OPEN 0 -#define IEEE80211_ACTION_MESHPEERING_CONFIRM 1 -#define IEEE80211_ACTION_MESHPEERING_CLOSE 2 +enum { + IEEE80211_ACTION_MESHPEERING_OPEN = 0, + IEEE80211_ACTION_MESHPEERING_CONFIRM = 1, + IEEE80211_ACTION_MESHPEERING_CLOSE = 2, +}; struct ieee80211_meshcontrol { uint8_t mc_flags; @@ -280,5 +282,5 @@ uint8_t * ieee80211_add_meshpeer(uint8_t uint16_t); void ieee80211_create_mbss(struct ieee80211vap *, struct ieee80211_channel *); - +uint32_t ieee80211_mesh_getseq(void); #endif /* !_NET80211_IEEE80211_MESH_H_ */ From owner-svn-src-projects@FreeBSD.ORG Wed May 13 15:09:02 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 298F31065673; Wed, 13 May 2009 15:09:02 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 17DB38FC16; Wed, 13 May 2009 15:09:02 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4DF91J3059745; Wed, 13 May 2009 15:09:01 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4DF91SN059743; Wed, 13 May 2009 15:09:01 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905131509.n4DF91SN059743@svn.freebsd.org> From: Rui Paulo Date: Wed, 13 May 2009 15:09:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192045 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 May 2009 15:09:02 -0000 Author: rpaulo Date: Wed May 13 15:09:01 2009 New Revision: 192045 URL: http://svn.freebsd.org/changeset/base/192045 Log: Handle atheros superg and HT on input. Handle output data frames. XXX: not sure what's happening to the header lenght. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_output.c Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Wed May 13 15:07:26 2009 (r192044) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Wed May 13 15:09:01 2009 (r192045) @@ -266,6 +266,7 @@ mesh_input(struct ieee80211_node *ni, st case IEEE80211_FC0_TYPE_DATA: IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni, "%s", "received data frame"); + /* XXX: make sure we already peered with this node */ hdrspace = ieee80211_hdrspace(ic, wh) + sizeof(struct ieee80211_meshcontrol); if (m->m_len < hdrspace && @@ -294,7 +295,7 @@ mesh_input(struct ieee80211_node *ni, st /* * Next up, any fragmentation. */ - if (!IEEE80211_IS_MULTICAST(wh->i_addr3)) { + if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) { m = ieee80211_defrag(ni, m, hdrspace); if (m == NULL) { /* Fragment dropped or frame not complete yet */ @@ -321,7 +322,18 @@ mesh_input(struct ieee80211_node *ni, st IEEE80211_NODE_STAT(ni, rx_decap); goto err; } - + /* XXX require HT? */ + if (qos & IEEE80211_QOS_AMSDU) { + m = ieee80211_decap_amsdu(ni, m); + if (m == NULL) + return IEEE80211_FC0_TYPE_DATA; + } else { +#ifdef IEEE80211_SUPPORT_SUPERG + m = ieee80211_decap_fastframe(vap, ni, m); + if (m == NULL) + return IEEE80211_FC0_TYPE_DATA; +#endif + } /* XXX SuperG/HT */ ieee80211_deliver_data(vap, ni, m); return type; @@ -1095,6 +1107,14 @@ ieee80211_create_mbss(struct ieee80211va ieee80211_new_state(vap, IEEE80211_S_RUN, -1); } +uint32_t +ieee80211_mesh_getseq(void) +{ + static uint32_t seq = 0; + + return seq++; +} + static int mesh_ioctl_get80211(struct ieee80211vap *vap, struct ieee80211req *ireq) { Modified: projects/mesh11s/sys/net80211/ieee80211_output.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_output.c Wed May 13 15:07:26 2009 (r192044) +++ projects/mesh11s/sys/net80211/ieee80211_output.c Wed May 13 15:09:01 2009 (r192045) @@ -1216,6 +1216,7 @@ ieee80211_encap(struct ieee80211vap *vap */ addqos = (ni->ni_flags & (IEEE80211_NODE_QOS|IEEE80211_NODE_HT)) && (m->m_flags & M_EAPOL) == 0; + addqos = 1; if (addqos) hdrsize = sizeof(struct ieee80211_qosframe); else @@ -1223,15 +1224,22 @@ ieee80211_encap(struct ieee80211vap *vap /* * 4-address frames need to be generated for: * o packets sent through a WDS vap (IEEE80211_M_WDS) + * o packets sent through a Mesh vap (IEEE80211_M_MBSS) * o packets sent through a vap marked for relaying * (e.g. a station operating with dynamic WDS) */ is4addr = vap->iv_opmode == IEEE80211_M_WDS || + vap->iv_opmode == IEEE80211_M_MBSS || ((vap->iv_flags_ext & IEEE80211_FEXT_4ADDR) && !IEEE80211_ADDR_EQ(eh.ether_shost, vap->iv_myaddr)); if (is4addr) hdrsize += IEEE80211_ADDR_LEN; /* + * All Mesh data frames have a Mesh Control field. + */ + if (vap->iv_opmode == IEEE80211_M_MBSS) + hdrsize += sizeof(struct ieee80211_meshcontrol); + /* * Honor driver DATAPAD requirement. */ if (ic->ic_flags & IEEE80211_F_DATAPAD) @@ -1268,7 +1276,7 @@ ieee80211_encap(struct ieee80211vap *vap goto bad; } datalen = m->m_pkthdr.len; /* NB: w/o 802.11 header */ - + hdrspace -= 2; M_PREPEND(m, hdrspace, M_DONTWAIT); if (m == NULL) { vap->iv_stats.is_tx_nobuf++; @@ -1307,9 +1315,15 @@ ieee80211_encap(struct ieee80211vap *vap IEEE80211_ADDR_COPY(wh->i_addr2, ni->ni_bssid); IEEE80211_ADDR_COPY(wh->i_addr3, eh.ether_shost); break; + case IEEE80211_M_MBSS: + wh->i_fc[1] = IEEE80211_FC1_DIR_DSTODS; + IEEE80211_ADDR_COPY(wh->i_addr1, ni->ni_macaddr); + IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr); + IEEE80211_ADDR_COPY(wh->i_addr3, eh.ether_dhost); + IEEE80211_ADDR_COPY(WH4(wh)->i_addr4, eh.ether_shost); + break; case IEEE80211_M_MONITOR: case IEEE80211_M_WDS: /* NB: is4addr should always be true */ - case IEEE80211_M_MBSS: goto bad; } if (m->m_flags & M_MORE_DATA) @@ -1349,6 +1363,19 @@ ieee80211_encap(struct ieee80211vap *vap htole16(seqno << IEEE80211_SEQ_SEQ_SHIFT); M_SEQNO_SET(m, seqno); } + if (vap->iv_opmode == IEEE80211_M_MBSS) { + struct ieee80211_meshqosframe_addr4 *mwh; + uint32_t seq; + + mwh = (struct ieee80211_meshqosframe_addr4 *)wh; + mwh->i_mflags = 0; /* address extension bit */ + mwh->i_mttl = 160; + seq = ieee80211_mesh_getseq(); + mwh->i_mseq[0] = seq & 0xff; + mwh->i_mseq[1] = (seq >> 8) & 0xff; + mwh->i_mseq[2] = (seq >> 16) & 0xff; + mwh->i_mseq[3] = (seq >> 24) & 0xff; + } } else { seqno = ni->ni_txseqs[IEEE80211_NONQOS_TID]++; *(uint16_t *)wh->i_seq = @@ -1356,6 +1383,7 @@ ieee80211_encap(struct ieee80211vap *vap M_SEQNO_SET(m, seqno); } + /* check if xmit fragmentation is required */ txfrag = (m->m_pkthdr.len > vap->iv_fragthreshold && !IEEE80211_IS_MULTICAST(wh->i_addr1) && From owner-svn-src-projects@FreeBSD.ORG Thu May 14 03:51:55 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 612A0106566B; Thu, 14 May 2009 03:51:55 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4E8F08FC17; Thu, 14 May 2009 03:51:55 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4E3prbg076342; Thu, 14 May 2009 03:51:53 GMT (envelope-from brooks@svn.freebsd.org) Received: (from brooks@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4E3prO8076340; Thu, 14 May 2009 03:51:53 GMT (envelope-from brooks@svn.freebsd.org) Message-Id: <200905140351.n4E3prO8076340@svn.freebsd.org> From: Brooks Davis Date: Thu, 14 May 2009 03:51:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192083 - in projects/ngroups: lib/libc/rpc usr.sbin/mountd X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 03:51:55 -0000 Author: brooks Date: Thu May 14 03:51:53 2009 New Revision: 192083 URL: http://svn.freebsd.org/changeset/base/192083 Log: Switch a couple instances of NGROUPS to NGRPS where the use case is RPC credentials. Modified: projects/ngroups/lib/libc/rpc/netnamer.c projects/ngroups/usr.sbin/mountd/mountd.c Modified: projects/ngroups/lib/libc/rpc/netnamer.c ============================================================================== --- projects/ngroups/lib/libc/rpc/netnamer.c Thu May 14 03:42:58 2009 (r192082) +++ projects/ngroups/lib/libc/rpc/netnamer.c Thu May 14 03:51:53 2009 (r192083) @@ -66,10 +66,6 @@ static char *NETIDFILE = "/etc/netid" static int getnetid( char *, char * ); static int _getgroups( char *, gid_t * ); -#ifndef NGROUPS -#define NGROUPS 16 -#endif - /* * Convert network-name into unix credential */ @@ -104,7 +100,7 @@ netname2user(netname, uidp, gidp, gidlen return (0); } *gidp = (gid_t) atol(p); - for (gidlen = 0; gidlen < NGROUPS; gidlen++) { + for (gidlen = 0; gidlen < NGRPS; gidlen++) { p = strsep(&res, "\n,"); if (p == NULL) break; @@ -157,7 +153,7 @@ netname2user(netname, uidp, gidp, gidlen static int _getgroups(uname, groups) char *uname; - gid_t groups[NGROUPS]; + gid_t groups[NGRPS]; { gid_t ngroups = 0; struct group *grp; @@ -169,7 +165,7 @@ _getgroups(uname, groups) while ((grp = getgrent())) { for (i = 0; grp->gr_mem[i]; i++) if (!strcmp(grp->gr_mem[i], uname)) { - if (ngroups == NGROUPS) { + if (ngroups == NGRPS) { #ifdef DEBUG fprintf(stderr, "initgroups: %s is in too many groups\n", uname); Modified: projects/ngroups/usr.sbin/mountd/mountd.c ============================================================================== --- projects/ngroups/usr.sbin/mountd/mountd.c Thu May 14 03:42:58 2009 (r192082) +++ projects/ngroups/usr.sbin/mountd/mountd.c Thu May 14 03:51:53 2009 (r192083) @@ -2473,7 +2473,7 @@ parsecred(namelist, cr) char *names; struct passwd *pw; struct group *gr; - gid_t groups[NGROUPS + 1]; + gid_t groups[NGRPS + 1]; int ngroups; cr->cr_version = XUCRED_VERSION; @@ -2501,7 +2501,7 @@ parsecred(namelist, cr) return; } cr->cr_uid = pw->pw_uid; - ngroups = NGROUPS + 1; + ngroups = NGRPS + 1; if (getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups)) syslog(LOG_ERR, "too many groups"); /* @@ -2526,7 +2526,7 @@ parsecred(namelist, cr) return; } cr->cr_ngroups = 0; - while (names != NULL && *names != '\0' && cr->cr_ngroups < NGROUPS) { + while (names != NULL && *names != '\0' && cr->cr_ngroups < NGRPS) { name = strsep(&names, ":"); if (isdigit(*name) || *name == '-') { cr->cr_groups[cr->cr_ngroups++] = atoi(name); @@ -2538,7 +2538,7 @@ parsecred(namelist, cr) cr->cr_groups[cr->cr_ngroups++] = gr->gr_gid; } } - if (names != NULL && *names != '\0' && cr->cr_ngroups == NGROUPS) + if (names != NULL && *names != '\0' && cr->cr_ngroups == NGRPS) syslog(LOG_ERR, "too many groups"); } From owner-svn-src-projects@FreeBSD.ORG Thu May 14 03:54:04 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 53CF6106564A; Thu, 14 May 2009 03:54:04 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 420CF8FC12; Thu, 14 May 2009 03:54:04 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4E3s4Yr076418; Thu, 14 May 2009 03:54:04 GMT (envelope-from brooks@svn.freebsd.org) Received: (from brooks@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4E3s4Op076417; Thu, 14 May 2009 03:54:04 GMT (envelope-from brooks@svn.freebsd.org) Message-Id: <200905140354.n4E3s4Op076417@svn.freebsd.org> From: Brooks Davis Date: Thu, 14 May 2009 03:54:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192084 - projects/ngroups/lib/libkvm X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 03:54:04 -0000 Author: brooks Date: Thu May 14 03:54:03 2009 New Revision: 192084 URL: http://svn.freebsd.org/changeset/base/192084 Log: Only copy as many groups from cr_groups to ki_groups as will fit. Truncate if there are too many. Modified: projects/ngroups/lib/libkvm/kvm_proc.c Modified: projects/ngroups/lib/libkvm/kvm_proc.c ============================================================================== --- projects/ngroups/lib/libkvm/kvm_proc.c Thu May 14 03:51:53 2009 (r192083) +++ projects/ngroups/lib/libkvm/kvm_proc.c Thu May 14 03:54:03 2009 (r192084) @@ -147,7 +147,8 @@ kvm_proclist(kd, what, arg, p, bp, maxcn kp->ki_svgid = ucred.cr_svgid; kp->ki_ngroups = ucred.cr_ngroups; bcopy(ucred.cr_groups, kp->ki_groups, - NGROUPS * sizeof(gid_t)); + (NGROUPS < KI_NGROUPS ? NGROUPS : KI_NGROUPS) * + sizeof(gid_t)); kp->ki_uid = ucred.cr_uid; if (ucred.cr_prison != NULL) { if (KREAD(kd, (u_long)ucred.cr_prison, &pr)) { From owner-svn-src-projects@FreeBSD.ORG Thu May 14 06:48:39 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 318761065675; Thu, 14 May 2009 06:48:39 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 201768FC08; Thu, 14 May 2009 06:48:39 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4E6md03079839; Thu, 14 May 2009 06:48:39 GMT (envelope-from brooks@svn.freebsd.org) Received: (from brooks@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4E6md8f079838; Thu, 14 May 2009 06:48:39 GMT (envelope-from brooks@svn.freebsd.org) Message-Id: <200905140648.n4E6md8f079838@svn.freebsd.org> From: Brooks Davis Date: Thu, 14 May 2009 06:48:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192086 - projects/ngroups/lib/libc/rpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 06:48:39 -0000 Author: brooks Date: Thu May 14 06:48:38 2009 New Revision: 192086 URL: http://svn.freebsd.org/changeset/base/192086 Log: Don't ifndef NGROUPS for a base system program. If it's not defined, we shouldn't be using it. Modified: projects/ngroups/lib/libc/rpc/netname.c Modified: projects/ngroups/lib/libc/rpc/netname.c ============================================================================== --- projects/ngroups/lib/libc/rpc/netname.c Thu May 14 05:27:09 2009 (r192085) +++ projects/ngroups/lib/libc/rpc/netname.c Thu May 14 06:48:38 2009 (r192086) @@ -61,9 +61,6 @@ __FBSDID("$FreeBSD$"); #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN 256 #endif -#ifndef NGROUPS -#define NGROUPS 16 -#endif #define TYPE_BIT(type) (sizeof (type) * CHAR_BIT) From owner-svn-src-projects@FreeBSD.ORG Thu May 14 06:50:31 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 865DB106566B; Thu, 14 May 2009 06:50:31 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 70FCB8FC19; Thu, 14 May 2009 06:50:31 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4E6oVjx079922; Thu, 14 May 2009 06:50:31 GMT (envelope-from brooks@svn.freebsd.org) Received: (from brooks@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4E6oURU079910; Thu, 14 May 2009 06:50:30 GMT (envelope-from brooks@svn.freebsd.org) Message-Id: <200905140650.n4E6oURU079910@svn.freebsd.org> From: Brooks Davis Date: Thu, 14 May 2009 06:50:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192087 - in projects/ngroups: lib/libc/gen lib/libc/rpc lib/libc/sys usr.bin/id usr.bin/newgrp usr.bin/quota usr.sbin/chown usr.sbin/chroot usr.sbin/jail usr.sbin/jexec usr.sbin/lpr/lpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 06:50:31 -0000 Author: brooks Date: Thu May 14 06:50:30 2009 New Revision: 192087 URL: http://svn.freebsd.org/changeset/base/192087 Log: Use to value returned by sysconf(_SC_NGROUPS_MAX) in favor of NGROUPS_MAX or NGROUPS since POSIX says that NGROUPS_MAX represents a lower bound on sysconf(_SC_NGROUPS_MAX). Modified: projects/ngroups/lib/libc/gen/initgroups.c projects/ngroups/lib/libc/rpc/auth_unix.c projects/ngroups/lib/libc/sys/getgroups.2 projects/ngroups/lib/libc/sys/setgroups.2 projects/ngroups/usr.bin/id/id.c projects/ngroups/usr.bin/newgrp/newgrp.c projects/ngroups/usr.bin/quota/quota.c projects/ngroups/usr.sbin/chown/chown.c projects/ngroups/usr.sbin/chroot/chroot.c projects/ngroups/usr.sbin/jail/jail.c projects/ngroups/usr.sbin/jexec/jexec.c projects/ngroups/usr.sbin/lpr/lpc/lpc.c Modified: projects/ngroups/lib/libc/gen/initgroups.c ============================================================================== --- projects/ngroups/lib/libc/gen/initgroups.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/lib/libc/gen/initgroups.c Thu May 14 06:50:30 2009 (r192087) @@ -35,10 +35,12 @@ __FBSDID("$FreeBSD$"); #include +#include #include #include "namespace.h" #include #include "un-namespace.h" +#include #include int @@ -46,14 +48,20 @@ initgroups(uname, agroup) const char *uname; gid_t agroup; { - int ngroups; + int ngroups, ret; + gid_t *groups; + /* - * Provide space for one group more than NGROUPS to allow + * Provide space for one group more than possible to allow * setgroups to fail and set errno. */ - gid_t groups[NGROUPS + 1]; + ngroups = sysconf(_SC_NGROUPS_MAX) + 1; + groups = malloc(sizeof(gid_t)*ngroups); + if (groups == NULL) + return (ENOSPC); - ngroups = NGROUPS + 1; getgrouplist(uname, agroup, groups, &ngroups); - return (setgroups(ngroups, groups)); + ret = setgroups(ngroups, groups); + free(groups); + return(ret); } Modified: projects/ngroups/lib/libc/rpc/auth_unix.c ============================================================================== --- projects/ngroups/lib/libc/rpc/auth_unix.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/lib/libc/rpc/auth_unix.c Thu May 14 06:50:30 2009 (r192087) @@ -185,23 +185,28 @@ authunix_create(machname, uid, gid, len, AUTH * authunix_create_default() { - int len; + int ngids; char machname[MAXHOSTNAMELEN + 1]; uid_t uid; gid_t gid; - gid_t gids[NGROUPS_MAX]; + gid_t *gids; + + ngids = sysconf(_SC_NGROUPS_MAX); + gids = malloc(sizeof(gid_t) * ngids); + if (gids == NULL) + return (NULL); if (gethostname(machname, sizeof machname) == -1) abort(); machname[sizeof(machname) - 1] = 0; uid = geteuid(); gid = getegid(); - if ((len = getgroups(NGROUPS_MAX, gids)) < 0) + if ((ngids = getgroups(NGROUPS_MAX, gids)) < 0) abort(); - if (len > NGRPS) - len = NGRPS; + if (ngids > NGRPS) + ngids = NGRPS; /* XXX: interface problem; those should all have been unsigned */ - return (authunix_create(machname, (int)uid, (int)gid, len, + return (authunix_create(machname, (int)uid, (int)gid, ngids, (int *)gids)); } Modified: projects/ngroups/lib/libc/sys/getgroups.2 ============================================================================== --- projects/ngroups/lib/libc/sys/getgroups.2 Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/lib/libc/sys/getgroups.2 Thu May 14 06:50:30 2009 (r192087) @@ -59,7 +59,7 @@ system call returns the actual number of groups returned in .Fa gidset . No more than -.Dv NGROUPS_MAX +.Fn sysconf _SC_NGROUPS_MAX will ever be returned. If @@ -91,7 +91,8 @@ an invalid address. .El .Sh SEE ALSO .Xr setgroups 2 , -.Xr initgroups 3 +.Xr initgroups 3 , +.Xr sysconf 3 .Sh HISTORY The .Fn getgroups Modified: projects/ngroups/lib/libc/sys/setgroups.2 ============================================================================== --- projects/ngroups/lib/libc/sys/setgroups.2 Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/lib/libc/sys/setgroups.2 Thu May 14 06:50:30 2009 (r192087) @@ -53,9 +53,7 @@ The argument indicates the number of entries in the array and must be no more than -.Dv NGROUPS , -as defined in -.In sys/param.h . +.Fn sysconf _SC_NGROUPS_MAX . .Pp Only the super-user may set a new group list. .Sh RETURN VALUES @@ -71,7 +69,7 @@ The caller is not the super-user. The number specified in the .Fa ngroups argument is larger than the -.Dv NGROUPS +.Fn sysconf _SC_NGROUPS_MAX limit. .It Bq Er EFAULT The address specified for Modified: projects/ngroups/usr.bin/id/id.c ============================================================================== --- projects/ngroups/usr.bin/id/id.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/usr.bin/id/id.c Thu May 14 06:50:30 2009 (r192087) @@ -257,8 +257,8 @@ id_print(struct passwd *pw, int use_ggl, struct group *gr; gid_t gid, egid, lastgid; uid_t uid, euid; - int cnt, ngroups; - gid_t groups[NGROUPS + 1]; + int cnt, ngroups, ngroups_max; + gid_t *groups; const char *fmt; if (pw != NULL) { @@ -270,12 +270,16 @@ id_print(struct passwd *pw, int use_ggl, gid = getgid(); } + ngroups_max = sysconf(_SC_NGROUPS_MAX); + if ((groups = malloc(sizeof(gid_t) * (ngroups_max + 1))) == NULL) + err(1, "malloc"); + if (use_ggl && pw != NULL) { - ngroups = NGROUPS + 1; + ngroups = ngroups_max + 1; getgrouplist(pw->pw_name, gid, groups, &ngroups); } else { - ngroups = getgroups(NGROUPS + 1, groups); + ngroups = getgroups(ngroups_max + 1, groups); } if (pw != NULL) @@ -306,6 +310,7 @@ id_print(struct passwd *pw, int use_ggl, lastgid = gid; } printf("\n"); + free(groups); } #ifdef USE_BSM_AUDIT @@ -360,16 +365,20 @@ void group(struct passwd *pw, int nflag) { struct group *gr; - int cnt, id, lastid, ngroups; - gid_t groups[NGROUPS + 1]; + int cnt, id, lastid, ngroups, ngroups_max; + gid_t *groups; const char *fmt; + ngroups_max = sysconf(_SC_NGROUPS_MAX); + if ((groups = malloc(sizeof(gid_t) * (ngroups_max + 1))) == NULL) + err(1, "malloc"); + if (pw) { - ngroups = NGROUPS + 1; + ngroups = ngroups_max + 1; (void) getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups); } else { groups[0] = getgid(); - ngroups = getgroups(NGROUPS, groups + 1) + 1; + ngroups = getgroups(ngroups_max, groups + 1) + 1; } fmt = nflag ? "%s" : "%u"; for (lastid = -1, cnt = 0; cnt < ngroups; ++cnt) { @@ -389,6 +398,7 @@ group(struct passwd *pw, int nflag) lastid = id; } (void)printf("\n"); + free(groups); } void Modified: projects/ngroups/usr.bin/newgrp/newgrp.c ============================================================================== --- projects/ngroups/usr.bin/newgrp/newgrp.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/usr.bin/newgrp/newgrp.c Thu May 14 06:50:30 2009 (r192087) @@ -146,9 +146,9 @@ restoregrps(void) static void addgroup(const char *grpname) { - gid_t grps[NGROUPS_MAX]; + gid_t *grps; long lgid; - int dbmember, i, ngrps; + int dbmember, i, ngrps, ngrps_max; gid_t egid; struct group *grp; char *ep, *pass; @@ -185,7 +185,10 @@ addgroup(const char *grpname) } } - if ((ngrps = getgroups(NGROUPS_MAX, (gid_t *)grps)) < 0) { + ngrps_max = sysconf(_SC_NGROUPS_MAX); + if ((grps = malloc(sizeof(gid_t) * ngrps_max)) == NULL) + err(1, "malloc"); + if ((ngrps = getgroups(ngrps_max, (gid_t *)grps)) < 0) { warn("getgroups"); return; } @@ -217,7 +220,7 @@ addgroup(const char *grpname) /* Add old effective gid to supp. list if it does not exist. */ if (egid != grp->gr_gid && !inarray(egid, grps, ngrps)) { - if (ngrps == NGROUPS_MAX) + if (ngrps == ngrps_max) warnx("too many groups"); else { grps[ngrps++] = egid; @@ -231,6 +234,7 @@ addgroup(const char *grpname) } } + free(grps); } static int Modified: projects/ngroups/usr.bin/quota/quota.c ============================================================================== --- projects/ngroups/usr.bin/quota/quota.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/usr.bin/quota/quota.c Thu May 14 06:50:30 2009 (r192087) @@ -117,7 +117,7 @@ int main(int argc, char *argv[]) { int ngroups; - gid_t mygid, gidset[NGROUPS]; + gid_t mygid, *gidset; int i, ch, gflag = 0, uflag = 0, errflag = 0; while ((ch = getopt(argc, argv, "f:ghlrquv")) != -1) { @@ -159,13 +159,17 @@ main(int argc, char *argv[]) errflag += showuid(getuid()); if (gflag) { mygid = getgid(); - ngroups = getgroups(NGROUPS, gidset); + ngroups = sysconf(_SC_NGROUPS_MAX); + if ((gidset = malloc(sizeof(gid_t) * ngroups)) == NULL) + err(1, "malloc"); + ngroups = getgroups(ngroups, gidset); if (ngroups < 0) err(1, "getgroups"); errflag += showgid(mygid); for (i = 0; i < ngroups; i++) if (gidset[i] != mygid) errflag += showgid(gidset[i]); + free(gidset); } return(errflag); } Modified: projects/ngroups/usr.sbin/chown/chown.c ============================================================================== --- projects/ngroups/usr.sbin/chown/chown.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/usr.sbin/chown/chown.c Thu May 14 06:50:30 2009 (r192087) @@ -268,8 +268,8 @@ void chownerr(const char *file) { static uid_t euid = -1; - static int ngroups = -1; - gid_t groups[NGROUPS_MAX]; + static int ngroups = -1, ngroups_max; + gid_t *groups; /* Check for chown without being root. */ if (errno != EPERM || (uid != (uid_t)-1 && @@ -281,7 +281,10 @@ chownerr(const char *file) /* Check group membership; kernel just returns EPERM. */ if (gid != (gid_t)-1 && ngroups == -1 && euid == (uid_t)-1 && (euid = geteuid()) != 0) { - ngroups = getgroups(NGROUPS_MAX, groups); + ngroups_max = sysconf(_SC_NGROUPS_MAX); + if ((groups = malloc(sizeof(gid_t) * ngroups_max)) == NULL) + err(1, "malloc"); + ngroups = getgroups(ngroups_max, groups); while (--ngroups >= 0 && gid != groups[ngroups]); if (ngroups < 0) { warnx("you are not a member of group %s", gname); Modified: projects/ngroups/usr.sbin/chroot/chroot.c ============================================================================== --- projects/ngroups/usr.sbin/chroot/chroot.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/usr.sbin/chroot/chroot.c Thu May 14 06:50:30 2009 (r192087) @@ -69,9 +69,9 @@ main(argc, argv) struct passwd *pw; char *endp, *p; const char *shell; - gid_t gid, gidlist[NGROUPS_MAX]; + gid_t gid, *gidlist; uid_t uid; - int ch, gids; + int ch, gids, ngroups_max; gid = 0; uid = 0; @@ -117,8 +117,11 @@ main(argc, argv) } } + ngroups_max = sysconf(_SC_NGROUPS_MAX); + if ((gidlist = malloc(sizeof(gid_t) * ngroups_max)) == NULL) + err(1, "malloc"); for (gids = 0; - (p = strsep(&grouplist, ",")) != NULL && gids < NGROUPS_MAX; ) { + (p = strsep(&grouplist, ",")) != NULL && gids < ngroups_max; ) { if (*p == '\0') continue; @@ -135,7 +138,7 @@ main(argc, argv) } gids++; } - if (p != NULL && gids == NGROUPS_MAX) + if (p != NULL && gids == ngroups_max) errx(1, "too many supplementary groups provided"); if (user != NULL) { Modified: projects/ngroups/usr.sbin/jail/jail.c ============================================================================== --- projects/ngroups/usr.sbin/jail/jail.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/usr.sbin/jail/jail.c Thu May 14 06:50:30 2009 (r192087) @@ -85,7 +85,7 @@ STAILQ_HEAD(addr6head, addr6entry) addr6 lcap = login_getpwclass(pwd); \ if (lcap == NULL) \ err(1, "getpwclass: %s", username); \ - ngroups = NGROUPS; \ + ngroups = ngroups_max; \ if (getgrouplist(username, pwd->pw_gid, groups, &ngroups) != 0) \ err(1, "getgrouplist: %s", username); \ } while (0) @@ -96,8 +96,8 @@ main(int argc, char **argv) login_cap_t *lcap = NULL; struct jail j; struct passwd *pwd = NULL; - gid_t groups[NGROUPS]; - int ch, error, i, ngroups, securelevel; + gid_t *groups = NULL; + int ch, error, i, ngroups, ngroups_max, securelevel; int hflag, iflag, Jflag, lflag, uflag, Uflag; char path[PATH_MAX], *jailname, *ep, *username, *JidFile, *ip; static char *cleanenv; @@ -111,6 +111,10 @@ main(int argc, char **argv) jailname = username = JidFile = cleanenv = NULL; fp = NULL; + ngroups_max = sysconf(_SC_NGROUPS_MAX); + if ((groups = malloc(sizeof(gid_t) * ngroups_max)) == NULL) + err(1, "malloc"); + while ((ch = getopt(argc, argv, "hiln:s:u:U:J:")) != -1) { switch (ch) { case 'h': Modified: projects/ngroups/usr.sbin/jexec/jexec.c ============================================================================== --- projects/ngroups/usr.sbin/jexec/jexec.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/usr.sbin/jexec/jexec.c Thu May 14 06:50:30 2009 (r192087) @@ -202,7 +202,7 @@ lookup_jail(int jid, char *jailname) lcap = login_getpwclass(pwd); \ if (lcap == NULL) \ err(1, "getpwclass: %s", username); \ - ngroups = NGROUPS; \ + ngroups = ngroups_max; \ if (getgrouplist(username, pwd->pw_gid, groups, &ngroups) != 0) \ err(1, "getgrouplist: %s", username); \ } while (0) @@ -213,14 +213,18 @@ main(int argc, char *argv[]) int jid; login_cap_t *lcap = NULL; struct passwd *pwd = NULL; - gid_t groups[NGROUPS]; - int ch, ngroups, uflag, Uflag; + gid_t *groups = NULL; + int ch, ngroups, ngroups_max, uflag, Uflag; char *jailname, *username; ch = uflag = Uflag = 0; jailname = username = NULL; jid = -1; + ngroups_max = sysconf(_SC_NGROUPS_MAX); + if ((groups = malloc(sizeof(gid_t) * ngroups_max)) == NULL) + err(1, "malloc"); + while ((ch = getopt(argc, argv, "i:n:u:U:")) != -1) { switch (ch) { case 'n': Modified: projects/ngroups/usr.sbin/lpr/lpc/lpc.c ============================================================================== --- projects/ngroups/usr.sbin/lpr/lpc/lpc.c Thu May 14 06:48:38 2009 (r192086) +++ projects/ngroups/usr.sbin/lpr/lpc/lpc.c Thu May 14 06:50:30 2009 (r192087) @@ -356,7 +356,7 @@ ingroup(const char *grname) { static struct group *gptr=NULL; static int ngroups = 0; - static gid_t groups[NGROUPS]; + static gid_t *groups; register gid_t gid; register int i; @@ -365,7 +365,10 @@ ingroup(const char *grname) warnx("warning: unknown group '%s'", grname); return(0); } - ngroups = getgroups(NGROUPS, groups); + ngroups = sysconf(_SC_NGROUPS_MAX); + if ((groups = malloc(sizeof(gid_t) * ngroups)) == NULL) + err(1, "malloc"); + ngroups = getgroups(ngroups, groups); if (ngroups < 0) err(1, "getgroups"); } From owner-svn-src-projects@FreeBSD.ORG Thu May 14 10:43:00 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 026F3106564A; Thu, 14 May 2009 10:43:00 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E67778FC12; Thu, 14 May 2009 10:42:59 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EAgxBW088524; Thu, 14 May 2009 10:42:59 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EAgxJI088523; Thu, 14 May 2009 10:42:59 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141042.n4EAgxJI088523@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 10:42:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192091 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 10:43:00 -0000 Author: rpaulo Date: Thu May 14 10:42:59 2009 New Revision: 192091 URL: http://svn.freebsd.org/changeset/base/192091 Log: Use the same format string for debugging peering frames. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_output.c Modified: projects/mesh11s/sys/net80211/ieee80211_output.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_output.c Thu May 14 09:28:02 2009 (r192090) +++ projects/mesh11s/sys/net80211/ieee80211_output.c Thu May 14 10:42:59 2009 (r192091) @@ -677,7 +677,7 @@ ieee80211_send_action(struct ieee80211_n case IEEE80211_ACTION_MESHPEERING_OPEN: IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, - "send PEER OPEN action: lid %x", args[0]); + "send PEER OPEN action: localid 0x%x", args[0]); ADDSHORT(frm, getcapinfo(vap, ni->ni_chan)); frm = ieee80211_add_rates(frm, rs); frm = ieee80211_add_xrates(frm, rs); @@ -702,8 +702,8 @@ ieee80211_send_action(struct ieee80211_n case IEEE80211_ACTION_MESHPEERING_CONFIRM: IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, - "send PEER CONFIRM action: lid %x, pid %x", - args[0], args[1]); + "send PEER CONFIRM action: localid 0x%x, " + "peerid 0x%x", args[0], args[1]); ADDSHORT(frm, getcapinfo(vap, ni->ni_chan)); ADDSHORT(frm, 0); /* status code */ ADDSHORT(frm, 0); /* AID */ @@ -726,8 +726,8 @@ ieee80211_send_action(struct ieee80211_n case IEEE80211_ACTION_MESHPEERING_CLOSE: IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, - "sending PEER CLOSE action: localid %x peerid %x " - "reason %d", args[0], args[1], args[2]); + "sending PEER CLOSE action: localid 0x%x, " + "peerid 0x%x reason %d", args[0], args[1], args[2]); ADDSHORT(frm, args[2]); /* reason code */ frm = ieee80211_add_meshid(frm, vap); frm = ieee80211_add_meshpeer(frm, From owner-svn-src-projects@FreeBSD.ORG Thu May 14 10:43:57 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F1DAA106564A; Thu, 14 May 2009 10:43:57 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C8C6B8FC13; Thu, 14 May 2009 10:43:57 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EAhvHX088578; Thu, 14 May 2009 10:43:57 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EAhvDW088576; Thu, 14 May 2009 10:43:57 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141043.n4EAhvDW088576@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 10:43:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192092 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 10:43:58 -0000 Author: rpaulo Date: Thu May 14 10:43:57 2009 New Revision: 192092 URL: http://svn.freebsd.org/changeset/base/192092 Log: * remove non usable code * mark mesh nodes qos capable. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_node.c Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu May 14 10:42:59 2009 (r192091) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu May 14 10:43:57 2009 (r192092) @@ -488,6 +488,10 @@ mesh_recv_mgmt(struct ieee80211_node *ni */ ni = ieee80211_add_neighbor(vap, wh, &scan); /* + * Mesh nodes must be QoS capable. + */ + ni->ni_flags |= IEEE80211_NODE_QOS; + /* * Try to peer with this node. */ get_random_bytes(&ni->ni_plid, 2); @@ -938,25 +942,6 @@ mesh_verify_meshconf(struct ieee80211vap } /* - * Parse a MESH ID ie on station join. - */ -void -ieee80211_parse_meshid(struct ieee80211_node *ni, const uint8_t *ie) -{ - struct ieee80211vap *vap = ni->ni_vap; - - if (vap->iv_caps & IEEE80211_C_MBSS) { - /*const struct ieee80211_meshid_ie *meshid = - (const struct ieee80211_meshid_ie *)ie;*/ - - /* - * Mesh STAs are QoS stations, so QoS is not optional. - */ - ni->ni_flags |= IEEE80211_NODE_QOS; - } -} - -/* * Add a MESH ID element to a frame. */ uint8_t * Modified: projects/mesh11s/sys/net80211/ieee80211_node.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_node.c Thu May 14 10:42:59 2009 (r192091) +++ projects/mesh11s/sys/net80211/ieee80211_node.c Thu May 14 10:43:57 2009 (r192092) @@ -785,8 +785,6 @@ ieee80211_sta_join(struct ieee80211vap * if (ni->ni_ies.tdma_ie != NULL) ieee80211_parse_tdma(ni, ni->ni_ies.tdma_ie); #endif - if (ni->ni_ies.meshid_ie != NULL) - ieee80211_parse_meshid(ni, ni->ni_ies.meshid_ie); } vap->iv_dtim_period = se->se_dtimperiod; From owner-svn-src-projects@FreeBSD.ORG Thu May 14 10:47:12 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 15E5B1065670; Thu, 14 May 2009 10:47:12 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 04F178FC08; Thu, 14 May 2009 10:47:12 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EAlBrn088700; Thu, 14 May 2009 10:47:11 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EAlBxf088699; Thu, 14 May 2009 10:47:11 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141047.n4EAlBxf088699@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 10:47:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192093 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 10:47:12 -0000 Author: rpaulo Date: Thu May 14 10:47:11 2009 New Revision: 192093 URL: http://svn.freebsd.org/changeset/base/192093 Log: Remove wrong assignment. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_output.c Modified: projects/mesh11s/sys/net80211/ieee80211_output.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_output.c Thu May 14 10:43:57 2009 (r192092) +++ projects/mesh11s/sys/net80211/ieee80211_output.c Thu May 14 10:47:11 2009 (r192093) @@ -1216,7 +1216,6 @@ ieee80211_encap(struct ieee80211vap *vap */ addqos = (ni->ni_flags & (IEEE80211_NODE_QOS|IEEE80211_NODE_HT)) && (m->m_flags & M_EAPOL) == 0; - addqos = 1; if (addqos) hdrsize = sizeof(struct ieee80211_qosframe); else From owner-svn-src-projects@FreeBSD.ORG Thu May 14 14:01:00 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DC325106566B; Thu, 14 May 2009 14:01:00 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CAB9A8FC24; Thu, 14 May 2009 14:01:00 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EE10gG093096; Thu, 14 May 2009 14:01:00 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EE10vB093095; Thu, 14 May 2009 14:01:00 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141401.n4EE10vB093095@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 14:01:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192099 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 14:01:01 -0000 Author: rpaulo Date: Thu May 14 14:01:00 2009 New Revision: 192099 URL: http://svn.freebsd.org/changeset/base/192099 Log: Add net.wlan.mesh.ttl sysctl. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_freebsd.c Modified: projects/mesh11s/sys/net80211/ieee80211_freebsd.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_freebsd.c Thu May 14 13:36:39 2009 (r192098) +++ projects/mesh11s/sys/net80211/ieee80211_freebsd.c Thu May 14 14:01:00 2009 (r192099) @@ -70,6 +70,12 @@ extern int ieee80211_cac_timeout; SYSCTL_INT(_net_wlan, OID_AUTO, cac_timeout, CTLFLAG_RW, &ieee80211_cac_timeout, 0, "CAC timeout (secs)"); +SYSCTL_NODE(_net_wlan, OID_AUTO, mesh, CTLFLAG_RD, 0, + "IEEE 802.11s parameters"); +extern int ieee80211_mesh_ttl; +SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLFLAG_RW, + &ieee80211_mesh_ttl, 0, "TTL for mesh packets"); + MALLOC_DEFINE(M_80211_COM, "80211com", "802.11 com state"); /* From owner-svn-src-projects@FreeBSD.ORG Thu May 14 14:02:00 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 81B4C1065673; Thu, 14 May 2009 14:02:00 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 636EB8FC13; Thu, 14 May 2009 14:02:00 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EE206k093152; Thu, 14 May 2009 14:02:00 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EE20Xi093151; Thu, 14 May 2009 14:02:00 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141402.n4EE20Xi093151@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 14:02:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192100 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 14:02:02 -0000 Author: rpaulo Date: Thu May 14 14:02:00 2009 New Revision: 192100 URL: http://svn.freebsd.org/changeset/base/192100 Log: * use C99 inline * implement remaining mesh peering timers Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu May 14 14:01:00 2009 (r192099) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu May 14 14:02:00 2009 (r192100) @@ -69,18 +69,25 @@ static int mesh_input(struct ieee80211_n static void mesh_recv_mgmt(struct ieee80211_node *, struct mbuf *, int, int, int, uint32_t); static void mesh_recv_action(struct ieee80211_node *, struct mbuf *); -static __inline void mesh_peer_timeout_setup(struct ieee80211_node *); +static inline void mesh_peer_timeout_setup(struct ieee80211_node *); static void mesh_peer_timeout_backoff(struct ieee80211_node *); static void mesh_peer_timeout_cb(void *); -static __inline void mesh_peer_timeout_stop(struct ieee80211_node *); +static inline void mesh_peer_timeout_stop(struct ieee80211_node *); static int mesh_verify_meshid(struct ieee80211vap *, struct ieee80211_meshid_ie *); static int mesh_verify_meshconf(struct ieee80211vap *, struct ieee80211_meshconf_ie *); -int ieee80211_mesh_retrytimeout = 40; /* 40 miliseconds */ +/* timeout values in miliseconds */ +static const int ieee80211_mesh_retrytimeout = 40; #define RETRY_TIMEOUT msecs_to_ticks(ieee80211_mesh_retrytimeout) -int ieee80211_mesh_maxretries = 60; +static const int ieee80211_mesh_holdingtimeout = 40; +#define HOLDING_TIMEOUT msecs_to_ticks(ieee80211_mesh_holdingtimeout) +static const int ieee80211_mesh_confirmtimeout = 40; +#define CONFIRM_TIMEOUT msecs_to_ticks(ieee80211_mesh_confirmtimeout) +static const int ieee80211_mesh_maxretries = 2; +/* non static for sysctl hookup */ +int ieee80211_mesh_ttl = 31; /* unalligned little endian access */ #define LE_READ_2(p) \ @@ -204,7 +211,7 @@ mesh_newstate(struct ieee80211vap *vap, * of the less interesting frames that come frequently * (e.g. beacons). */ -static __inline int +static inline int doprint(struct ieee80211vap *vap, int subtype) { switch (subtype) { @@ -824,11 +831,21 @@ mesh_recv_action(struct ieee80211_node * } } -static __inline void +static inline void mesh_peer_timeout_setup(struct ieee80211_node *ni) { - ni->ni_mtimerval = RETRY_TIMEOUT; - callout_reset(&ni->ni_mtimer, RETRY_TIMEOUT, mesh_peer_timeout_cb, ni); + switch (ni->ni_peerstate) { + case IEEE80211_NODE_MESH_HOLDING: + ni->ni_mtimerval = HOLDING_TIMEOUT; + break; + case IEEE80211_NODE_MESH_CONFIRMRECV: + ni->ni_mtimerval = CONFIRM_TIMEOUT; + break; + default: + ni->ni_mtimerval = RETRY_TIMEOUT; + } + callout_reset(&ni->ni_mtimer, ni->ni_mtimerval, mesh_peer_timeout_cb, + ni); } /* @@ -845,7 +862,7 @@ mesh_peer_timeout_backoff(struct ieee802 ni); } -static __inline void +static inline void mesh_peer_timeout_stop(struct ieee80211_node *ni) { callout_stop(&ni->ni_mtimer); @@ -920,7 +937,7 @@ mesh_peer_timeout_cb(void *arg) } } -static __inline int +static inline int mesh_verify_meshid(struct ieee80211vap *vap, struct ieee80211_meshid_ie *meshid) { From owner-svn-src-projects@FreeBSD.ORG Thu May 14 14:03:15 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EC81A106566C; Thu, 14 May 2009 14:03:14 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DB50A8FC1D; Thu, 14 May 2009 14:03:14 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EE3ElC093211; Thu, 14 May 2009 14:03:14 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EE3ElJ093210; Thu, 14 May 2009 14:03:14 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141403.n4EE3ElJ093210@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 14:03:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192101 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 14:03:16 -0000 Author: rpaulo Date: Thu May 14 14:03:14 2009 New Revision: 192101 URL: http://svn.freebsd.org/changeset/base/192101 Log: Fix added spaces. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 14:02:00 2009 (r192100) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 14:03:14 2009 (r192101) @@ -2,7 +2,7 @@ * Copyright (c) 2009 The FreeBSD Foundation * All rights reserved. * - * This software was developed by Rui Paulo under sponsorship from the + * This software was developed by Rui Paulo under sponsorship from the * FreeBSD Foundation. * * Redistribution and use in source and binary forms, with or without From owner-svn-src-projects@FreeBSD.ORG Thu May 14 14:13:57 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7B881106566C; Thu, 14 May 2009 14:13:57 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 69F958FC23; Thu, 14 May 2009 14:13:57 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EEDv4Z093442; Thu, 14 May 2009 14:13:57 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EEDv9x093441; Thu, 14 May 2009 14:13:57 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141413.n4EEDv9x093441@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 14:13:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192102 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 14:13:57 -0000 Author: rpaulo Date: Thu May 14 14:13:57 2009 New Revision: 192102 URL: http://svn.freebsd.org/changeset/base/192102 Log: Fill in mesh path request/reply IEs. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 14:03:14 2009 (r192101) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 14:13:57 2009 (r192102) @@ -212,14 +212,37 @@ struct ieee80211_meshrann_ie { struct ieee80211_meshpreq_ie { uint8_t preq_ie; /* IEEE80211_ELEMID_MESHPREQ */ uint8_t preq_len; - /* XXXRP: TBD */ + uint8_t preq_flags; + uint8_t preq_hopcount; + uint8_t preq_ttl; + uint8_t preq_id; + uint8_t preq_origaddr[IEEE80211_ADDR_LEN]; + uint32_t preq_origseq; + /* NB: may have Originator Proxied Address */ + uint32_t preq_lifetime; + uint32_t preq_metric; + uint8_t preq_tcount; /* target count */ + struct { + uint8_t target_flags + uint8_t target_addr[IEEE80211_ADDR_LEN]; + uint32_t target_seq; + } targets[1] __packed; /* NB: variable size */ } __packed; /* Mesh Path Reply */ struct ieee80211_meshprep_ie { uint8_t prep_ie; /* IEEE80211_ELEMID_MESHPREP */ uint8_t prep_len; - /* XXXRP: TBD */ + uint8_t prep_flags; + uint8_t prep_hopcount; + uint8_t prep_ttl; + uint8_t prep_targetaddr[IEEE80211_ADDR_LEN]; + uint32_t prep_targetseq; + /* NB: May have Target Proxied Address */ + uint32_t prep_lifetime; + uint32_t prep_metric; + uint8_t prep_origaddr[IEEE80211_ADDR_LEN]; + uint32_t prep_origseq; } __packed; /* Mesh Path Error */ From owner-svn-src-projects@FreeBSD.ORG Thu May 14 14:17:33 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1C8661065676; Thu, 14 May 2009 14:17:33 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0AA9B8FC19; Thu, 14 May 2009 14:17:33 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EEHWJ1093549; Thu, 14 May 2009 14:17:32 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EEHWl5093548; Thu, 14 May 2009 14:17:32 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141417.n4EEHWl5093548@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 14:17:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192103 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 14:17:33 -0000 Author: rpaulo Date: Thu May 14 14:17:32 2009 New Revision: 192103 URL: http://svn.freebsd.org/changeset/base/192103 Log: * Fix spacing * add comments Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 14:13:57 2009 (r192102) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 14:17:32 2009 (r192103) @@ -204,7 +204,7 @@ struct ieee80211_meshrann_ie { uint8_t rann_hopcount; uint8_t rann_ttl; uint8_t rann_addr[IEEE80211_ADDR_LEN]; - uint32_t rann_seq; /* HWMP Sequence Number */ + uint32_t rann_seq; /* HWMP Sequence Number */ uint32_t rann_metric; } __packed; @@ -217,7 +217,7 @@ struct ieee80211_meshpreq_ie { uint8_t preq_ttl; uint8_t preq_id; uint8_t preq_origaddr[IEEE80211_ADDR_LEN]; - uint32_t preq_origseq; + uint32_t preq_origseq; /* HWMP Sequence Number */ /* NB: may have Originator Proxied Address */ uint32_t preq_lifetime; uint32_t preq_metric; @@ -225,7 +225,7 @@ struct ieee80211_meshpreq_ie { struct { uint8_t target_flags uint8_t target_addr[IEEE80211_ADDR_LEN]; - uint32_t target_seq; + uint32_t target_seq; /* HWMP Sequence Number */ } targets[1] __packed; /* NB: variable size */ } __packed; @@ -242,7 +242,7 @@ struct ieee80211_meshprep_ie { uint32_t prep_lifetime; uint32_t prep_metric; uint8_t prep_origaddr[IEEE80211_ADDR_LEN]; - uint32_t prep_origseq; + uint32_t prep_origseq; /* HWMP Sequence Number */ } __packed; /* Mesh Path Error */ @@ -253,7 +253,7 @@ struct ieee80211_meshperr_ie { uint8_t perr_ndests; /* Number of Destinations */ struct { uint8_t dest_addr[IEEE80211_ADDR_LEN]; - uint32_t dest_seq; + uint32_t dest_seq; /* HWMP Sequence Number */ } dests[1] __packed; /* NB: variable size */ } __packed; From owner-svn-src-projects@FreeBSD.ORG Thu May 14 14:18:54 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 08481106566C; Thu, 14 May 2009 14:18:54 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EAF258FC0C; Thu, 14 May 2009 14:18:53 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EEIrdg093609; Thu, 14 May 2009 14:18:53 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EEIrvT093608; Thu, 14 May 2009 14:18:53 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141418.n4EEIrvT093608@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 14:18:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192104 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 14:18:54 -0000 Author: rpaulo Date: Thu May 14 14:18:53 2009 New Revision: 192104 URL: http://svn.freebsd.org/changeset/base/192104 Log: Add missing semi colon. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 14:17:32 2009 (r192103) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 14:18:53 2009 (r192104) @@ -223,7 +223,7 @@ struct ieee80211_meshpreq_ie { uint32_t preq_metric; uint8_t preq_tcount; /* target count */ struct { - uint8_t target_flags + uint8_t target_flags; uint8_t target_addr[IEEE80211_ADDR_LEN]; uint32_t target_seq; /* HWMP Sequence Number */ } targets[1] __packed; /* NB: variable size */ From owner-svn-src-projects@FreeBSD.ORG Thu May 14 17:04:01 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7D6D4106566B; Thu, 14 May 2009 17:04:01 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6A5808FC25; Thu, 14 May 2009 17:04:01 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EH4145097131; Thu, 14 May 2009 17:04:01 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EH41Oj097125; Thu, 14 May 2009 17:04:01 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141704.n4EH41Oj097125@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 17:04:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192111 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 17:04:01 -0000 Author: rpaulo Date: Thu May 14 17:04:00 2009 New Revision: 192111 URL: http://svn.freebsd.org/changeset/base/192111 Log: * Change the send action API while keeping ABI to support passing a fixed list of arguments or a pointer. * Ignore action frames for peers without an established link * s/ieee80211_meshcontrol/ieee80211_meshcntl/ * Parse mesh path request frames and send a path reply if it's destined to us. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_ht.c projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_mesh.h projects/mesh11s/sys/net80211/ieee80211_output.c projects/mesh11s/sys/net80211/ieee80211_proto.h projects/mesh11s/sys/net80211/ieee80211_var.h Modified: projects/mesh11s/sys/net80211/ieee80211_ht.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_ht.c Thu May 14 16:56:56 2009 (r192110) +++ projects/mesh11s/sys/net80211/ieee80211_ht.c Thu May 14 17:04:00 2009 (r192111) @@ -1577,7 +1577,7 @@ ieee80211_aggr_recv_action(struct ieee80 struct ieee80211_tx_ampdu *tap; uint8_t dialogtoken, policy; uint16_t baparamset, batimeout, baseqctl, code; - uint16_t args[4]; + union ieee80211_send_action_args vargs; int tid, ac, bufsiz; ia = (const struct ieee80211_action *) frm; @@ -1606,7 +1606,7 @@ ieee80211_aggr_recv_action(struct ieee80 rap = &ni->ni_rx_ampdu[tid]; /* Send ADDBA response */ - args[0] = dialogtoken; + vargs.fixedarg[0] = dialogtoken; /* * NB: We ack only if the sta associated with HT and * the ap is configured to do AMPDU rx (the latter @@ -1618,7 +1618,7 @@ ieee80211_aggr_recv_action(struct ieee80 ic->ic_ampdu_rx_start(ni, rap, baparamset, batimeout, baseqctl); - args[1] = IEEE80211_STATUS_SUCCESS; + vargs.fixedarg[1] = IEEE80211_STATUS_SUCCESS; } else { IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, @@ -1627,16 +1627,18 @@ ieee80211_aggr_recv_action(struct ieee80 "administratively disabled" : "not negotiated for station"); vap->iv_stats.is_addba_reject++; - args[1] = IEEE80211_STATUS_UNSPECIFIED; + vargs.fixedarg[1] = + IEEE80211_STATUS_UNSPECIFIED; } /* XXX honor rap flags? */ - args[2] = IEEE80211_BAPS_POLICY_IMMEDIATE + vargs.fixedarg[2] = + IEEE80211_BAPS_POLICY_IMMEDIATE | SM(tid, IEEE80211_BAPS_TID) | SM(rap->rxa_wnd, IEEE80211_BAPS_BUFSIZ) ; - args[3] = 0; + vargs.fixedarg[3] = 0; ic->ic_send_action(ni, IEEE80211_ACTION_CAT_BA, - IEEE80211_ACTION_BA_ADDBA_RESPONSE, args); + IEEE80211_ACTION_BA_ADDBA_RESPONSE, vargs); return; case IEEE80211_ACTION_BA_ADDBA_RESPONSE: @@ -1777,9 +1779,9 @@ ieee80211_ampdu_request(struct ieee80211 struct ieee80211_tx_ampdu *tap) { struct ieee80211com *ic = ni->ni_ic; - uint16_t args[4]; int tid, dialogtoken; static int tokens = 0; /* XXX */ + union ieee80211_send_action_args vargs; /* XXX locking */ if ((tap->txa_flags & IEEE80211_AGGR_SETUP) == 0) { @@ -1793,14 +1795,15 @@ ieee80211_ampdu_request(struct ieee80211 tid = WME_AC_TO_TID(tap->txa_ac); tap->txa_start = ni->ni_txseqs[tid]; - args[0] = dialogtoken; - args[1] = IEEE80211_BAPS_POLICY_IMMEDIATE + vargs.fixedarg[0] = dialogtoken; + vargs.fixedarg[1] = IEEE80211_BAPS_POLICY_IMMEDIATE | SM(tid, IEEE80211_BAPS_TID) | SM(IEEE80211_AGGR_BAWMAX, IEEE80211_BAPS_BUFSIZ) ; - args[2] = 0; /* batimeout */ + vargs.fixedarg[2] = 0; /* batimeout */ /* NB: do first so there's no race against reply */ - if (!ic->ic_addba_request(ni, tap, dialogtoken, args[1], args[2])) { + if (!ic->ic_addba_request(ni, tap, dialogtoken, vargs.fixedarg[1], + vargs.fixedarg[2])) { /* unable to setup state, don't make request */ IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_11N, ni, "%s: could not setup BA stream for AC %d", @@ -1814,11 +1817,11 @@ ieee80211_ampdu_request(struct ieee80211 } tokens = dialogtoken; /* allocate token */ /* NB: after calling ic_addba_request so driver can set txa_start */ - args[3] = SM(tap->txa_start, IEEE80211_BASEQ_START) + vargs.fixedarg[3] = SM(tap->txa_start, IEEE80211_BASEQ_START) | SM(0, IEEE80211_BASEQ_FRAG) ; return ic->ic_send_action(ni, IEEE80211_ACTION_CAT_BA, - IEEE80211_ACTION_BA_ADDBA_REQUEST, args); + IEEE80211_ACTION_BA_ADDBA_REQUEST, vargs); } /* @@ -1831,7 +1834,7 @@ ieee80211_ampdu_stop(struct ieee80211_no { struct ieee80211com *ic = ni->ni_ic; struct ieee80211vap *vap = ni->ni_vap; - uint16_t args[4]; + union ieee80211_send_action_args vargs; /* XXX locking */ tap->txa_flags &= ~IEEE80211_AGGR_BARPEND; @@ -1842,11 +1845,11 @@ ieee80211_ampdu_stop(struct ieee80211_no vap->iv_stats.is_ampdu_stop++; ic->ic_addba_stop(ni, tap); - args[0] = WME_AC_TO_TID(tap->txa_ac); - args[1] = IEEE80211_DELBAPS_INIT; - args[2] = reason; /* XXX reason code */ + vargs.fixedarg[0] = WME_AC_TO_TID(tap->txa_ac); + vargs.fixedarg[1] = IEEE80211_DELBAPS_INIT; + vargs.fixedarg[2] = reason; /* XXX reason code */ ieee80211_send_action(ni, IEEE80211_ACTION_CAT_BA, - IEEE80211_ACTION_BA_DELBA, args); + IEEE80211_ACTION_BA_DELBA, vargs); } else { IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, ni, "%s: BA stream for AC %d not running (reason %d)", Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu May 14 16:56:56 2009 (r192110) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu May 14 17:04:00 2009 (r192111) @@ -89,13 +89,6 @@ static const int ieee80211_mesh_maxretri /* non static for sysctl hookup */ int ieee80211_mesh_ttl = 31; -/* unalligned little endian access */ -#define LE_READ_2(p) \ - ((uint16_t) \ - ((((const uint8_t *)(p))[0] ) | \ - (((const uint8_t *)(p))[1] << 8))) - - static const char *nodemeshstates[] = { "IDLE", "OPEN SENT", @@ -273,9 +266,14 @@ mesh_input(struct ieee80211_node *ni, st case IEEE80211_FC0_TYPE_DATA: IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni, "%s", "received data frame"); - /* XXX: make sure we already peered with this node */ + if (ni->ni_peerstate != IEEE80211_NODE_MESH_ESTABLISHED) { + IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH, + ni->ni_macaddr, NULL, + "peer link not yet established (%s)", + nodemeshstates[ni->ni_peerstate]); + } hdrspace = ieee80211_hdrspace(ic, wh) - + sizeof(struct ieee80211_meshcontrol); + + sizeof(struct ieee80211_meshcntl); if (m->m_len < hdrspace && (m = m_pullup(m, hdrspace)) == NULL) { IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY, @@ -489,7 +487,7 @@ mesh_recv_mgmt(struct ieee80211_node *ni if ((scan.capinfo & (IEEE80211_CAPINFO_ESS|IEEE80211_CAPINFO_IBSS)) == 0 && !IEEE80211_ADDR_EQ(wh->i_addr2, ni->ni_macaddr) && IEEE80211_ADDR_EQ(wh->i_addr3, zerobssid)) { - uint16_t args[4]; + union ieee80211_send_action_args vargs; /* * Create a new entry in the neighbor table. */ @@ -507,10 +505,10 @@ mesh_recv_mgmt(struct ieee80211_node *ni IEEE80211_MSG_MESH, ni, "peer link: switching to state %s", nodemeshstates[ni->ni_peerstate]); - args[0] = ni->ni_plid; + vargs.fixedarg[0] = ni->ni_plid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_OPEN, args); + IEEE80211_ACTION_MESHPEERING_OPEN, vargs); ni->ni_mrcount = 0; mesh_peer_timeout_setup(ni); } @@ -631,8 +629,9 @@ mesh_recv_action(struct ieee80211_node * struct ieee80211_meshid_ie *meshid; struct ieee80211_meshconf_ie *meshconf; struct ieee80211_meshpeer_ie *meshpeer; + struct ieee80211_meshpreq_ie *meshpreq; uint8_t *frm, *efrm; - uint16_t args[4]; + union ieee80211_send_action_args vargs; wh = mtod(m0, struct ieee80211_frame *); ia = (struct ieee80211_action *) &wh[1]; @@ -652,6 +651,7 @@ mesh_recv_action(struct ieee80211_node * meshid = NULL; meshpeer = NULL; meshconf = NULL; + meshpreq = NULL; while (efrm - frm > 1) { IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return); switch (*frm) { @@ -663,32 +663,44 @@ mesh_recv_action(struct ieee80211_node * break; case IEEE80211_ELEMID_MESHPEER: meshpeer = (struct ieee80211_meshpeer_ie *) frm; - meshpeer->peer_llinkid = LE_READ_2(&meshpeer->peer_llinkid); - meshpeer->peer_linkid = LE_READ_2(&meshpeer->peer_linkid); - meshpeer->peer_rcode = LE_READ_2(&meshpeer->peer_rcode); + meshpeer->peer_llinkid = + LE_READ_2(&meshpeer->peer_llinkid); + meshpeer->peer_linkid = + LE_READ_2(&meshpeer->peer_linkid); + meshpeer->peer_rcode = + LE_READ_2(&meshpeer->peer_rcode); + break; + case IEEE80211_ELEMID_MESHPREQ: + meshpreq = (struct ieee80211_meshpreq_ie *) frm; + meshpreq->preq_id = LE_READ_4(&meshpreq->preq_id); + meshpreq->preq_origseq = + LE_READ_4(&meshpreq->preq_origseq); + meshpreq->preq_lifetime = + LE_READ_4(&meshpreq->preq_lifetime); + meshpreq->preq_metric = + LE_READ_4(&meshpreq->preq_metric); break; } frm += frm[1] + 2; } - /* - * Check if we agree on Mesh ID and Configuration. - * XXX: TBD - */ - if (mesh_verify_meshid(vap, meshid) || - mesh_verify_meshconf(vap, meshconf) || - !meshpeer) { - IEEE80211_DISCARD(vap, - IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, - wh, NULL, "%s", "action frame not for our mesh"); - vap->iv_stats.is_rx_mgtdiscard++; - return; - } /* * Mesh Peer Link Management Finite State Machine handling. */ switch (ia->ia_category) { case IEEE80211_ACTION_CAT_MESHPEERING: + /* + * Check if we agree on the required fields. + */ + if (mesh_verify_meshid(vap, meshid) || + mesh_verify_meshconf(vap, meshconf) || + !meshpeer) { + IEEE80211_DISCARD(vap, + IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, + wh, NULL, "%s", "action frame not for our mesh"); + vap->iv_stats.is_rx_mgtdiscard++; + return; + } switch (ia->ia_action) { case IEEE80211_ACTION_MESHPEERING_OPEN: IEEE80211_NOTE(vap, @@ -703,27 +715,29 @@ mesh_recv_action(struct ieee80211_node * nodemeshstates[ni->ni_peerstate]); ni->ni_llid = meshpeer->peer_llinkid; get_random_bytes(&ni->ni_plid, 2); - args[0] = ni->ni_plid; + vargs.fixedarg[0] = ni->ni_plid; /* Announce we're open too... */ ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_OPEN, args); + IEEE80211_ACTION_MESHPEERING_OPEN, vargs); /* ...and confirm the link. */ - args[0] = ni->ni_plid; - args[1] = ni->ni_llid; + vargs.fixedarg[0] = ni->ni_plid; + vargs.fixedarg[1] = ni->ni_llid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_CONFIRM, args); + IEEE80211_ACTION_MESHPEERING_CONFIRM, + vargs); mesh_peer_timeout_setup(ni); break; case IEEE80211_NODE_MESH_OPENRCV: - /* We received a duplicate open, confirm again. */ + /* Duplicate open, confirm again. */ ni->ni_llid = meshpeer->peer_llinkid; - args[0] = ni->ni_plid; - args[1] = ni->ni_llid; + vargs.fixedarg[0] = ni->ni_plid; + vargs.fixedarg[1] = ni->ni_llid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_CONFIRM, args); + IEEE80211_ACTION_MESHPEERING_CONFIRM, + vargs); break; case IEEE80211_NODE_MESH_OPENSNT: ni->ni_peerstate = IEEE80211_NODE_MESH_OPENRCV; @@ -732,41 +746,47 @@ mesh_recv_action(struct ieee80211_node * IEEE80211_MSG_MESH, ni, "peer link: switching to state %s", nodemeshstates[ni->ni_peerstate]); - args[0] = ni->ni_plid; - args[1] = ni->ni_llid; + vargs.fixedarg[0] = ni->ni_plid; + vargs.fixedarg[1] = ni->ni_llid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_CONFIRM, args); + IEEE80211_ACTION_MESHPEERING_CONFIRM, + vargs); /* NB: don't setup/clear any timeout */ break; case IEEE80211_NODE_MESH_CONFIRMRECV: - ni->ni_peerstate = IEEE80211_NODE_MESH_ESTABLISHED; + ni->ni_peerstate = + IEEE80211_NODE_MESH_ESTABLISHED; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni, "peer link: switching to state %s", nodemeshstates[ni->ni_peerstate]); ni->ni_llid = meshpeer->peer_llinkid; - args[0] = ni->ni_plid; - args[1] = ni->ni_llid; + vargs.fixedarg[0] = ni->ni_plid; + vargs.fixedarg[1] = ni->ni_llid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_CONFIRM, args); + IEEE80211_ACTION_MESHPEERING_CONFIRM, + vargs); mesh_peer_timeout_stop(ni); break; case IEEE80211_NODE_MESH_ESTABLISHED: - args[0] = ni->ni_plid; - args[1] = ni->ni_llid; + vargs.fixedarg[0] = ni->ni_plid; + vargs.fixedarg[1] = ni->ni_llid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_CONFIRM, args); + IEEE80211_ACTION_MESHPEERING_CONFIRM, + vargs); break; case IEEE80211_NODE_MESH_HOLDING: - args[0] = ni->ni_llid; - args[1] = ni->ni_plid; - args[2] = IEEE80211_REASON_MESH_MAX_RETRIES; + vargs.fixedarg[0] = ni->ni_llid; + vargs.fixedarg[1] = ni->ni_plid; + vargs.fixedarg[2] = + IEEE80211_REASON_MESH_MAX_RETRIES; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_CLOSE, args); + IEEE80211_ACTION_MESHPEERING_CLOSE, + vargs); break; } break; @@ -777,7 +797,8 @@ mesh_recv_action(struct ieee80211_node * meshpeer->peer_llinkid, meshpeer->peer_linkid); switch (ni->ni_peerstate) { case IEEE80211_NODE_MESH_OPENRCV: - ni->ni_peerstate = IEEE80211_NODE_MESH_ESTABLISHED; + ni->ni_peerstate = + IEEE80211_NODE_MESH_ESTABLISHED; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni, "peer link: switching to state %s", @@ -785,19 +806,21 @@ mesh_recv_action(struct ieee80211_node * mesh_peer_timeout_stop(ni); break; case IEEE80211_NODE_MESH_OPENSNT: - ni->ni_peerstate = IEEE80211_NODE_MESH_CONFIRMRECV; + ni->ni_peerstate = + IEEE80211_NODE_MESH_CONFIRMRECV; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni, "peer link: switching to state %s", nodemeshstates[ni->ni_peerstate]); break; case IEEE80211_NODE_MESH_HOLDING: - args[0] = ni->ni_llid; - args[1] = ni->ni_plid; - args[2] = IEEE80211_REASON_MESH_MAX_RETRIES; + vargs.fixedarg[0] = ni->ni_llid; + vargs.fixedarg[1] = ni->ni_plid; + vargs.fixedarg[2] = IEEE80211_REASON_MESH_MAX_RETRIES; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_CLOSE, args); + IEEE80211_ACTION_MESHPEERING_CLOSE, + vargs); break; default: IEEE80211_DISCARD(vap, @@ -824,8 +847,49 @@ mesh_recv_action(struct ieee80211_node * break; } break; + case IEEE80211_ACTION_CAT_MESHPATH: + switch (ia->ia_action) { + case IEEE80211_ACTION_MESHPATH_REQ: + if (meshpreq == NULL) { + IEEE80211_DISCARD(vap, + IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, + wh, NULL, "%s", "preq without IE"); + vap->iv_stats.is_rx_mgtdiscard++; + return; + } + /* + * Is the peer trying to find us? + */ + if (IEEE80211_ADDR_EQ(vap->iv_myaddr, + meshpreq->preq_targets[0].target_addr)) { + struct ieee80211_meshprep_ie prep; + /* + * Build and send a path reply frame. + */ + prep.prep_flags = 0; + prep.prep_hopcount = 0; + prep.prep_ttl = ieee80211_mesh_ttl; + IEEE80211_ADDR_COPY(prep.prep_targetaddr, + meshpreq->preq_targets[0].target_addr); + prep.prep_targetseq = meshpreq->preq_origseq; + prep.prep_lifetime = 5000; + prep.prep_metric = 0; + IEEE80211_ADDR_COPY(prep.prep_origaddr, + vap->iv_myaddr); + prep.prep_origseq = 1; + + vargs.ptrarg = &prep; + ieee80211_send_action(ni, + IEEE80211_ACTION_CAT_MESHPATH, + IEEE80211_ACTION_MESHPATH_REP, + vargs); + } + break; + } + break; default: - IEEE80211_DISCARD(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, + IEEE80211_DISCARD(vap, + IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, wh, NULL, "%s", "not handled"); vap->iv_stats.is_rx_mgtdiscard++; } @@ -876,7 +940,7 @@ mesh_peer_timeout_cb(void *arg) { struct ieee80211_node *ni = (struct ieee80211_node *)arg; struct ieee80211vap *vap = ni->ni_vap; - uint16_t args[4]; + union ieee80211_send_action_args vargs; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, @@ -887,11 +951,11 @@ mesh_peer_timeout_cb(void *arg) case IEEE80211_NODE_MESH_OPENSNT: case IEEE80211_NODE_MESH_OPENRCV: if (ni->ni_mrcount == ieee80211_mesh_maxretries) { - args[0] = ni->ni_plid; - args[2] = IEEE80211_REASON_MESH_MAX_RETRIES; + vargs.fixedarg[0] = ni->ni_plid; + vargs.fixedarg[2] = IEEE80211_REASON_MESH_MAX_RETRIES; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_CLOSE, args); + IEEE80211_ACTION_MESHPEERING_CLOSE, vargs); ni->ni_mrcount = 0; ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING; IEEE80211_NOTE(vap, @@ -900,21 +964,22 @@ mesh_peer_timeout_cb(void *arg) nodemeshstates[ni->ni_peerstate]); mesh_peer_timeout_setup(ni); } else { - args[0] = ni->ni_plid; + vargs.fixedarg[0] = ni->ni_plid; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_OPEN, args); + IEEE80211_ACTION_MESHPEERING_OPEN, vargs); ni->ni_mrcount++; mesh_peer_timeout_backoff(ni); } break; case IEEE80211_NODE_MESH_CONFIRMRECV: if (ni->ni_mrcount == ieee80211_mesh_maxretries) { - args[0] = ni->ni_plid; - args[2] = IEEE80211_REASON_MESH_CONFIRM_TIMEOUT; + vargs.fixedarg[0] = ni->ni_plid; + vargs.fixedarg[2] = + IEEE80211_REASON_MESH_CONFIRM_TIMEOUT; ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPEERING, - IEEE80211_ACTION_MESHPEERING_CLOSE, args); + IEEE80211_ACTION_MESHPEERING_CLOSE, vargs); ni->ni_mrcount = 0; ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING; IEEE80211_NOTE(vap, Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 16:56:56 2009 (r192110) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Thu May 14 17:04:00 2009 (r192111) @@ -215,7 +215,7 @@ struct ieee80211_meshpreq_ie { uint8_t preq_flags; uint8_t preq_hopcount; uint8_t preq_ttl; - uint8_t preq_id; + uint32_t preq_id; uint8_t preq_origaddr[IEEE80211_ADDR_LEN]; uint32_t preq_origseq; /* HWMP Sequence Number */ /* NB: may have Originator Proxied Address */ @@ -226,7 +226,7 @@ struct ieee80211_meshpreq_ie { uint8_t target_flags; uint8_t target_addr[IEEE80211_ADDR_LEN]; uint32_t target_seq; /* HWMP Sequence Number */ - } targets[1] __packed; /* NB: variable size */ + } preq_targets[1] __packed; /* NB: variable size */ } __packed; /* Mesh Path Reply */ @@ -254,7 +254,7 @@ struct ieee80211_meshperr_ie { struct { uint8_t dest_addr[IEEE80211_ADDR_LEN]; uint32_t dest_seq; /* HWMP Sequence Number */ - } dests[1] __packed; /* NB: variable size */ + } perr_dests[1] __packed; /* NB: variable size */ } __packed; /* Mesh Proxy Update */ @@ -278,18 +278,30 @@ struct ieee80211_meshpuc_ie { */ #define IEEE80211_ACTION_CAT_MESHPEERING 30 /* XXX Linux */ #define IEEE80211_ACTION_CAT_MESHLINK 13 -#define IEEE80211_ACTION_CAT_PATHSEL 14 +#define IEEE80211_ACTION_CAT_MESHPATH 32 /* XXX Linux */ #define IEEE80211_ACTION_CAT_INTERWORK 15 #define IEEE80211_ACTION_CAT_RESOURCE 16 #define IEEE80211_ACTION_CAT_PROXY 17 +/* + * Mesh Peering Action codes. + */ enum { IEEE80211_ACTION_MESHPEERING_OPEN = 0, IEEE80211_ACTION_MESHPEERING_CONFIRM = 1, IEEE80211_ACTION_MESHPEERING_CLOSE = 2, }; -struct ieee80211_meshcontrol { +/* + * Mesh Path Selection Action codes. + */ +enum { + IEEE80211_ACTION_MESHPATH_REQ = 0, + IEEE80211_ACTION_MESHPATH_REP = 1, + IEEE80211_ACTION_MESHPATH_ERR = 2, +}; + +struct ieee80211_meshcntl { uint8_t mc_flags; uint8_t mc_ttl; uint32_t mc_seq; Modified: projects/mesh11s/sys/net80211/ieee80211_output.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_output.c Thu May 14 16:56:56 2009 (r192110) +++ projects/mesh11s/sys/net80211/ieee80211_output.c Thu May 14 17:04:00 2009 (r192111) @@ -538,7 +538,7 @@ ieee80211_send_setup( */ int ieee80211_send_action(struct ieee80211_node *ni, - int category, int action, uint16_t args[4]) + int category, int action, union ieee80211_send_action_args vargs) { #define senderr(_x, _v) do { vap->iv_stats._v++; ret = _x; goto bad; } while (0) #define ADDSHORT(frm, v) do { \ @@ -555,7 +555,7 @@ ieee80211_send_action(struct ieee80211_n struct mbuf *m; uint8_t *frm; uint16_t baparamset; - int ret, addsize; + int ret, addsize = 0; KASSERT(ni != NULL, ("null node")); @@ -571,19 +571,32 @@ ieee80211_send_action(struct ieee80211_n ieee80211_node_refcnt(ni)+1); ieee80211_ref_node(ni); - addsize = 0; switch (category) { case IEEE80211_ACTION_CAT_BA: case IEEE80211_ACTION_CAT_HT: - addsize += sizeof(struct ieee80211_action_ba_addbaresponse); + addsize = sizeof(struct ieee80211_action_ba_addbaresponse); break; case IEEE80211_ACTION_CAT_MESHPEERING: - addsize += sizeof(uint16_t); /* capabilities */ - addsize += 2 + IEEE80211_RATE_SIZE; - addsize += 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE); - addsize += 2 + vap->iv_meshidlen; /* Mesh ID */ - addsize += sizeof(struct ieee80211_meshconf_ie); - addsize += sizeof(struct ieee80211_meshpeer_ie); + addsize = sizeof(uint16_t) /* capabilities */ + + 2 + IEEE80211_RATE_SIZE + + 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE) + + 2 + vap->iv_meshidlen /* Mesh ID */ + + sizeof(struct ieee80211_meshconf_ie) + + sizeof(struct ieee80211_meshpeer_ie); + break; + case IEEE80211_ACTION_CAT_MESHPATH: + switch (action) { + case IEEE80211_ACTION_MESHPATH_REQ: + /* XXX more than one destination */ + addsize = sizeof(struct ieee80211_meshpreq_ie); + break; + case IEEE80211_ACTION_MESHPATH_REP: + addsize = sizeof(struct ieee80211_meshprep_ie); + break; + case IEEE80211_ACTION_MESHPATH_ERR: + addsize = sizeof(struct ieee80211_meshperr_ie); + break; + } break; } m = ieee80211_getmgtframe(&frm, @@ -606,39 +619,43 @@ ieee80211_send_action(struct ieee80211_n IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, ni, "send ADDBA request: dialogtoken %d " "baparamset 0x%x (tid %d) batimeout 0x%x baseqctl 0x%x", - args[0], args[1], MS(args[1], IEEE80211_BAPS_TID), - args[2], args[3]); - - *frm++ = args[0]; /* dialog token */ - ADDSHORT(frm, args[1]); /* baparamset */ - ADDSHORT(frm, args[2]); /* batimeout */ - ADDSHORT(frm, args[3]); /* baseqctl */ + vargs.fixedarg[0], vargs.fixedarg[1], + MS(vargs.fixedarg[1], IEEE80211_BAPS_TID), + vargs.fixedarg[2], vargs.fixedarg[3]); + + *frm++ = vargs.fixedarg[0]; /* dialog token */ + ADDSHORT(frm, vargs.fixedarg[1]); /* baparamset */ + ADDSHORT(frm, vargs.fixedarg[2]); /* batimeout */ + ADDSHORT(frm, vargs.fixedarg[3]); /* baseqctl */ break; case IEEE80211_ACTION_BA_ADDBA_RESPONSE: IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, ni, "send ADDBA response: dialogtoken %d status %d " "baparamset 0x%x (tid %d) batimeout %d", - args[0], args[1], args[2], - MS(args[2], IEEE80211_BAPS_TID), args[3]); - - *frm++ = args[0]; /* dialog token */ - ADDSHORT(frm, args[1]); /* statuscode */ - ADDSHORT(frm, args[2]); /* baparamset */ - ADDSHORT(frm, args[3]); /* batimeout */ + vargs.fixedarg[0], vargs.fixedarg[1], + vargs.fixedarg[2], MS(vargs.fixedarg[2], + IEEE80211_BAPS_TID), vargs.fixedarg[3]); + + *frm++ = vargs.fixedarg[0]; /* dialog token */ + ADDSHORT(frm, vargs.fixedarg[1]); /* statuscode */ + ADDSHORT(frm, vargs.fixedarg[2]); /* baparamset */ + ADDSHORT(frm, vargs.fixedarg[3]); /* batimeout */ break; case IEEE80211_ACTION_BA_DELBA: /* XXX */ - baparamset = SM(args[0], IEEE80211_DELBAPS_TID) - | args[1] + baparamset = SM(vargs.fixedarg[0], + IEEE80211_DELBAPS_TID) + | vargs.fixedarg[1] ; ADDSHORT(frm, baparamset); - ADDSHORT(frm, args[2]); /* reason code */ + ADDSHORT(frm, vargs.fixedarg[2]); /* reason code */ IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, ni, "send DELBA action: tid %d, initiator %d reason %d", - args[0], args[1], args[2]); + vargs.fixedarg[0], vargs.fixedarg[1], + vargs.fixedarg[2]); break; default: goto badaction; @@ -677,14 +694,16 @@ ieee80211_send_action(struct ieee80211_n case IEEE80211_ACTION_MESHPEERING_OPEN: IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, - "send PEER OPEN action: localid 0x%x", args[0]); + "send PEER OPEN action: localid 0x%x", + vargs.fixedarg[0]); ADDSHORT(frm, getcapinfo(vap, ni->ni_chan)); frm = ieee80211_add_rates(frm, rs); frm = ieee80211_add_xrates(frm, rs); frm = ieee80211_add_meshid(frm, vap); frm = ieee80211_add_meshconf(frm, vap); frm = ieee80211_add_meshpeer(frm, - IEEE80211_MESH_PEER_LINK_OPEN, args[0], 0, 0); + IEEE80211_MESH_PEER_LINK_OPEN, + vargs.fixedarg[0], 0, 0); break; /* * mesh peer confirm action frame format: @@ -703,7 +722,8 @@ ieee80211_send_action(struct ieee80211_n IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, "send PEER CONFIRM action: localid 0x%x, " - "peerid 0x%x", args[0], args[1]); + "peerid 0x%x", vargs.fixedarg[0], + vargs.fixedarg[1]); ADDSHORT(frm, getcapinfo(vap, ni->ni_chan)); ADDSHORT(frm, 0); /* status code */ ADDSHORT(frm, 0); /* AID */ @@ -712,7 +732,8 @@ ieee80211_send_action(struct ieee80211_n frm = ieee80211_add_meshid(frm, vap); frm = ieee80211_add_meshconf(frm, vap); frm = ieee80211_add_meshpeer(frm, - IEEE80211_MESH_PEER_LINK_CONFIRM, args[0], args[1], + IEEE80211_MESH_PEER_LINK_CONFIRM, + vargs.fixedarg[0], vargs.fixedarg[1], 0); break; /* @@ -727,15 +748,43 @@ ieee80211_send_action(struct ieee80211_n IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, "sending PEER CLOSE action: localid 0x%x, " - "peerid 0x%x reason %d", args[0], args[1], args[2]); - ADDSHORT(frm, args[2]); /* reason code */ + "peerid 0x%x reason %d", vargs.fixedarg[0], + vargs.fixedarg[1], vargs.fixedarg[2]); + ADDSHORT(frm, vargs.fixedarg[2]); /* reason code */ frm = ieee80211_add_meshid(frm, vap); frm = ieee80211_add_meshpeer(frm, - IEEE80211_MESH_PEER_LINK_CLOSE, args[0], args[1], - args[2]); + IEEE80211_MESH_PEER_LINK_CLOSE, + vargs.fixedarg[0], vargs.fixedarg[1], + vargs.fixedarg[2]); break; } break; + case IEEE80211_ACTION_CAT_MESHPATH: + switch (action) { + /* + * mesh path request action frame format: + * [1] action + * [1] category + * [tlv] mesh preq + */ + case IEEE80211_ACTION_MESHPATH_REQ: + break; + /* + * mesh path request action frame format: + * [1] action + * [1] category + * [tlv] mesh preq + */ + case IEEE80211_ACTION_MESHPATH_REP: + IEEE80211_NOTE(vap, + IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, + "send PATH REPLY action: flags 0x%x, " + "hopcount 0x%x", vargs.fixedarg[0], + vargs.fixedarg[1]); + + break; + } + break; default: badaction: IEEE80211_NOTE(vap, @@ -1237,7 +1286,7 @@ ieee80211_encap(struct ieee80211vap *vap * All Mesh data frames have a Mesh Control field. */ if (vap->iv_opmode == IEEE80211_M_MBSS) - hdrsize += sizeof(struct ieee80211_meshcontrol); + hdrsize += sizeof(struct ieee80211_meshcntl); /* * Honor driver DATAPAD requirement. */ Modified: projects/mesh11s/sys/net80211/ieee80211_proto.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_proto.h Thu May 14 16:56:56 2009 (r192110) +++ projects/mesh11s/sys/net80211/ieee80211_proto.h Thu May 14 17:04:00 2009 (r192111) @@ -65,7 +65,12 @@ void ieee80211_syncflag_ext(struct ieee8 int ieee80211_input_all(struct ieee80211com *, struct mbuf *, int, int, uint32_t); struct ieee80211_bpf_params; -int ieee80211_send_action(struct ieee80211_node *, int, int, uint16_t [4]); +union ieee80211_send_action_args { + uint16_t fixedarg[4]; + void * ptrarg; +}; +int ieee80211_send_action(struct ieee80211_node *, int, int, + union ieee80211_send_action_args); int ieee80211_mgmt_output(struct ieee80211_node *, struct mbuf *, int, struct ieee80211_bpf_params *); int ieee80211_raw_xmit(struct ieee80211_node *, struct mbuf *, Modified: projects/mesh11s/sys/net80211/ieee80211_var.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_var.h Thu May 14 16:56:56 2009 (r192110) +++ projects/mesh11s/sys/net80211/ieee80211_var.h Thu May 14 17:04:00 2009 (r192111) @@ -276,7 +276,7 @@ struct ieee80211com { const uint8_t *frm, const uint8_t *efrm); int (*ic_send_action)(struct ieee80211_node *, int category, int action, - uint16_t args[4]); + union ieee80211_send_action_args); /* check if A-MPDU should be enabled this station+ac */ int (*ic_ampdu_enable)(struct ieee80211_node *, struct ieee80211_tx_ampdu *); From owner-svn-src-projects@FreeBSD.ORG Thu May 14 17:04:59 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4FEFB1065678; Thu, 14 May 2009 17:04:59 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3E50C8FC24; Thu, 14 May 2009 17:04:59 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EH4xwV097185; Thu, 14 May 2009 17:04:59 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EH4xvM097184; Thu, 14 May 2009 17:04:59 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905141704.n4EH4xvM097184@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 17:04:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192112 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 17:04:59 -0000 Author: rpaulo Date: Thu May 14 17:04:58 2009 New Revision: 192112 URL: http://svn.freebsd.org/changeset/base/192112 Log: Add missing type for mesh ttl sysctl. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_freebsd.c Modified: projects/mesh11s/sys/net80211/ieee80211_freebsd.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_freebsd.c Thu May 14 17:04:00 2009 (r192111) +++ projects/mesh11s/sys/net80211/ieee80211_freebsd.c Thu May 14 17:04:58 2009 (r192112) @@ -74,7 +74,7 @@ SYSCTL_NODE(_net_wlan, OID_AUTO, mesh, C "IEEE 802.11s parameters"); extern int ieee80211_mesh_ttl; SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLFLAG_RW, - &ieee80211_mesh_ttl, 0, "TTL for mesh packets"); + &ieee80211_mesh_ttl, "I", "TTL for mesh packets"); MALLOC_DEFINE(M_80211_COM, "80211com", "802.11 com state"); From owner-svn-src-projects@FreeBSD.ORG Thu May 14 21:15:28 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 208C51065670; Thu, 14 May 2009 21:15:28 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0FBA58FC1E; Thu, 14 May 2009 21:15:28 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4ELFRAo002511; Thu, 14 May 2009 21:15:27 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4ELFRRb002510; Thu, 14 May 2009 21:15:27 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905142115.n4ELFRRb002510@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Thu, 14 May 2009 21:15:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192117 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 21:15:28 -0000 Author: gonzo Date: Thu May 14 21:15:27 2009 New Revision: 192117 URL: http://svn.freebsd.org/changeset/base/192117 Log: - Remove garbage debug output Modified: projects/mips/sys/mips/atheros/apb.c Modified: projects/mips/sys/mips/atheros/apb.c ============================================================================== --- projects/mips/sys/mips/atheros/apb.c Thu May 14 20:59:36 2009 (r192116) +++ projects/mips/sys/mips/atheros/apb.c Thu May 14 21:15:27 2009 (r192117) @@ -166,8 +166,6 @@ apb_alloc_resource(device_t bus, device_ return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child, type, rid, start, end, count, flags)); - printf("not pass through\n"); - /* * If this is an allocation of the "default" range for a given RID, * and we know what the resources for this device are (ie. they aren't From owner-svn-src-projects@FreeBSD.ORG Thu May 14 21:17:41 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9185F1065677; Thu, 14 May 2009 21:17:41 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 809148FC22; Thu, 14 May 2009 21:17:41 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4ELHffs002594; Thu, 14 May 2009 21:17:41 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4ELHfFH002593; Thu, 14 May 2009 21:17:41 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905142117.n4ELHfFH002593@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 21:17:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192118 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 21:17:42 -0000 Author: rpaulo Date: Thu May 14 21:17:41 2009 New Revision: 192118 URL: http://svn.freebsd.org/changeset/base/192118 Log: Fix previous commit and pass the correct args for SYSCTL_INT(). Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_freebsd.c Modified: projects/mesh11s/sys/net80211/ieee80211_freebsd.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_freebsd.c Thu May 14 21:15:27 2009 (r192117) +++ projects/mesh11s/sys/net80211/ieee80211_freebsd.c Thu May 14 21:17:41 2009 (r192118) @@ -73,8 +73,8 @@ SYSCTL_INT(_net_wlan, OID_AUTO, cac_time SYSCTL_NODE(_net_wlan, OID_AUTO, mesh, CTLFLAG_RD, 0, "IEEE 802.11s parameters"); extern int ieee80211_mesh_ttl; -SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLFLAG_RW, - &ieee80211_mesh_ttl, "I", "TTL for mesh packets"); +SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLTYPE_INT | CTLFLAG_RW, + &ieee80211_mesh_ttl, 0, "TTL for mesh packets"); MALLOC_DEFINE(M_80211_COM, "80211com", "802.11 com state"); From owner-svn-src-projects@FreeBSD.ORG Thu May 14 21:26:07 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DBAE11065758; Thu, 14 May 2009 21:26:07 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C2B058FC17; Thu, 14 May 2009 21:26:07 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4ELQ7M3002818; Thu, 14 May 2009 21:26:07 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4ELQ7qP002817; Thu, 14 May 2009 21:26:07 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905142126.n4ELQ7qP002817@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Thu, 14 May 2009 21:26:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192119 - projects/mips/sys/mips/mips X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 21:26:08 -0000 Author: gonzo Date: Thu May 14 21:26:07 2009 New Revision: 192119 URL: http://svn.freebsd.org/changeset/base/192119 Log: - Off by one check fix. Check for last address in region to fit in KSEG1 Modified: projects/mips/sys/mips/mips/pmap.c Modified: projects/mips/sys/mips/mips/pmap.c ============================================================================== --- projects/mips/sys/mips/mips/pmap.c Thu May 14 21:17:41 2009 (r192118) +++ projects/mips/sys/mips/mips/pmap.c Thu May 14 21:26:07 2009 (r192119) @@ -2819,7 +2819,7 @@ pmap_mapdev(vm_offset_t pa, vm_size_t si * KSEG1 maps only first 512M of phys address space. For * pa > 0x20000000 we should make proper mapping * using pmap_kenter. */ - if (pa + size < MIPS_KSEG0_LARGEST_PHYS) + if ((pa + size - 1) < MIPS_KSEG0_LARGEST_PHYS) return (void *)MIPS_PHYS_TO_KSEG1(pa); else { offset = pa & PAGE_MASK; From owner-svn-src-projects@FreeBSD.ORG Thu May 14 21:27:10 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3125B10656B2; Thu, 14 May 2009 21:27:10 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 609D98FC13; Thu, 14 May 2009 21:27:03 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4ELR362002877; Thu, 14 May 2009 21:27:03 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4ELR3gL002876; Thu, 14 May 2009 21:27:03 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905142127.n4ELR3gL002876@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Thu, 14 May 2009 21:27:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192120 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 21:27:14 -0000 Author: gonzo Date: Thu May 14 21:27:03 2009 New Revision: 192120 URL: http://svn.freebsd.org/changeset/base/192120 Log: - Add SPI-related registers Modified: projects/mips/sys/mips/atheros/ar71xxreg.h Modified: projects/mips/sys/mips/atheros/ar71xxreg.h ============================================================================== --- projects/mips/sys/mips/atheros/ar71xxreg.h Thu May 14 21:26:07 2009 (r192119) +++ projects/mips/sys/mips/atheros/ar71xxreg.h Thu May 14 21:27:03 2009 (r192120) @@ -324,4 +324,17 @@ #define DMA_INTR_TX_UNDERRUN (1 << 1) #define DMA_INTR_TX_PKT_SENT (1 << 0) +#define AR71XX_SPI_BASE 0x1f000000 +#define AR71XX_SPI_FS 0x00 +#define AR71XX_SPI_CTRL 0x04 +#define SPI_CTRL_REMAP_DISABLE (1 << 6) +#define SPI_CTRL_CLOCK_DIVIDER_MASK ((1 << 6) - 1) +#define AR71XX_SPI_IO_CTRL 0x08 +#define SPI_IO_CTRL_CS2 (1 << 18) +#define SPI_IO_CTRL_CS1 (1 << 17) +#define SPI_IO_CTRL_CS0 (1 << 16) +#define SPI_IO_CTRL_CLK (1 << 8) +#define SPI_IO_CTRL_DO 1 +#define AR71XX_SPI_RDS 0x0C + #endif /* _AR71XX_REG_H_ */ From owner-svn-src-projects@FreeBSD.ORG Thu May 14 22:13:17 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C1270106566C; Thu, 14 May 2009 22:13:17 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B02728FC16; Thu, 14 May 2009 22:13:17 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EMDHFJ004113; Thu, 14 May 2009 22:13:17 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EMDH7o004111; Thu, 14 May 2009 22:13:17 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905142213.n4EMDH7o004111@svn.freebsd.org> From: Rui Paulo Date: Thu, 14 May 2009 22:13:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192126 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2009 22:13:18 -0000 Author: rpaulo Date: Thu May 14 22:13:17 2009 New Revision: 192126 URL: http://svn.freebsd.org/changeset/base/192126 Log: * Really send the mesh path reply, don't just pretend. * Fix a bug in calculating the location of the IEs on mesh_recv_action(). Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_output.c Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu May 14 22:01:32 2009 (r192125) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu May 14 22:13:17 2009 (r192126) @@ -3,7 +3,7 @@ * Copyright (c) 2009 The FreeBSD Foundation * All rights reserved. * - * This software was developed by Rui Paulo under sponsorship from the + * This software was developed by Rui Paulo under sponsorship from the * FreeBSD Foundation. * * Redistribution and use in source and binary forms, with or without @@ -635,8 +635,7 @@ mesh_recv_action(struct ieee80211_node * wh = mtod(m0, struct ieee80211_frame *); ia = (struct ieee80211_action *) &wh[1]; - frm = (uint8_t *)&wh[1]; - frm += sizeof(ia); + frm = (uint8_t *)&wh[1] + sizeof(struct ieee80211_action); efrm = mtod(m0, uint8_t *) + m0->m_len; /* @@ -646,8 +645,6 @@ mesh_recv_action(struct ieee80211_node * if (ni == vap->iv_bss) { return; } - - meshid = NULL; meshpeer = NULL; meshconf = NULL; @@ -684,10 +681,10 @@ mesh_recv_action(struct ieee80211_node * frm += frm[1] + 2; } + switch (ia->ia_category) { /* * Mesh Peer Link Management Finite State Machine handling. */ - switch (ia->ia_category) { case IEEE80211_ACTION_CAT_MESHPEERING: /* * Check if we agree on the required fields. Modified: projects/mesh11s/sys/net80211/ieee80211_output.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_output.c Thu May 14 22:01:32 2009 (r192125) +++ projects/mesh11s/sys/net80211/ieee80211_output.c Thu May 14 22:13:17 2009 (r192126) @@ -546,6 +546,13 @@ ieee80211_send_action(struct ieee80211_n frm[1] = (v) >> 8; \ frm += 2; \ } while (0) +#define ADDWORD(frm, v) do { \ + frm[0] = (v) & 0xff; \ + frm[1] = ((v) >> 8) & 0xff; \ + frm[2] = ((v) >> 16) & 0xff; \ + frm[3] = ((v) >> 24) & 0xff; \ + frm += 4; \ +} while (0) #define MS(_v, _f) (((_v) & _f) >> _f##_S) #define SM(_v, _f) (((_v) << _f##_S) & _f) struct ieee80211vap *vap = ni->ni_vap; @@ -765,25 +772,44 @@ ieee80211_send_action(struct ieee80211_n * mesh path request action frame format: * [1] action * [1] category - * [tlv] mesh preq + * [tlv] mesh path request */ case IEEE80211_ACTION_MESHPATH_REQ: break; /* - * mesh path request action frame format: + * mesh path reply action frame format: * [1] action * [1] category - * [tlv] mesh preq + * [tlv] mesh path reply */ case IEEE80211_ACTION_MESHPATH_REP: + { + struct ieee80211_meshprep_ie *prep; + + prep = vargs.ptrarg; IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, "send PATH REPLY action: flags 0x%x, " - "hopcount 0x%x", vargs.fixedarg[0], - vargs.fixedarg[1]); - + "hopcount 0x%x, ttl 0x%x, " + "seq 0x%x, lifetime 0x%x", prep->prep_flags, + prep->prep_hopcount, prep->prep_ttl, + prep->prep_targetseq, prep->prep_lifetime); + *frm++ = IEEE80211_ELEMID_MESHPREP; + *frm++ = sizeof(struct ieee80211_meshprep_ie) - 2; + *frm++ = prep->prep_flags; + *frm++ = prep->prep_hopcount; + *frm++ = prep->prep_ttl; + IEEE80211_ADDR_COPY(frm, prep->prep_targetaddr); + frm += 6; + ADDWORD(frm, prep->prep_targetseq); + ADDWORD(frm, prep->prep_lifetime); + ADDWORD(frm, prep->prep_metric); + IEEE80211_ADDR_COPY(frm, prep->prep_origaddr); + frm += 6; + ADDWORD(frm, prep->prep_origseq); break; } + } break; default: badaction: From owner-svn-src-projects@FreeBSD.ORG Fri May 15 01:51:47 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C18D81065674; Fri, 15 May 2009 01:51:47 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AE9F58FC1D; Fri, 15 May 2009 01:51:47 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4F1plnM008524; Fri, 15 May 2009 01:51:47 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4F1plPM008523; Fri, 15 May 2009 01:51:47 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905150151.n4F1plPM008523@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Fri, 15 May 2009 01:51:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192131 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 May 2009 01:51:48 -0000 Author: gonzo Date: Fri May 15 01:51:47 2009 New Revision: 192131 URL: http://svn.freebsd.org/changeset/base/192131 Log: - Add definitions for PLL CPU Config register fields Modified: projects/mips/sys/mips/atheros/ar71xxreg.h Modified: projects/mips/sys/mips/atheros/ar71xxreg.h ============================================================================== --- projects/mips/sys/mips/atheros/ar71xxreg.h Fri May 15 00:18:31 2009 (r192130) +++ projects/mips/sys/mips/atheros/ar71xxreg.h Fri May 15 01:51:47 2009 (r192131) @@ -136,7 +136,26 @@ #define USB_CTRL_CONFIG_RESUME_UTMI_PLS_DIS (1 << 1) #define USB_CTRL_CONFIG_UTMI_BACKWARD_ENB (1 << 0) +#define AR71XX_BASE_FREQ 40000000 #define AR71XX_PLL_CPU_CONFIG 0x18050000 +#define PLL_SW_UPDATE (1 << 31) +#define PLL_LOCKED (1 << 30) +#define PLL_AHB_DIV_SHIFT 20 +#define PLL_AHB_DIV_MASK 7 +#define PLL_DDR_DIV_SEL_SHIFT 18 +#define PLL_DDR_DIV_SEL_MASK 3 +#define PLL_CPU_DIV_SEL_SHIFT 16 +#define PLL_CPU_DIV_SEL_MASK 2 +#define PLL_LOOP_BW_SHIFT 12 +#define PLL_LOOP_BW_MASK 0xf +#define PLL_DIV_IN_SHIFT 10 +#define PLL_DIV_IN_MASK 3 +#define PLL_DIV_OUT_SHIFT 8 +#define PLL_DIV_OUT_MASK 3 +#define PLL_FB_SHIFT 3 +#define PLL_FB_MASK 0x1f +#define PLL_BYPASS (1 << 1) +#define PLL_POWER_DOWN (1 << 0) #define AR71XX_PLL_SEC_CONFIG 0x18050004 #define AR71XX_PLL_CPU_CLK_CTRL 0x18050008 #define AR71XX_PLL_ETH_INT0_CLK 0x18050010 From owner-svn-src-projects@FreeBSD.ORG Fri May 15 01:53:09 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 60160106566C; Fri, 15 May 2009 01:53:09 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4D8338FC0C; Fri, 15 May 2009 01:53:09 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4F1r9m0008584; Fri, 15 May 2009 01:53:09 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4F1r9Bw008583; Fri, 15 May 2009 01:53:09 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905150153.n4F1r9Bw008583@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Fri, 15 May 2009 01:53:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192132 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 May 2009 01:53:09 -0000 Author: gonzo Date: Fri May 15 01:53:09 2009 New Revision: 192132 URL: http://svn.freebsd.org/changeset/base/192132 Log: - Calculate CPU frequency using dividers from PLL registers Modified: projects/mips/sys/mips/atheros/ar71xx_machdep.c Modified: projects/mips/sys/mips/atheros/ar71xx_machdep.c ============================================================================== --- projects/mips/sys/mips/atheros/ar71xx_machdep.c Fri May 15 01:51:47 2009 (r192131) +++ projects/mips/sys/mips/atheros/ar71xx_machdep.c Fri May 15 01:53:09 2009 (r192132) @@ -97,8 +97,8 @@ platform_start(__register_t a0 __unused, __register_t a2 __unused, __register_t a3 __unused) { vm_offset_t kernend; - uint64_t platform_counter_freq; - uint32_t reg; + uint64_t platform_counter_freq, freq; + uint32_t reg, div, pll_config; /* clear the BSS and SBSS segments */ kernend = round_page((vm_offset_t)&end); @@ -118,11 +118,16 @@ platform_start(__register_t a0 __unused, * should be called first. */ init_param1(); - /* TODO: Get CPU freq from RedBoot. Is it possible? */ - platform_counter_freq = 680000000UL; + pll_config = ATH_READ_REG(AR71XX_PLL_CPU_CONFIG); + div = ((pll_config >> PLL_FB_SHIFT) & PLL_FB_MASK) + 1; + freq = div * AR71XX_BASE_FREQ; + div = ((pll_config >> PLL_CPU_DIV_SEL_SHIFT) & PLL_CPU_DIV_SEL_MASK) + + 1; + platform_counter_freq = freq / div; mips_timer_init_params(platform_counter_freq, 0); cninit(); + printf("platform frequency: %lld\n", platform_counter_freq); printf("arguments: \n"); printf(" a0 = %08x\n", a0); printf(" a1 = %08x\n", a1); From owner-svn-src-projects@FreeBSD.ORG Fri May 15 01:54:32 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DB6D0106566B; Fri, 15 May 2009 01:54:32 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C8C268FC17; Fri, 15 May 2009 01:54:32 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4F1sWMm008649; Fri, 15 May 2009 01:54:32 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4F1sWXl008648; Fri, 15 May 2009 01:54:32 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905150154.n4F1sWXl008648@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Fri, 15 May 2009 01:54:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192133 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 May 2009 01:54:33 -0000 Author: gonzo Date: Fri May 15 01:54:32 2009 New Revision: 192133 URL: http://svn.freebsd.org/changeset/base/192133 Log: - Calculate clock frequency using PLL registers - Remove stale comments Modified: projects/mips/sys/mips/atheros/uart_cpu_ar71xx.c Modified: projects/mips/sys/mips/atheros/uart_cpu_ar71xx.c ============================================================================== --- projects/mips/sys/mips/atheros/uart_cpu_ar71xx.c Fri May 15 01:53:09 2009 (r192132) +++ projects/mips/sys/mips/atheros/uart_cpu_ar71xx.c Fri May 15 01:54:32 2009 (r192133) @@ -53,27 +53,34 @@ uart_cpu_eqres(struct uart_bas *b1, stru int uart_cpu_getdev(int devtype, struct uart_devinfo *di) { + uint32_t pll_config, div; + uint64_t freq; + + /* PLL freq */ + pll_config = ATH_READ_REG(AR71XX_PLL_CPU_CONFIG); + div = ((pll_config >> PLL_FB_SHIFT) & PLL_FB_MASK) + 1; + freq = div * AR71XX_BASE_FREQ; + /* CPU freq */ + div = ((pll_config >> PLL_CPU_DIV_SEL_SHIFT) & PLL_CPU_DIV_SEL_MASK) + + 1; + freq = freq / div; + /* AHB freq */ + div = (((pll_config >> PLL_AHB_DIV_SHIFT) & PLL_AHB_DIV_MASK) + 1) * 2; + freq = freq / div; + di->ops = uart_getops(&uart_ns8250_class); di->bas.chan = 0; di->bas.bst = ar71xx_bus_space_reversed; di->bas.regshft = 2; - /* TODO: calculate proper AHB freq using PLL registers */ - di->bas.rclk = 85000000; + di->bas.rclk = freq; di->baudrate = 115200; di->databits = 8; di->stopbits = 1; + di->parity = UART_PARITY_NONE; - /* TODO: check if uart_bus_space_io mandatory to set */ uart_bus_space_io = NULL; uart_bus_space_mem = ar71xx_bus_space_reversed; - /* - * FIXME: - * 3 is to compensate big endian, uart operates - * with bus_space_read_1/bus_space_write_1 and hence gets - * highest byte instead of lowest one. Actual fix will involve - * MIPS bus_space fixing. - */ di->bas.bsh = MIPS_PHYS_TO_KSEG1(AR71XX_UART_ADDR); return (0); } From owner-svn-src-projects@FreeBSD.ORG Fri May 15 06:23:11 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 944131065675; Fri, 15 May 2009 06:23:11 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from fallbackmx09.syd.optusnet.com.au (fallbackmx09.syd.optusnet.com.au [211.29.132.242]) by mx1.freebsd.org (Postfix) with ESMTP id 2D7968FC08; Fri, 15 May 2009 06:23:10 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail08.syd.optusnet.com.au (mail08.syd.optusnet.com.au [211.29.132.189]) by fallbackmx09.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id n4F3WvU8021716; Fri, 15 May 2009 13:32:57 +1000 Received: from c122-107-117-19.carlnfd1.nsw.optusnet.com.au (c122-107-117-19.carlnfd1.nsw.optusnet.com.au [122.107.117.19]) by mail08.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id n4F3WrlH011506 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 15 May 2009 13:32:54 +1000 Date: Fri, 15 May 2009 13:32:52 +1000 (EST) From: Bruce Evans X-X-Sender: bde@delplex.bde.org To: Brooks Davis In-Reply-To: <200905140650.n4E6oURU079910@svn.freebsd.org> Message-ID: <20090515122400.B15792@delplex.bde.org> References: <200905140650.n4E6oURU079910@svn.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r192087 - in projects/ngroups: lib/libc/gen lib/libc/rpc lib/libc/sys usr.bin/id usr.bin/newgrp usr.bin/quota usr.sbin/chown usr.sbin/chroot usr.sbin/jail usr.sbin/jexec usr.sbin/lpr/lpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 May 2009 06:23:11 -0000 On Thu, 14 May 2009, Brooks Davis wrote: > Log: > Use to value returned by sysconf(_SC_NGROUPS_MAX) in favor of > NGROUPS_MAX or NGROUPS since POSIX says that NGROUPS_MAX represents a > lower bound on sysconf(_SC_NGROUPS_MAX). Actually, POSIX says that NGROUPS_MAX is identical to sysconf(_SC_NGROUPS_MAX) if it is defined (and the sysconf() succeeds). It is _POSIX_NGROUPS_MAX that gives the lower bound. _POSIX_NGROUPS_MAX is always 8, except under old versions of POSIX that don't require supplementary groups to be supported, where it is always 0. It is a bug for a POSIX implementation to define NGROUPS_MAX if its value is not always identical to sysconf(_SC_NGROUPS_MAX), or for a POSIX application to use NGROUPS_MAX unconditionally. > Modified: projects/ngroups/lib/libc/gen/initgroups.c > ============================================================================== > --- projects/ngroups/lib/libc/gen/initgroups.c Thu May 14 06:48:38 2009 (r192086) > +++ projects/ngroups/lib/libc/gen/initgroups.c Thu May 14 06:50:30 2009 (r192087) > @@ -35,10 +35,12 @@ __FBSDID("$FreeBSD$"); > > #include > > +#include Insertion sort error. > #include > #include "namespace.h" > #include > #include "un-namespace.h" > +#include Insertion sort error. > #include > > int > @@ -46,14 +48,20 @@ initgroups(uname, agroup) > const char *uname; > gid_t agroup; > { > - int ngroups; > + int ngroups, ret; > + gid_t *groups; Insertion sort error. > + > /* > - * Provide space for one group more than NGROUPS to allow > + * Provide space for one group more than possible to allow > * setgroups to fail and set errno. > */ > - gid_t groups[NGROUPS + 1]; > + ngroups = sysconf(_SC_NGROUPS_MAX) + 1; This is missing error checking and overflow checking: - sysconf() returns -1 on error - sysconf() returns long so assigning to an int gives undefined behaviour if its value is preposterously large - adding 1 to sysconf() may cause overflow before the assignment. > + groups = malloc(sizeof(gid_t)*ngroups); This has style bugs and is missing and is missing overflow checking: - missing spaces around binary operator - the multiplication overflows if ngroups is preposterously large See ps/args.c for the messy error handing needed for a similar case (_SC_ARG_MAX for ps). For groups, your changes would be cleaner and correcter using a utility function to handle all the details. Something like the following: %%% gid_t * allocgroups(void) { long ngroups_max; ngroups_max = sysconf(_SC_NGROUPS_MAX); if (ngroups_max < 0 || ngroups_max > LONG_MAX - 1 || ngroups_max > SIZE_MAX / sizeof(gid_t) - 1) return (NULL); return (malloc(sizeof(gid_t) * (ngroups_max + 1))); } %%% > + if (groups == NULL) > + return (ENOSPC); ENOSPC means no space on a device. ENOMEM should be used. Neither ENOSPC nor ENOMEM is a documented errno for initgroups(3). The documented errors are those for setgroups(2). > > - ngroups = NGROUPS + 1; > getgrouplist(uname, agroup, groups, &ngroups); > - return (setgroups(ngroups, groups)); > + ret = setgroups(ngroups, groups); > + free(groups); > + return(ret); > } Lost the space after 'return'. > ... Similarly, except the whitespace errors are smaller. One function aborts on getgroups() failure so maybe it can't handle returning NULL on malloc() failure. Another function uses err() for malloc() failure and warn() for getgroups() failure. Of course, malloc() cannot fail and library functions cannot abort or exit :-). > Modified: projects/ngroups/lib/libc/sys/getgroups.2 > ============================================================================== > --- projects/ngroups/lib/libc/sys/getgroups.2 Thu May 14 06:48:38 2009 (r192086) > +++ projects/ngroups/lib/libc/sys/getgroups.2 Thu May 14 06:50:30 2009 (r192087) > @@ -59,7 +59,7 @@ system call > returns the actual number of groups returned in > .Fa gidset . > No more than > -.Dv NGROUPS_MAX > +.Fn sysconf _SC_NGROUPS_MAX > will ever > be returned. > If This and many other places should use POSIX notation {FOO_MAX} for limits. Saying either NGROUPS_MAX or sysconf(_SC_NGROUPS_MAX} overspecifies the behaviour and makes it hard to change. Since getroups() is a syscall and you haven't changed the kernel yet, NGROUPS_MAX is still correct here. > @@ -91,7 +91,8 @@ an invalid address. > .El > .Sh SEE ALSO > .Xr setgroups 2 , > -.Xr initgroups 3 > +.Xr initgroups 3 , > +.Xr sysconf 3 POSIX doesn't bloat man pages that refer to {FOO_MAX} with references to sysconf(). Here the cross-reference is even less needed since the reference to sysconf() is explicit in context. Bruce From owner-svn-src-projects@FreeBSD.ORG Fri May 15 09:47:11 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 696E5106566B; Fri, 15 May 2009 09:47:11 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 574D48FC0A; Fri, 15 May 2009 09:47:11 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4F9lBod018546; Fri, 15 May 2009 09:47:11 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4F9lBWb018542; Fri, 15 May 2009 09:47:11 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905150947.n4F9lBWb018542@svn.freebsd.org> From: Rui Paulo Date: Fri, 15 May 2009 09:47:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192137 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 May 2009 09:47:11 -0000 Author: rpaulo Date: Fri May 15 09:47:10 2009 New Revision: 192137 URL: http://svn.freebsd.org/changeset/base/192137 Log: * move code to create mesh prep IEs to the mesh C file * add some comments * initial work on airtime link metric report. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_input.c projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_mesh.h projects/mesh11s/sys/net80211/ieee80211_output.c Modified: projects/mesh11s/sys/net80211/ieee80211_input.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_input.c Fri May 15 04:53:55 2009 (r192136) +++ projects/mesh11s/sys/net80211/ieee80211_input.c Fri May 15 09:47:10 2009 (r192137) @@ -807,9 +807,14 @@ ieee80211_recv_action(struct ieee80211_n break; } break; + case IEEE80211_ACTION_CAT_MESHPEERING: + case IEEE80211_ACTION_CAT_MESHLINK: + case IEEE80211_ACTION_CAT_MESHPATH: + /* handled by ieee80211_mesh.c */ + break; default: IEEE80211_NOTE(vap, - IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, ni, + IEEE80211_MSG_ACTION, ni, "%s: category %d not implemented", __func__, ia->ia_category); vap->iv_stats.is_rx_mgtdiscard++; Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Fri May 15 04:53:55 2009 (r192136) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Fri May 15 09:47:10 2009 (r192137) @@ -77,6 +77,8 @@ static int mesh_verify_meshid(struct iee struct ieee80211_meshid_ie *); static int mesh_verify_meshconf(struct ieee80211vap *, struct ieee80211_meshconf_ie *); +static uint32_t mesh_compute_airtime(struct ieee80211vap *, + struct ieee80211_node *); /* timeout values in miliseconds */ static const int ieee80211_mesh_retrytimeout = 40; @@ -884,6 +886,33 @@ mesh_recv_action(struct ieee80211_node * break; } break; + /* + * Airtime link metric handling. + */ + case IEEE80211_ACTION_CAT_MESHLINK: + switch (ia->ia_action) { + case IEEE80211_ACTION_MESHLINK_REQ: + { + uint32_t metric; + + metric = mesh_compute_airtime(vap, ni); + vargs.ptrarg = &metric; + ieee80211_send_action(ni, + IEEE80211_ACTION_CAT_MESHLINK, + IEEE80211_ACTION_MESHLINK_REP, + vargs); + } + break; + case IEEE80211_ACTION_MESHLINK_REP: + break; + default: + IEEE80211_DISCARD(vap, + IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, + wh, NULL, "mesh link using reserved action %d", + ia->ia_action); + vap->iv_stats.is_rx_mgtdiscard++; + } + break; default: IEEE80211_DISCARD(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, @@ -1020,8 +1049,20 @@ mesh_verify_meshconf(struct ieee80211vap return 0; } +#define ADDSHORT(frm, v) do { \ + frm[0] = (v) & 0xff; \ + frm[1] = (v) >> 8; \ + frm += 2; \ +} while (0) +#define ADDWORD(frm, v) do { \ + frm[0] = (v) & 0xff; \ + frm[1] = ((v) >> 8) & 0xff; \ + frm[2] = ((v) >> 16) & 0xff; \ + frm[3] = ((v) >> 24) & 0xff; \ + frm += 4; \ +} while (0) /* - * Add a MESH ID element to a frame. + * Add a Mesh ID IE to a frame. */ uint8_t * ieee80211_add_meshid(uint8_t *frm, struct ieee80211vap *vap) @@ -1037,7 +1078,7 @@ ieee80211_add_meshid(uint8_t *frm, struc } /* - * Add a Mesh Configuration element to a frame. + * Add a Mesh Configuration IE to a frame. * For now just use HWMP routing, Airtime link metric, Null Congestion * Signaling, Null Sync Protocol and Null Authentication. */ @@ -1063,15 +1104,14 @@ ieee80211_add_meshconf(uint8_t *frm, str return frm + sizeof(ie); } +/* + * Add a Mesh Peer Management IE to a frame. + */ uint8_t * ieee80211_add_meshpeer(uint8_t *frm, uint8_t subtype, uint16_t localid, uint16_t peerid, uint16_t reason) { -#define ADDSHORT(frm, v) do { \ - frm[0] = (v) & 0xff; \ - frm[1] = (v) >> 8; \ - frm += 2; \ -} while (0) + *frm++ = IEEE80211_ELEMID_MESHPEER; switch (subtype) { case IEEE80211_MESH_PEER_LINK_OPEN: @@ -1097,10 +1137,70 @@ ieee80211_add_meshpeer(uint8_t *frm, uin ADDSHORT(frm, reason); break; } + return frm; -#undef ADDSHORT } +/* + * Add a Mesh Path Reply IE to a frame. + */ +uint8_t * +ieee80211_add_meshprep(uint8_t *frm, struct ieee80211_meshprep_ie *prep) +{ + + *frm++ = IEEE80211_ELEMID_MESHPREP; + *frm++ = sizeof(struct ieee80211_meshprep_ie) - 2; + *frm++ = prep->prep_flags; + *frm++ = prep->prep_hopcount; + *frm++ = prep->prep_ttl; + IEEE80211_ADDR_COPY(frm, prep->prep_targetaddr); + frm += 6; + ADDWORD(frm, prep->prep_targetseq); + ADDWORD(frm, prep->prep_lifetime); + ADDWORD(frm, prep->prep_metric); + IEEE80211_ADDR_COPY(frm, prep->prep_origaddr); + frm += 6; + ADDWORD(frm, prep->prep_origseq); + + return frm; +} + +/* + * Compute an Airtime Link Metric for the link with this node. + * XXX needs work + */ +static uint32_t +mesh_compute_airtime(struct ieee80211vap *vap, struct ieee80211_node *ni) +{ + uint32_t res, overhead, rate, errrate; + const static int nbits = 8192; + + /* Channel access overhead */ + overhead = 123; /* XXX */ + /* In Mbps */ + rate = 10; + /* In percentage */ + errrate = 10; + res = (overhead + (nbits / rate)) * (100 / (100 - errrate)); + + return res; +} + +/* + * Add a Mesh Link Metric report IE to a frame. + */ +uint8_t * +ieee80211_add_meshlink(uint8_t *frm, uint32_t metric) +{ + + *frm++ = IEEE80211_ELEMID_MESHLINK; + *frm++ = 4; + ADDWORD(frm, metric); + + return frm; +} +#undef ADDSHORT +#undef ADDWORD void ieee80211_create_mbss(struct ieee80211vap *vap, struct ieee80211_channel *chan) Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Fri May 15 04:53:55 2009 (r192136) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Fri May 15 09:47:10 2009 (r192137) @@ -290,6 +290,7 @@ enum { IEEE80211_ACTION_MESHPEERING_OPEN = 0, IEEE80211_ACTION_MESHPEERING_CONFIRM = 1, IEEE80211_ACTION_MESHPEERING_CLOSE = 2, + /* 3-255 reserved */ }; /* @@ -299,6 +300,16 @@ enum { IEEE80211_ACTION_MESHPATH_REQ = 0, IEEE80211_ACTION_MESHPATH_REP = 1, IEEE80211_ACTION_MESHPATH_ERR = 2, + /* 3-255 reserved */ +}; + +/* + * Mesh Link Metric Action codes. + */ +enum { + IEEE80211_ACTION_MESHLINK_REQ = 0, /* Link Metric Request */ + IEEE80211_ACTION_MESHLINK_REP = 1, /* Link Metric Report */ + /* 2-255 reserved */ }; struct ieee80211_meshcntl { @@ -315,6 +326,9 @@ uint8_t * ieee80211_add_meshid(uint8_t * uint8_t * ieee80211_add_meshconf(uint8_t *, struct ieee80211vap *); uint8_t * ieee80211_add_meshpeer(uint8_t *, uint8_t, uint16_t, uint16_t, uint16_t); +uint8_t * ieee80211_add_meshprep(uint8_t *, + struct ieee80211_meshprep_ie *); +uint8_t * ieee80211_add_meshlink(uint8_t *, uint32_t); void ieee80211_create_mbss(struct ieee80211vap *, struct ieee80211_channel *); uint32_t ieee80211_mesh_getseq(void); Modified: projects/mesh11s/sys/net80211/ieee80211_output.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_output.c Fri May 15 04:53:55 2009 (r192136) +++ projects/mesh11s/sys/net80211/ieee80211_output.c Fri May 15 09:47:10 2009 (r192137) @@ -546,13 +546,6 @@ ieee80211_send_action(struct ieee80211_n frm[1] = (v) >> 8; \ frm += 2; \ } while (0) -#define ADDWORD(frm, v) do { \ - frm[0] = (v) & 0xff; \ - frm[1] = ((v) >> 8) & 0xff; \ - frm[2] = ((v) >> 16) & 0xff; \ - frm[3] = ((v) >> 24) & 0xff; \ - frm += 4; \ -} while (0) #define MS(_v, _f) (((_v) & _f) >> _f##_S) #define SM(_v, _f) (((_v) << _f##_S) & _f) struct ieee80211vap *vap = ni->ni_vap; @@ -794,19 +787,7 @@ ieee80211_send_action(struct ieee80211_n "seq 0x%x, lifetime 0x%x", prep->prep_flags, prep->prep_hopcount, prep->prep_ttl, prep->prep_targetseq, prep->prep_lifetime); - *frm++ = IEEE80211_ELEMID_MESHPREP; - *frm++ = sizeof(struct ieee80211_meshprep_ie) - 2; - *frm++ = prep->prep_flags; - *frm++ = prep->prep_hopcount; - *frm++ = prep->prep_ttl; - IEEE80211_ADDR_COPY(frm, prep->prep_targetaddr); - frm += 6; - ADDWORD(frm, prep->prep_targetseq); - ADDWORD(frm, prep->prep_lifetime); - ADDWORD(frm, prep->prep_metric); - IEEE80211_ADDR_COPY(frm, prep->prep_origaddr); - frm += 6; - ADDWORD(frm, prep->prep_origseq); + frm = ieee80211_add_meshprep(frm, prep); break; } } From owner-svn-src-projects@FreeBSD.ORG Fri May 15 21:36:50 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9491B106564A; Fri, 15 May 2009 21:36:50 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 82AB78FC0A; Fri, 15 May 2009 21:36:50 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4FLaomA035423; Fri, 15 May 2009 21:36:50 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4FLaoUY035419; Fri, 15 May 2009 21:36:50 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905152136.n4FLaoUY035419@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Fri, 15 May 2009 21:36:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192161 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 May 2009 21:36:50 -0000 Author: gonzo Date: Fri May 15 21:36:50 2009 New Revision: 192161 URL: http://svn.freebsd.org/changeset/base/192161 Log: - Add pci bus space that translates byte order to little endian, may be it will be merged with bus_space_reversed later - Handle memory resources close to bus in order to control bus_space_tag Added: projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.c projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.h Modified: projects/mips/sys/mips/atheros/ar71xx_pci.c projects/mips/sys/mips/atheros/files.ar71xx Modified: projects/mips/sys/mips/atheros/ar71xx_pci.c ============================================================================== --- projects/mips/sys/mips/atheros/ar71xx_pci.c Fri May 15 21:34:58 2009 (r192160) +++ projects/mips/sys/mips/atheros/ar71xx_pci.c Fri May 15 21:36:50 2009 (r192161) @@ -52,7 +52,8 @@ __FBSDID("$FreeBSD$"); #include #include "pcib_if.h" -#include "mips/atheros/ar71xxreg.h" +#include +#include #undef AR71XX_PCI_DEBUG #ifdef AR71XX_PCI_DEBUG @@ -354,7 +355,7 @@ ar71xx_pci_alloc_resource(device_t bus, { struct ar71xx_pci_softc *sc = device_get_softc(bus); - struct resource *rv = NULL; + struct resource *rv; struct rman *rm; switch (type) { @@ -382,9 +383,32 @@ ar71xx_pci_alloc_resource(device_t bus, } } + return (rv); } + +static int +ar71xx_pci_activate_resource(device_t bus, device_t child, int type, int rid, + struct resource *r) +{ + int res = (BUS_ACTIVATE_RESOURCE(device_get_parent(bus), + child, type, rid, r)); + + if (!res) { + switch(type) { + case SYS_RES_MEMORY: + case SYS_RES_IOPORT: + rman_set_bustag(r, ar71xx_bus_space_pcimem); + break; + } + } + + return (res); +} + + + static int ar71xx_pci_setup_intr(device_t bus, device_t child, struct resource *ires, int flags, driver_filter_t *filt, driver_intr_t *handler, @@ -495,7 +519,7 @@ static device_method_t ar71xx_pci_method DEVMETHOD(bus_write_ivar, ar71xx_pci_write_ivar), DEVMETHOD(bus_alloc_resource, ar71xx_pci_alloc_resource), DEVMETHOD(bus_release_resource, bus_generic_release_resource), - DEVMETHOD(bus_activate_resource, bus_generic_activate_resource), + DEVMETHOD(bus_activate_resource, ar71xx_pci_activate_resource), DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), DEVMETHOD(bus_setup_intr, ar71xx_pci_setup_intr), DEVMETHOD(bus_teardown_intr, ar71xx_pci_teardown_intr), Added: projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.c Fri May 15 21:36:50 2009 (r192161) @@ -0,0 +1,198 @@ +/*- + * Copyright (c) 2009, Oleksandr Tymoshenko + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include +#include + +static bs_r_1_s_proto(pcimem); +static bs_r_2_s_proto(pcimem); +static bs_r_4_s_proto(pcimem); +static bs_w_1_s_proto(pcimem); +static bs_w_2_s_proto(pcimem); +static bs_w_4_s_proto(pcimem); + +/* + * Bus space that handles offsets in word for 1/2 bytes read/write access. + * Byte order of values is handled by device drivers itself. + */ +static struct bus_space bus_space_pcimem = { + /* cookie */ + (void *) 0, + + /* mapping/unmapping */ + generic_bs_map, + generic_bs_unmap, + generic_bs_subregion, + + /* allocation/deallocation */ + NULL, + NULL, + + /* barrier */ + generic_bs_barrier, + + /* read (single) */ + generic_bs_r_1, + generic_bs_r_2, + generic_bs_r_4, + NULL, + + /* read multiple */ + generic_bs_rm_1, + generic_bs_rm_2, + generic_bs_rm_4, + NULL, + + /* read region */ + generic_bs_rr_1, + generic_bs_rr_2, + generic_bs_rr_4, + NULL, + + /* write (single) */ + generic_bs_w_1, + generic_bs_w_2, + generic_bs_w_4, + NULL, + + /* write multiple */ + generic_bs_wm_1, + generic_bs_wm_2, + generic_bs_wm_4, + NULL, + + /* write region */ + NULL, + generic_bs_wr_2, + generic_bs_wr_4, + NULL, + + /* set multiple */ + NULL, + NULL, + NULL, + NULL, + + /* set region */ + NULL, + generic_bs_sr_2, + generic_bs_sr_4, + NULL, + + /* copy */ + NULL, + generic_bs_c_2, + NULL, + NULL, + + /* read (single) stream */ + pcimem_bs_r_1_s, + pcimem_bs_r_2_s, + pcimem_bs_r_4_s, + NULL, + + /* read multiple stream */ + generic_bs_rm_1, + generic_bs_rm_2, + generic_bs_rm_4, + NULL, + + /* read region stream */ + generic_bs_rr_1, + generic_bs_rr_2, + generic_bs_rr_4, + NULL, + + /* write (single) stream */ + pcimem_bs_w_1_s, + pcimem_bs_w_2_s, + pcimem_bs_w_4_s, + NULL, + + /* write multiple stream */ + generic_bs_wm_1, + generic_bs_wm_2, + generic_bs_wm_4, + NULL, + + /* write region stream */ + NULL, + generic_bs_wr_2, + generic_bs_wr_4, + NULL, +}; + +bus_space_tag_t ar71xx_bus_space_pcimem = &bus_space_pcimem; + +static uint8_t +pcimem_bs_r_1_s(void *t, bus_space_handle_t h, bus_size_t o) +{ + + return readb(h + (o &~ 3) + (3 - (o & 3))); +} + +static void +pcimem_bs_w_1_s(void *t, bus_space_handle_t h, bus_size_t o, u_int8_t v) +{ + + writeb(h + (o &~ 3) + (3 - (o & 3)), v); +} + +static uint16_t +pcimem_bs_r_2_s(void *t, bus_space_handle_t h, bus_size_t o) +{ + + return readw(h + (o &~ 3) + (2 - (o & 3))); +} + +static void +pcimem_bs_w_2_s(void *t, bus_space_handle_t h, bus_size_t o, uint16_t v) +{ + + writew(h + (o &~ 3) + (2 - (o & 3)), v); +} + +static uint32_t +pcimem_bs_r_4_s(void *t, bus_space_handle_t h, bus_size_t o) +{ + + return le32toh(readl(h + o)); +} + +static void +pcimem_bs_w_4_s(void *t, bus_space_handle_t h, bus_size_t o, uint32_t v) +{ + + writel(h + o, htole32(v)); +} Added: projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.h Fri May 15 21:36:50 2009 (r192161) @@ -0,0 +1,33 @@ +/*- + * Copyright (c) 2009, Oleksandr Tymoshenko + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef __AR71XX_PCI_BUS_SPACEH__ +#define __AR71XX_PCI_BUS_SPACEH__ + +extern bus_space_tag_t ar71xx_bus_space_pcimem; + +#endif /* __AR71XX_PCI_BUS_SPACEH__ */ Modified: projects/mips/sys/mips/atheros/files.ar71xx ============================================================================== --- projects/mips/sys/mips/atheros/files.ar71xx Fri May 15 21:34:58 2009 (r192160) +++ projects/mips/sys/mips/atheros/files.ar71xx Fri May 15 21:36:50 2009 (r192161) @@ -5,6 +5,7 @@ mips/atheros/ar71xx_machdep.c standard mips/atheros/ar71xx_ehci.c optional ehci mips/atheros/ar71xx_ohci.c optional ohci mips/atheros/ar71xx_pci.c optional pci +mips/atheros/ar71xx_pci_bus_space.c optional pci mips/atheros/if_arge.c optional arge mips/atheros/uart_bus_ar71xx.c optional uart mips/atheros/uart_cpu_ar71xx.c optional uart From owner-svn-src-projects@FreeBSD.ORG Sat May 16 02:34:04 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 11FDE106564A; Sat, 16 May 2009 02:34:04 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F42088FC08; Sat, 16 May 2009 02:34:03 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G2Y3wi041620; Sat, 16 May 2009 02:34:03 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G2Y309041619; Sat, 16 May 2009 02:34:03 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905160234.n4G2Y309041619@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Sat, 16 May 2009 02:34:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192176 - projects/mips/sys/mips/mips X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2009 02:34:04 -0000 Author: gonzo Date: Sat May 16 02:34:03 2009 New Revision: 192176 URL: http://svn.freebsd.org/changeset/base/192176 Log: - Add informational title for cache info lines to separate them from environment variables dump Modified: projects/mips/sys/mips/mips/cache_mipsNN.c Modified: projects/mips/sys/mips/mips/cache_mipsNN.c ============================================================================== --- projects/mips/sys/mips/mips/cache_mipsNN.c Sat May 16 00:56:54 2009 (r192175) +++ projects/mips/sys/mips/mips/cache_mipsNN.c Sat May 16 02:34:03 2009 (r192176) @@ -115,6 +115,7 @@ mipsNN_cache_init(struct mips_cpuinfo * pdcache_way_mask = cpuinfo->l1.dc_nways - 1; #define CACHE_DEBUG #ifdef CACHE_DEBUG + printf("Cache info:\n"); if (cpuinfo->icache_virtual) printf(" icache is virtual\n"); printf(" picache_stride = %d\n", picache_stride); From owner-svn-src-projects@FreeBSD.ORG Sat May 16 02:39:13 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AA09D1065675; Sat, 16 May 2009 02:39:13 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 958FD8FC12; Sat, 16 May 2009 02:39:13 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G2dDkr041749; Sat, 16 May 2009 02:39:13 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G2dD8U041748; Sat, 16 May 2009 02:39:13 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905160239.n4G2dD8U041748@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Sat, 16 May 2009 02:39:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192177 - projects/mips/sys/mips/include X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2009 02:39:14 -0000 Author: gonzo Date: Sat May 16 02:39:13 2009 New Revision: 192177 URL: http://svn.freebsd.org/changeset/base/192177 Log: - Add MIPS_IS_KSEG0_ADDR, MIPS_IS_KSEG1_ADDR and MIPS_IS_VALID_PTR macroses thet check if address belongs to KSEG0, KSEG1 or both of them respectively. Modified: projects/mips/sys/mips/include/cpu.h Modified: projects/mips/sys/mips/include/cpu.h ============================================================================== --- projects/mips/sys/mips/include/cpu.h Sat May 16 02:34:03 2009 (r192176) +++ projects/mips/sys/mips/include/cpu.h Sat May 16 02:39:13 2009 (r192177) @@ -72,6 +72,15 @@ #define MIPS_KSEG0_TO_PHYS(x) ((unsigned)(x) & MIPS_PHYS_MASK) #define MIPS_KSEG1_TO_PHYS(x) ((unsigned)(x) & MIPS_PHYS_MASK) +#define MIPS_IS_KSEG0_ADDR(x) \ + (((vm_offset_t)(x) >= MIPS_KSEG0_START) && \ + ((vm_offset_t)(x) <= MIPS_KSEG0_END)) +#define MIPS_IS_KSEG1_ADDR(x) \ + (((vm_offset_t)(x) >= MIPS_KSEG1_START) && \ + ((vm_offset_t)(x) <= MIPS_KSEG1_END)) +#define MIPS_IS_VALID_PTR(x) (MIPS_IS_KSEG0_ADDR(x) || \ + MIPS_IS_KSEG1_ADDR(x)) + /* * Status register. */ From owner-svn-src-projects@FreeBSD.ORG Sat May 16 02:43:24 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ADCB31065670; Sat, 16 May 2009 02:43:24 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 813F68FC12; Sat, 16 May 2009 02:43:24 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G2hOv4041858; Sat, 16 May 2009 02:43:24 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G2hOpl041857; Sat, 16 May 2009 02:43:24 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905160243.n4G2hOpl041857@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Sat, 16 May 2009 02:43:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192178 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2009 02:43:25 -0000 Author: gonzo Date: Sat May 16 02:43:24 2009 New Revision: 192178 URL: http://svn.freebsd.org/changeset/base/192178 Log: - Get memory size and base MAC address from RedBoot (if available) Modified: projects/mips/sys/mips/atheros/ar71xx_machdep.c Modified: projects/mips/sys/mips/atheros/ar71xx_machdep.c ============================================================================== --- projects/mips/sys/mips/atheros/ar71xx_machdep.c Sat May 16 02:39:13 2009 (r192177) +++ projects/mips/sys/mips/atheros/ar71xx_machdep.c Sat May 16 02:43:24 2009 (r192178) @@ -45,6 +45,8 @@ __FBSDID("$FreeBSD$"); #include #include +#include + #include #include #include @@ -56,6 +58,7 @@ __FBSDID("$FreeBSD$"); extern int *edata; extern int *end; +uint32_t ar711_base_mac[ETHER_ADDR_LEN]; void platform_halt(void) @@ -99,13 +102,43 @@ platform_start(__register_t a0 __unused, vm_offset_t kernend; uint64_t platform_counter_freq, freq; uint32_t reg, div, pll_config; + int argc, i, count = 0; + char **argv, **envp; /* clear the BSS and SBSS segments */ kernend = round_page((vm_offset_t)&end); memset(&edata, 0, kernend - (vm_offset_t)(&edata)); - /* TODO: Get available memory from RedBoot. Is it possible? */ - realmem = btoc(64*1024*1024); + argc = a0; + argv = (char**)a1; + envp = (char**)a2; + /* + * Protect ourselves from garbage in registers + */ + if (MIPS_IS_VALID_PTR(envp)) { + for (i = 0; envp[i]; i += 2) + { + if (strcmp(envp[i], "memsize") == 0) + realmem = btoc(strtoul(envp[i+1], NULL, 16)); + else if (strcmp(envp[i], "ethaddr") == 0) { + count = sscanf(envp[i+1], "%x.%x.%x.%x.%x.%x", + &ar711_base_mac[0], &ar711_base_mac[1], + &ar711_base_mac[2], &ar711_base_mac[3], + &ar711_base_mac[4], &ar711_base_mac[5]); + if (count < 6) + memset(ar711_base_mac, 0, + sizeof(ar711_base_mac)); + } + } + } + + /* + * Just wild guess. RedBoot let us down and didn't reported + * memory size + */ + if (realmem == 0) + realmem = btoc(32*1024*1024); + /* phys_avail regions are in bytes */ phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end); phys_avail[1] = ctob(realmem); @@ -134,6 +167,23 @@ platform_start(__register_t a0 __unused, printf(" a2 = %08x\n", a2); printf(" a3 = %08x\n", a3); + printf("Cmd line:"); + if (MIPS_IS_VALID_PTR(argv)) { + for (i = 0; i < argc; i++) + printf(" %s", argv[i]); + } + else + printf ("argv is invalid"); + printf("\n"); + + printf("Environment:\n"); + if (MIPS_IS_VALID_PTR(envp)) { + for (i = 0; envp[i]; i+=2) + printf(" %s = %s\n", envp[i], envp[i+1]); + } + else + printf ("envp is invalid\n"); + init_param2(physmem); mips_cpu_init(); pmap_bootstrap(); From owner-svn-src-projects@FreeBSD.ORG Sat May 16 02:45:38 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C3ACE106564A; Sat, 16 May 2009 02:45:38 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B19268FC0C; Sat, 16 May 2009 02:45:38 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G2jc6u041951; Sat, 16 May 2009 02:45:38 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G2jcBx041950; Sat, 16 May 2009 02:45:38 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905160245.n4G2jcBx041950@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Sat, 16 May 2009 02:45:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192179 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2009 02:45:39 -0000 Author: gonzo Date: Sat May 16 02:45:38 2009 New Revision: 192179 URL: http://svn.freebsd.org/changeset/base/192179 Log: - Set MAC Address obtained from RedBoot or generate random one Modified: projects/mips/sys/mips/atheros/if_arge.c Modified: projects/mips/sys/mips/atheros/if_arge.c ============================================================================== --- projects/mips/sys/mips/atheros/if_arge.c Sat May 16 02:43:24 2009 (r192178) +++ projects/mips/sys/mips/atheros/if_arge.c Sat May 16 02:45:38 2009 (r192179) @@ -153,6 +153,13 @@ DRIVER_MODULE(arge, nexus, arge_driver, DRIVER_MODULE(miibus, arge, miibus_driver, miibus_devclass, 0, 0); /* + * RedBoot passes MAC address to entry point as environment + * variable. platfrom_start parses it and stores in this variable + */ +extern uint32_t ar711_base_mac[ETHER_ADDR_LEN]; + + +/* * Flushes all */ static void @@ -183,7 +190,8 @@ arge_attach(device_t dev) struct ifnet *ifp; struct arge_softc *sc; int error = 0, rid, phynum; - uint32_t reg; + uint32_t reg, rnd; + int is_base_mac_empty, i; sc = device_get_softc(dev); sc->arge_dev = dev; @@ -269,12 +277,29 @@ arge_attach(device_t dev) ifp->if_capenable = ifp->if_capabilities; - eaddr[0] = 0x00; - eaddr[1] = 0x15; - eaddr[2] = 0x6d; - eaddr[3] = 0xc1; - eaddr[4] = 0x28; - eaddr[5] = 0x2e; + is_base_mac_empty = 1; + for (i = 0; i < ETHER_ADDR_LEN; i++) { + eaddr[i] = ar711_base_mac[i] & 0xff; + if (eaddr[i] != 0) + is_base_mac_empty = 0; + } + + if (is_base_mac_empty) { + /* + * No MAC address configured. Generate the random one. + */ + if (bootverbose) + device_printf(dev, + "Generating random ethernet address.\n"); + + rnd = arc4random(); + eaddr[0] = 'b'; + eaddr[1] = 's'; + eaddr[2] = 'd'; + eaddr[3] = (rnd >> 24) & 0xff; + eaddr[4] = (rnd >> 16) & 0xff; + eaddr[5] = (rnd >> 8) & 0xff; + } if (arge_dma_alloc(sc) != 0) { error = ENXIO; From owner-svn-src-projects@FreeBSD.ORG Sat May 16 06:49:06 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 855AE1065670; Sat, 16 May 2009 06:49:06 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 68F8D8FC16; Sat, 16 May 2009 06:49:06 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G6n6G4047367; Sat, 16 May 2009 06:49:06 GMT (envelope-from rwatson@svn.freebsd.org) Received: (from rwatson@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G6n6QG047364; Sat, 16 May 2009 06:49:06 GMT (envelope-from rwatson@svn.freebsd.org) Message-Id: <200905160649.n4G6n6QG047364@svn.freebsd.org> From: Robert Watson Date: Sat, 16 May 2009 06:49:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192190 - projects/pnet/sys/net X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2009 06:49:06 -0000 Author: rwatson Date: Sat May 16 06:49:05 2009 New Revision: 192190 URL: http://svn.freebsd.org/changeset/base/192190 Log: Add netisr2_dispatch_if() and netisr2_queue_if(), which accept an explicit ifnet argument. For now we just use it to contribute to an overall flow identifier, but in the future we might want to use it as a source of work placement policy. Implement netisr_dispatch() and netisr_queue() for netisr2, which allows existing netisr dispatch points to be used unchanged. These are simple wrappers around netisr2_*_if(), and pass in the mbuf's receieve interface pointer, which will cause netisr2 to distribute work to threads even without protocol- or driver-generated flow IDs. When there's only one netisr2 worker, don't bother with flow IDs, CPU lookups, etc, just use the one thread, avoiding overhead. Rename netisr2_deregister() to netisr2_unregister() to match existing netisr naming convention. Modified: projects/pnet/sys/net/netisr.c projects/pnet/sys/net/netisr2.c projects/pnet/sys/net/netisr2.h Modified: projects/pnet/sys/net/netisr.c ============================================================================== --- projects/pnet/sys/net/netisr.c Sat May 16 06:42:32 2009 (r192189) +++ projects/pnet/sys/net/netisr.c Sat May 16 06:49:05 2009 (r192190) @@ -28,6 +28,7 @@ */ #include "opt_device_polling.h" +#include "opt_netisr.h" #include #include @@ -149,6 +150,7 @@ netisr_processqueue(struct netisr *ni) /* * Call the netisr directly instead of queueing the packet, if possible. */ +#ifndef NETISR2 void netisr_dispatch(int num, struct mbuf *m) { @@ -209,6 +211,7 @@ netisr_queue(int num, struct mbuf *m) schednetisr(num); return (0); } +#endif /* !NETISR2 */ static void swi_net(void *dummy) Modified: projects/pnet/sys/net/netisr2.c ============================================================================== --- projects/pnet/sys/net/netisr2.c Sat May 16 06:42:32 2009 (r192189) +++ projects/pnet/sys/net/netisr2.c Sat May 16 06:49:05 2009 (r192190) @@ -352,20 +352,20 @@ netisr2_drain_proto(struct netisr_work * /* * Remove the registration of a network protocol, which requires clearing * per-protocol fields across all workstreams, including freeing all mbufs in - * the queues at time of deregister. All work in netisr2 is briefly + * the queues at time of unregister. All work in netisr2 is briefly * suspended while this takes place. */ void -netisr2_deregister(u_int proto) +netisr2_unregister(u_int proto) { struct netisr_work *npwp; int i; NETISR_WLOCK(); KASSERT(proto < NETISR_MAXPROT, - ("netisr_deregister(%d): protocol too big", proto)); + ("netisr_unregister(%d): protocol too big", proto)); KASSERT(np[proto].np_func != NULL, - ("netisr_deregister(%d): protocol not registered", proto)); + ("netisr_unregister(%d): protocol not registered", proto)); np[proto].np_name = NULL; np[proto].np_func = NULL; @@ -401,6 +401,14 @@ netisr2_selectcpu(struct netisr_proto *n NETISR_LOCK_ASSERT(); + /* + * In the event we have only one worker, shortcut and deliver to it + * without further ado. + */ + if (nws_count == 1) { + *cpuidp = nws_array[0]; + return (m); + } if (!(m->m_flags & M_FLOWID) && npp->np_m2flow != NULL) { m = npp->np_m2flow(m); if (m == NULL) @@ -597,6 +605,20 @@ netisr2_queue(u_int proto, uintptr_t sou } int +netisr2_queue_if(u_int proto, struct ifnet *ifp, struct mbuf *m) +{ + + return (netisr2_queue(proto, (uintptr_t)ifp, m)); +} + +int +netisr_queue(int proto, struct mbuf *m) +{ + + return (netisr2_queue_if(proto, m->m_pkthdr.rcvif, m)); +} + +int netisr2_dispatch(u_int proto, uintptr_t source, struct mbuf *m) { struct netisr_workstream *nwsp; @@ -623,6 +645,20 @@ netisr2_dispatch(u_int proto, uintptr_t return (0); } +int +netisr2_dispatch_if(u_int proto, struct ifnet *ifp, struct mbuf *m) +{ + + return (netisr2_dispatch(proto, (uintptr_t)ifp, m)); +} + +void +netisr_dispatch(int proto, struct mbuf *m) +{ + + (void)netisr2_dispatch_if(proto, m->m_pkthdr.rcvif, m); +} + static void netisr2_start_swi(u_int cpuid, struct pcpu *pc) { Modified: projects/pnet/sys/net/netisr2.h ============================================================================== --- projects/pnet/sys/net/netisr2.h Sat May 16 06:42:32 2009 (r192189) +++ projects/pnet/sys/net/netisr2.h Sat May 16 06:49:05 2009 (r192190) @@ -69,15 +69,19 @@ void netisr2_register(u_int proto, const netisr_m2flow_t m2flow, netisr_flow2cpu_t flow2cpu, u_int max); /* - * Deregister a protocol handler. + * Unregister a protocol handler. */ -void netisr2_deregister(u_int proto); +void netisr2_unregister(u_int proto); /* * Process a packet destined for a protocol, and attempt direct dispatch. */ +//int netisr_dispatch(u_int proto, struct mbuf *m); +//int netisr_queue(u_int proto, struct mbuf *m); int netisr2_dispatch(u_int proto, uintptr_t source, struct mbuf *m); +int netisr2_dispatch_if(u_int proto, struct ifnet *ifp, struct mbuf *m); int netisr2_queue(u_int proto, uintptr_t source, struct mbuf *m); +int netisr2_queue_if(u_int proto, struct ifnet *ifp, struct mbuf *m); /* * Provide a default implementation of "map a flow ID to a cpu ID". From owner-svn-src-projects@FreeBSD.ORG Sat May 16 06:57:26 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 105411065670; Sat, 16 May 2009 06:57:26 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F053F8FC0C; Sat, 16 May 2009 06:57:25 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G6vPuk047580; Sat, 16 May 2009 06:57:25 GMT (envelope-from rwatson@svn.freebsd.org) Received: (from rwatson@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G6vPWV047569; Sat, 16 May 2009 06:57:25 GMT (envelope-from rwatson@svn.freebsd.org) Message-Id: <200905160657.n4G6vPWV047569@svn.freebsd.org> From: Robert Watson Date: Sat, 16 May 2009 06:57:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192191 - in projects/pnet/sys: net netatalk netinet netinet6 netipsec netipx netnatm X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2009 06:57:26 -0000 Author: rwatson Date: Sat May 16 06:57:24 2009 New Revision: 192191 URL: http://svn.freebsd.org/changeset/base/192191 Log: Allow netisr2 to be used wherever netisr is used, subject to options NETISR2. In most cases, rely on existing ifnet ordering, or driver- provided flow IDs, but for IP divert sockets use the sending socket, and IPSEC use the security association for ordering. No custom protocol handlers are registered. Modified: projects/pnet/sys/net/rtsock.c projects/pnet/sys/netatalk/ddp_usrreq.c projects/pnet/sys/netinet/if_ether.c projects/pnet/sys/netinet/igmp.c projects/pnet/sys/netinet/ip_divert.c projects/pnet/sys/netinet/ip_input.c projects/pnet/sys/netinet6/ip6_input.c projects/pnet/sys/netinet6/ip6_output.c projects/pnet/sys/netipsec/ipsec_input.c projects/pnet/sys/netipx/ipx_input.c projects/pnet/sys/netnatm/natm_proto.c Modified: projects/pnet/sys/net/rtsock.c ============================================================================== --- projects/pnet/sys/net/rtsock.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/net/rtsock.c Sat May 16 06:57:24 2009 (r192191) @@ -34,6 +34,7 @@ #include "opt_route.h" #include "opt_inet.h" #include "opt_inet6.h" +#include "opt_netisr.h" #include #include @@ -57,6 +58,7 @@ #include #include #include +#include #include #include #include @@ -128,7 +130,12 @@ rts_init(void) if (TUNABLE_INT_FETCH("net.route.netisr_maxqlen", &tmp)) rtsintrq.ifq_maxlen = tmp; mtx_init(&rtsintrq.ifq_mtx, "rts_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_ROUTE, "route", rts_input, NULL, NULL, + rtsintrq.ifq_maxlen); +#else netisr_register(NETISR_ROUTE, rts_input, &rtsintrq, 0); +#endif } SYSINIT(rtsock, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, rts_init, 0); @@ -1224,7 +1231,11 @@ rt_dispatch(struct mbuf *m, const struct *(unsigned short *)(tag + 1) = sa->sa_family; m_tag_prepend(m, tag); } +#ifdef NETISR2 + netisr2_queue(NETISR_ROUTE, 0, m); /* mbuf is free'd on failure. */ +#else netisr_queue(NETISR_ROUTE, m); /* mbuf is free'd on failure. */ +#endif } /* Modified: projects/pnet/sys/netatalk/ddp_usrreq.c ============================================================================== --- projects/pnet/sys/netatalk/ddp_usrreq.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netatalk/ddp_usrreq.c Sat May 16 06:57:24 2009 (r192191) @@ -50,6 +50,8 @@ * $FreeBSD$ */ +#include "opt_netisr.h" + #include #include #include @@ -60,6 +62,7 @@ #include #include #include +#include #include #include @@ -263,9 +266,18 @@ ddp_init(void) mtx_init(&atintrq2.ifq_mtx, "at2_inq", NULL, MTX_DEF); mtx_init(&aarpintrq.ifq_mtx, "aarp_inq", NULL, MTX_DEF); DDP_LIST_LOCK_INIT(); +#ifdef NETISR2 + netisr2_register(NETISR_ATALK1, "atalk1", at1intr, NULL, NULL, + IFQ_MAXLEN); + netisr2_register(NETISR_ATALK2, "atalk2", at2intr, NULL, NULL, + IFQ_MAXLEN); + netisr2_register(NETISR_AARP, "aarp", aarpintr, NULL, NULL, + IFQ_MAXLEN); +#else netisr_register(NETISR_ATALK1, at1intr, &atintrq1, 0); netisr_register(NETISR_ATALK2, at2intr, &atintrq2, 0); netisr_register(NETISR_AARP, aarpintr, &aarpintrq, 0); +#endif } #if 0 Modified: projects/pnet/sys/netinet/if_ether.c ============================================================================== --- projects/pnet/sys/netinet/if_ether.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet/if_ether.c Sat May 16 06:57:24 2009 (r192191) @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include "opt_inet.h" #include "opt_route.h" #include "opt_mac.h" +#include "opt_netisr.h" #include "opt_carp.h" #include @@ -60,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -823,6 +825,10 @@ arp_init(void) arpintrq.ifq_maxlen = 50; mtx_init(&arpintrq.ifq_mtx, "arp_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_ARP, "arp", arpintr, NULL, NULL, 50); +#else netisr_register(NETISR_ARP, arpintr, &arpintrq, 0); +#endif } SYSINIT(arp, SI_SUB_PROTO_DOMAIN, SI_ORDER_ANY, arp_init, 0); Modified: projects/pnet/sys/netinet/igmp.c ============================================================================== --- projects/pnet/sys/netinet/igmp.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet/igmp.c Sat May 16 06:57:24 2009 (r192191) @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #include "opt_mac.h" +#include "opt_netisr.h" #include "opt_route.h" #include @@ -68,6 +69,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -3548,7 +3550,12 @@ igmp_sysinit(void) m_raopt = igmp_ra_alloc(); +#ifdef NETISR2 + netisr2_register(NETISR_IGMP, "igmp", igmp_intr, NULL, NULL, + IFQ_MAXLEN); +#else netisr_register(NETISR_IGMP, igmp_intr, &igmpoq, 0); +#endif } static void @@ -3557,7 +3564,11 @@ igmp_sysuninit(void) CTR1(KTR_IGMPV3, "%s: tearing down", __func__); +#ifdef NETISR2 + netisr2_unregister(NETISR_IGMP); +#else netisr_unregister(NETISR_IGMP); +#endif mtx_destroy(&igmpoq.ifq_mtx); m_free(m_raopt); Modified: projects/pnet/sys/netinet/ip_divert.c ============================================================================== --- projects/pnet/sys/netinet/ip_divert.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet/ip_divert.c Sat May 16 06:57:24 2009 (r192191) @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #error "IPDIVERT requires IPFIREWALL" #endif #endif +#include "opt_netisr.h" #include #include @@ -66,6 +67,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -468,7 +470,11 @@ div_output(struct socket *so, struct mbu SOCK_UNLOCK(so); #endif /* Send packet to input processing via netisr */ +#ifdef NETISR2 + netisr2_queue(NETISR_IP, (uintptr_t)so, m); +#else netisr_queue(NETISR_IP, m); +#endif } return error; Modified: projects/pnet/sys/netinet/ip_input.c ============================================================================== --- projects/pnet/sys/netinet/ip_input.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet/ip_input.c Sat May 16 06:57:24 2009 (r192191) @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include "opt_ipsec.h" #include "opt_route.h" #include "opt_mac.h" +#include "opt_netisr.h" #include "opt_carp.h" #include @@ -63,6 +64,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -348,7 +350,11 @@ ip_init(void) IPQ_LOCK_INIT(); ipintrq.ifq_maxlen = ipqmaxlen; mtx_init(&ipintrq.ifq_mtx, "ip_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_IP, "ipv4", ip_input, NULL, NULL, ipqmaxlen); +#else netisr_register(NETISR_IP, ip_input, &ipintrq, 0); +#endif ip_ft = flowtable_alloc(ip_output_flowtable_size, FL_PCPU); } Modified: projects/pnet/sys/netinet6/ip6_input.c ============================================================================== --- projects/pnet/sys/netinet6/ip6_input.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet6/ip6_input.c Sat May 16 06:57:24 2009 (r192191) @@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$"); #include "opt_inet.h" #include "opt_inet6.h" #include "opt_ipsec.h" +#include "opt_netisr.h" #include "opt_route.h" #include @@ -88,6 +89,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -297,7 +299,12 @@ ip6_init(void) ip6intrq.ifq_maxlen = V_ip6qmaxlen; /* XXX */ mtx_init(&ip6intrq.ifq_mtx, "ip6_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_IPV6, "ipv4", ip6_input, NULL, NULL, + V_ip6qmaxlen); +#else netisr_register(NETISR_IPV6, ip6_input, &ip6intrq, 0); +#endif } static int Modified: projects/pnet/sys/netinet6/ip6_output.c ============================================================================== Modified: projects/pnet/sys/netipsec/ipsec_input.c ============================================================================== --- projects/pnet/sys/netipsec/ipsec_input.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netipsec/ipsec_input.c Sat May 16 06:57:24 2009 (r192191) @@ -44,6 +44,7 @@ #include "opt_inet6.h" #include "opt_ipsec.h" #include "opt_enc.h" +#include "opt_netisr.h" #include #include @@ -60,6 +61,7 @@ #include #include #include +#include #include #include @@ -481,7 +483,15 @@ ipsec4_common_input_cb(struct mbuf *m, s /* * Re-dispatch via software interrupt. */ +#ifdef NETISR2 + /* + * XXXRW: Is this ordering sufficient? Perhaps should be + * m->m_pkthdr.rcvif? + */ + if ((error = netisr2_queue(NETISR_IP, (uintptr_t)sav, m))) { +#else if ((error = netisr_queue(NETISR_IP, m))) { +#endif IPSEC_ISTAT(sproto, V_espstat.esps_qfull, V_ahstat.ahs_qfull, V_ipcompstat.ipcomps_qfull); Modified: projects/pnet/sys/netipx/ipx_input.c ============================================================================== --- projects/pnet/sys/netipx/ipx_input.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netipx/ipx_input.c Sat May 16 06:57:24 2009 (r192191) @@ -62,6 +62,8 @@ * @(#)ipx_input.c */ +#include "opt_netisr.h" + #include __FBSDID("$FreeBSD$"); @@ -77,6 +79,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -153,7 +156,11 @@ ipx_init(void) ipxintrq.ifq_maxlen = ipxqmaxlen; mtx_init(&ipxintrq.ifq_mtx, "ipx_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_IPX, "ipx", ipxintr, NULL, NULL, ipxqmaxlen); +#else netisr_register(NETISR_IPX, ipxintr, &ipxintrq, 0); +#endif } /* Modified: projects/pnet/sys/netnatm/natm_proto.c ============================================================================== --- projects/pnet/sys/netnatm/natm_proto.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netnatm/natm_proto.c Sat May 16 06:57:24 2009 (r192191) @@ -35,6 +35,8 @@ * protocol layer for access to native mode ATM */ +#include "opt_netisr.h" + #include __FBSDID("$FreeBSD$"); @@ -47,6 +49,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include @@ -105,7 +108,12 @@ natm_init(void) natmintrq.ifq_maxlen = natmqmaxlen; NATM_LOCK_INIT(); mtx_init(&natmintrq.ifq_mtx, "natm_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_NATM, "natm", natmintr, NULL, NULL, + natmqmaxlen); +#else netisr_register(NETISR_NATM, natmintr, &natmintrq, 0); +#endif } DOMAIN_SET(natm); From owner-svn-src-projects@FreeBSD.ORG Sat May 16 14:30:09 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 39340106567A; Sat, 16 May 2009 14:30:09 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 257868FC2B; Sat, 16 May 2009 14:30:09 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4GEU8Dt061456; Sat, 16 May 2009 14:30:08 GMT (envelope-from rwatson@svn.freebsd.org) Received: (from rwatson@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4GEU83l061455; Sat, 16 May 2009 14:30:08 GMT (envelope-from rwatson@svn.freebsd.org) Message-Id: <200905161430.n4GEU83l061455@svn.freebsd.org> From: Robert Watson Date: Sat, 16 May 2009 14:30:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192197 - projects/pnet/sys/kern X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2009 14:30:10 -0000 Author: rwatson Date: Sat May 16 14:30:08 2009 New Revision: 192197 URL: http://svn.freebsd.org/changeset/base/192197 Log: Binding interrupts to a CPU consists of two parts: setting up CPU affinity for the interrupt thread, and requesting that underlying hardware direct interrupts to the CPU. For software interrupt threads, implement a no-op interrupt event binder that returns success, so that the interrupt management code will just set the ithread's affinity and succeed. Modified: projects/pnet/sys/kern/kern_intr.c Modified: projects/pnet/sys/kern/kern_intr.c ============================================================================== --- projects/pnet/sys/kern/kern_intr.c Sat May 16 12:12:31 2009 (r192196) +++ projects/pnet/sys/kern/kern_intr.c Sat May 16 14:30:08 2009 (r192197) @@ -968,6 +968,18 @@ intr_event_schedule_thread(struct intr_e #endif /* + * Allow interrupt event binding for software interrupt handlers -- a no-op, + * since interrupts are generated in software rather than being directed by + * a PIC. + */ +static int +swi_assign_cpu(void *arg, u_char cpu) +{ + + return (0); +} + +/* * Add a software interrupt handler to a specified event. If a given event * is not specified, then a new event is created. */ @@ -988,7 +1000,7 @@ swi_add(struct intr_event **eventp, cons return (EINVAL); } else { error = intr_event_create(&ie, NULL, IE_SOFT, 0, - NULL, NULL, NULL, NULL, "swi%d:", pri); + NULL, NULL, NULL, swi_assign_cpu, "swi%d:", pri); if (error) return (error); if (eventp != NULL)