From owner-p4-projects@FreeBSD.ORG Sun Jun 21 03:12:29 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E49E41065672; Sun, 21 Jun 2009 03:12:28 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 99389106564A for ; Sun, 21 Jun 2009 03:12:28 +0000 (UTC) (envelope-from antab@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 85B1E8FC08 for ; Sun, 21 Jun 2009 03:12:28 +0000 (UTC) (envelope-from antab@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5L3CSOf018577 for ; Sun, 21 Jun 2009 03:12:28 GMT (envelope-from antab@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5L3CSbD018575 for perforce@freebsd.org; Sun, 21 Jun 2009 03:12:28 GMT (envelope-from antab@FreeBSD.org) Date: Sun, 21 Jun 2009 03:12:28 GMT Message-Id: <200906210312.n5L3CSbD018575@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to antab@FreeBSD.org using -f From: Arnar Mar Sig To: Perforce Change Reviews Cc: Subject: PERFORCE change 164785 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 03:12:29 -0000 http://perforce.freebsd.org/chv.cgi?CH=164785 Change 164785 by antab@antab_farm on 2009/06/21 03:12:09 * Implement *setjmp/*longjmp * Implement pmap_change_wiring * Use vm_paddr_t for physical address * Disable usart1 PDC before entering debugger * Change SYSCALL() to use r0 instead of r8, needed for vararg syscalls some other small hacks Affected files ... .. //depot/projects/avr32/src/lib/libc/avr32/gen/_setjmp.S#2 edit .. //depot/projects/avr32/src/lib/libc/avr32/gen/setjmp.S#2 edit .. //depot/projects/avr32/src/lib/libc/avr32/gen/sigsetjmp.S#2 edit .. //depot/projects/avr32/src/lib/libc/avr32/sys/pipe.S#3 edit .. //depot/projects/avr32/src/sys/avr32/avr32/pmap.c#20 edit .. //depot/projects/avr32/src/sys/avr32/avr32/trap.c#11 edit .. //depot/projects/avr32/src/sys/avr32/conf/NGW100.hints#3 edit .. //depot/projects/avr32/src/sys/avr32/include/asm.h#7 edit .. //depot/projects/avr32/src/sys/avr32/include/setjmp.h#2 edit .. //depot/projects/avr32/src/sys/dev/uart/uart_dev_atmel.c#7 edit Differences ... ==== //depot/projects/avr32/src/lib/libc/avr32/gen/_setjmp.S#2 (text+ko) ==== @@ -1,7 +1,10 @@ /*- - * Copyright (c) 2009 Arnar Mar Sig + * Copyright (c) 2009 The FreeBSD Foundation * All rights reserved. * + * This software was developed by Arnar Mar Sig under sponsorship from the + * FreeBSD Foundation. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -11,10 +14,10 @@ * 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 REGENTS AND CONTRIBUTORS ``AS IS'' AND + * 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 REGENTS OR CONTRIBUTORS BE LIABLE + * 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) @@ -30,20 +33,33 @@ /* * C library -- _setjmp, _longjmp * - * _longjmp(a,v) - * will generate a "return(v)" from the last call to - * _setjmp(a) - * by restoring registers from the environment 'a'. + * _longjmp(env, val) + * will generate a "return(val)" from the last call to + * _setjmp(env) + * by restoring registers from the stack. * The previous signal state is NOT restored. + * + * Note: r8-r12 are scratch registers and not stored */ -/* XXX: AVR32 Implement this */ +/** + * r12: env + */ ENTRY(_setjmp) - breakpoint - retal sp + mov r11, _JB_MAGIC__SETJMP /* Magic number for _setjmp */ + st.w r12++, r11 /* Store magic */ + stm r12, r0-r7,sp,lr /* Store registers */ + retal sp /* return 0 */ END(_setjmp) +/** + * r12: env + * r11: val + */ ENTRY(_longjmp) breakpoint - retal sp + sub r12, -4 /* Skip magic */ + ldm r12, r0-r7,sp,lr /* Restore registes */ + mov r12, r11 + retal r12 /* Return val */ END(_longjmp) ==== //depot/projects/avr32/src/lib/libc/avr32/gen/setjmp.S#2 (text+ko) ==== @@ -1,7 +1,10 @@ /*- - * Copyright (c) 2009 Arnar Mar Sig + * Copyright (c) 2009 The FreeBSD Foundation * All rights reserved. * + * This software was developed by Arnar Mar Sig under sponsorship from the + * FreeBSD Foundation. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -11,10 +14,10 @@ * 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 REGENTS AND CONTRIBUTORS ``AS IS'' AND + * 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 REGENTS OR CONTRIBUTORS BE LIABLE + * 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) @@ -28,22 +31,54 @@ __FBSDID("$FreeBSD: $"); /* - * C library -- _setjmp, _longjmp + * C library -- setjmp, longjmp + * + * longjmp(env, val) + * will generate a "return(val)" from the last call to + * setjmp(env) + * by restoring registers from the stack. * - * longjmp(a,v) - * will generate a "return(v)" from the last call to - * setjmp(a) - * by restoring registers from the environment 'a'. - * The previous signal state is restored. + * Note: r8-r12 are scratch registers and not stored */ -/* XXX: AVR32 Implement this */ +/** + * r12: env + */ ENTRY(setjmp) - breakpoint - retal sp + /* Store signal mask */ + pushm r12,lr + mov r10, r12 /* oset */ + sub r10, -(10 << 2) /* index to sigmask */ + mov r11, 0 /* set */ + mov r12, 1 /* SIG_BLOCK */ + call PIC_PLT(_C_LABEL(sigprocmask)) + popm r12,lr + + mov r11, _JB_MAGIC_SETJMP /* Magic number for setjmp */ + st.w r12++, r11 /* and store in buffer */ + stm r12, r0-r7,sp,lr /* Store registers */ + + retal sp /* return 0 */ END(setjmp) +/** + * r12: env + * r11: val + */ ENTRY(longjmp) breakpoint - retal sp + /* Restore signal mask */ + pushm r11,r12 + mov r10, 0 /* oset */ + mov r11, r12 /* set */ + sub r11, -(10 << 2) /* index to sigmask */ + mov r12, 3 /* SIG_SETMASK */ + call PIC_PLT(_C_LABEL(sigprocmask)) + popm r11,r12 + + sub r12, -4 /* Skip magic */ + ldm r12, r0-r7,sp,lr /* Restore registes */ + mov r12, r11 + retal r12 /* Return val */ END(longjmp) + ==== //depot/projects/avr32/src/lib/libc/avr32/gen/sigsetjmp.S#2 (text+ko) ==== @@ -1,7 +1,10 @@ /*- - * Copyright (c) 2009 Arnar Mar Sig + * Copyright (c) 2009 The FreeBSD Foundation * All rights reserved. * + * This software was developed by Arnar Mar Sig under sponsorship from the + * FreeBSD Foundation. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -11,10 +14,10 @@ * 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 REGENTS AND CONTRIBUTORS ``AS IS'' AND + * 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 REGENTS OR CONTRIBUTORS BE LIABLE + * 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) @@ -27,26 +30,39 @@ #include __FBSDID("$FreeBSD: $"); - /* * C library -- sigsetjmp, siglongjmp * - * siglongjmp(a,v) - * will generate a "return(v)" from - * the last call to - * sigsetjmp(a, savemask) - * by restoring registers from the stack, - * and dependent on savemask restores the - * signal mask. + * siglongjmp(env, val) + * will generate a "return(val)" from the last call to + * sigsetjmp(env, savemask) + * by restoring registers from the stack. + * The previous signal state is restored if savemask is not zero + * + * Note: r8-r12 are scratch registers and not stored */ -/* XXX: AVR32 Implement this */ +/** + * r12: env + * r11: savemask + */ ENTRY(sigsetjmp) - breakpoint - retal sp + /* Store signal mask */ + cp.w r11, 0 /* Check if zero */ + breq PIC_PLT(_C_LABEL(_setjmp)) + bral PIC_PLT(_C_LABEL(setjmp)) END(sigsetjmp) +/** + * r12: env + * r11: val + */ ENTRY(siglongjmp) - breakpoint - retal sp + /* Store signal mask */ + mov r9, _JB_MAGIC__SETJMP /* Magic number for _setjmp */ + ld.w r10, r12 /* Load magic from buf */ + cp.w r9, r10 /* Compare them */ + breq PIC_PLT(_C_LABEL(_setjmp)) + bral PIC_PLT(_C_LABEL(setjmp)) END(siglongjmp) + ==== //depot/projects/avr32/src/lib/libc/avr32/sys/pipe.S#3 (text+ko) ==== @@ -29,8 +29,16 @@ #include "SYS.h" .text +/** + * r12: int fildes[2] + */ ENTRY(pipe) - breakpoint + mov r10, r12 /* Save r12 for later use */ SCALL(pipe) + brcs _C_LABEL(cerror) + + st.w r10[0], r12 /* read part of pipe */ + st.w r10[4], r11 /* write part of pipe */ + retal sp END(pipe) ==== //depot/projects/avr32/src/sys/avr32/avr32/pmap.c#20 (text+ko) ==== @@ -315,7 +315,24 @@ void pmap_change_wiring(pmap_t pmap, vm_offset_t va, boolean_t wired) { - avr32_impl(); + pt_entry_t *pte; + + PMAP_LOCK(pmap); + + if (wired && ((*pte & PTE_WIRED) == 0)) { + pmap->pm_stats.wired_count++; + } + else if (!wired && (*pte & PTE_WIRED)) { + pmap->pm_stats.wired_count--; + } + + if (wired) { + *pte |= PTE_WIRED; + } else { + *pte &= ~PTE_WIRED; + } + + PMAP_UNLOCK(pmap); } /* @@ -430,7 +447,7 @@ void pmap_zero_page_area(vm_page_t m, int off, int size) { - vm_offset_t phys = VM_PAGE_TO_PHYS(m); + vm_paddr_t phys = VM_PAGE_TO_PHYS(m); bzero((caddr_t)AVR32_PHYS_TO_P2(phys) + off, size); } ==== //depot/projects/avr32/src/sys/avr32/avr32/trap.c#11 (text+ko) ==== @@ -80,8 +80,10 @@ #include #include #include +#include static char *trap_name(uint32_t type); +static int trap_breakpoint(uint32_t type, struct trapframe *frame); extern char *syscallnames[]; /* @@ -145,7 +147,7 @@ #ifdef KDB if (kdb_on_nmi) { printf("NMI ... going to debugger\n"); - kdb_trap(type, 0, frame); + trap_breakpoint(type, frame); } #endif /* KDB */ if (panic_on_nmi) { @@ -200,7 +202,7 @@ /* * XXX: Break into kdb until we have userspace and working gdb */ - kdb_trap(type, 0, frame); + trap_breakpoint(type, frame); return; #if 0 signo = SIGTRAP; @@ -270,7 +272,7 @@ case T_BREAKPOINT: #ifdef KDB - if (kdb_trap(type, 0, frame)) { + if (trap_breakpoint(type, frame)) { return; } #endif /* KDB */ @@ -385,10 +387,11 @@ struct sysent *callp; int code, error, nargs, nsaved; register_t args[8]; + caddr_t params; PCPU_INC(cnt.v_syscall); - code = frame->regs.r8; + code = frame->regs.r0; switch (code) { case SYS_syscall: code = frame->regs.r12; @@ -405,12 +408,25 @@ nsaved = 2; break; + /* + * XXX: syscalls prototyped with varargs, on avr32 all varargs get + * pushed on stack so we must handled thous:/ I'm not sure this is + * the right way but it seems to work for now. + */ + case SYS_fcntl: + case SYS_ioctl: + args[0] = frame->regs.r12; + args[1] = frame->regs.r11; + nsaved = 2; + break; + default: args[0] = frame->regs.r12; args[1] = frame->regs.r11; args[2] = frame->regs.r10; args[3] = frame->regs.r9; - nsaved = 4; + args[4] = frame->regs.r8; + nsaved = 5; break; } @@ -426,10 +442,12 @@ error = 0; if (nargs > nsaved) { - error = copyin((caddr_t)frame->regs.sp, (caddr_t)&args[nsaved], + params = (caddr_t)frame->regs.sp + sizeof(register_t); + error = copyin(params, (caddr_t)&args[nsaved], (u_int)(nargs - nsaved) * sizeof(register_t)); } + printf("--- syscall: %d (%s) at pc: 0x%x, lr: 0x%x, args: %d\n", code, syscallnames[code], frame->regs.pc, frame->regs.lr, nargs); // for (int i = 0; i < nargs; i++) { @@ -572,7 +590,7 @@ #ifdef KDB if (debugger_on_panic || kdb_active) { - if (kdb_trap(type, 0, frame)) { + if (trap_breakpoint(type, frame)) { return; } } @@ -596,3 +614,17 @@ } return "UNKNOWN"; } + +/** + * XXX: Turn PDC for uart1 off before entering debugger. + */ +static int +trap_breakpoint(uint32_t type, struct trapframe *frame) +{ + int ret; + + bus_space_write_4(NULL, 0xFFE01000, PDC_PTCR, PDC_PTCR_RXTDIS); + ret = kdb_trap(type, 0, frame); + bus_space_write_4(NULL, 0xFFE01000, PDC_PTCR, PDC_PTCR_RXTEN); + return (ret); +} ==== //depot/projects/avr32/src/sys/avr32/conf/NGW100.hints#3 (text+ko) ==== @@ -31,3 +31,7 @@ hint.geom_hints.2.at="cfid0" hint.geom_hints.2.maddr="0x007f0000" hint.geom_hints.2.msize="0x00010000" + +# Serial console +hint.uart.1.flags=0x10 + ==== //depot/projects/avr32/src/sys/avr32/include/asm.h#7 (text+ko) ==== @@ -62,14 +62,15 @@ #define _C_LABEL(x) x /** - * Do syscall and pass the syscall number in thru r8. All registers - * are preserved except r12 and r11. thous hold return values. + * Do syscall and pass the syscall number in thru r0. Old value of r0 + * is pushed to stack. All registers are preserved except r12 and r11, + * thous hold return values. */ #define SCALL(name) \ - stm --sp, r8 ;\ - mov r8, SYS_ ## name ;\ + stm --sp, r0 ;\ + mov r0, SYS_ ## name ;\ scall ;\ - ldm sp++, r8 + ldm sp++, r0 /** * Save trapfrome to stack @@ -156,4 +157,18 @@ #define FRAMEPOINTER_RESTORE #endif +#ifndef _JB_MAGIC__SETJMP +#define _JB_MAGIC__SETJMP 0xFE +#define _JB_MAGIC_SETJMP 0xED +#endif + +#ifdef PIC +#define PIC_PLT(x) x +#define PIC_GOT(x) x +#else +#define PIC_PLT(x) x +#define PIC_GOT(x) x +#endif + + #endif /* !_MACHINE_ASM_H_ */ ==== //depot/projects/avr32/src/sys/avr32/include/setjmp.h#2 (text+ko) ==== @@ -30,7 +30,32 @@ #ifndef _MACHINE_SETJMP_H_ #define _MACHINE_SETJMP_H_ -#define _JBLEN 64 /* size, in longs, of a jmp_buf */ +#define _JBLEN 13 /* size, in longs, of a jmp_buf */ + +/** + * NOTE: The internal structure of a jmp_buf is *PRIVATE* + * + * Description of the setjmp buffer + * + * word 0 magic number (dependant on creator) + * 1 lr link register + * 2 r7 register 7 + * 3 r6 register 6 + * 4 r5 register 5 + * 5 r4 register 4 + * 6 r3 register 3 + * 7 r2 register 2 + * 8 r1 register 1 + * 9 r0 register 0 + * 10 signal mask (dependant on magic) + * 11 (con't) + * 12 (con't) + * 13 (con't) + * + * The magic number number identifies the jmp_buf and + * how the buffer was created as well as providing + * a sanity check + */ #if __BSD_VISIBLE || __POSIX_VISIBLE || __XSI_VISIBLE typedef struct _sigjmp_buf { int _sjb[_JBLEN + 1]; } sigjmp_buf[1]; ==== //depot/projects/avr32/src/sys/dev/uart/uart_dev_atmel.c#7 (text+ko) ==== @@ -300,6 +300,7 @@ uart_atmel_getc(struct uart_bas *bas, struct mtx *mtx) { int c; + while (!(RD4(bas, USART_CSR) & USART_CSR_RXRDY)) continue; c = RD4(bas, USART_RHR); @@ -347,12 +348,12 @@ * XXX: Enableing interrupts and PDC creates races between sysdev pools * and the dma */ - if (sc->sc_sysdev != NULL) { +/* if (sc->sc_sysdev != NULL) { di = sc->sc_sysdev; uart_atmel_init(&sc->sc_bas, di->baudrate, di->databits, di->stopbits, di->parity); return(0); - } + } */ /* * See if we have a TIMEOUT bit. We disable all interrupts as @@ -680,8 +681,6 @@ struct uart_atmel_softc *atsc; atsc = (struct uart_atmel_softc *)sc; - - #ifndef SKYEYE_WORKAROUNDS if (sc->sc_sysdev == NULL) { if (bus_dmamap_load(atsc->dmatag, atsc->tx_map, sc->sc_txbuf, @@ -701,6 +700,7 @@ for (int i = 0; i < sc->sc_txdatasz; i++) { uart_atmel_putc(&sc->sc_bas, sc->sc_txbuf[i]); } + WR4(&sc->sc_bas, USART_IER, USART_CSR_TXRDY); } else { /* * Setup the PDC to transfer the data and interrupt us when it From owner-p4-projects@FreeBSD.ORG Sun Jun 21 04:52:18 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8885E1065678; Sun, 21 Jun 2009 04:52:18 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 37B881065672 for ; Sun, 21 Jun 2009 04:52:18 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0B8458FC0C for ; Sun, 21 Jun 2009 04:52:18 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5L4qHqN037358 for ; Sun, 21 Jun 2009 04:52:17 GMT (envelope-from dforsyth@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5L4qHVo037356 for perforce@freebsd.org; Sun, 21 Jun 2009 04:52:17 GMT (envelope-from dforsyth@FreeBSD.org) Date: Sun, 21 Jun 2009 04:52:17 GMT Message-Id: <200906210452.n5L4qHVo037356@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to dforsyth@FreeBSD.org using -f From: David Forsythe To: Perforce Change Reviews Cc: Subject: PERFORCE change 164787 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 04:52:19 -0000 http://perforce.freebsd.org/chv.cgi?CH=164787 Change 164787 by dforsyth@squirrel on 2009/06/21 04:51:49 Parse takes in dependencies and their orgins. Affected files ... .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.h#10 add Differences ... From owner-p4-projects@FreeBSD.ORG Sun Jun 21 04:53:19 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 603A51065676; Sun, 21 Jun 2009 04:53:19 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 204711065675 for ; Sun, 21 Jun 2009 04:53:19 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0D2AF8FC13 for ; Sun, 21 Jun 2009 04:53:19 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5L4rJLu037420 for ; Sun, 21 Jun 2009 04:53:19 GMT (envelope-from dforsyth@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5L4rID8037418 for perforce@freebsd.org; Sun, 21 Jun 2009 04:53:18 GMT (envelope-from dforsyth@FreeBSD.org) Date: Sun, 21 Jun 2009 04:53:18 GMT Message-Id: <200906210453.n5L4rID8037418@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to dforsyth@FreeBSD.org using -f From: David Forsythe To: Perforce Change Reviews Cc: Subject: PERFORCE change 164788 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 04:53:20 -0000 http://perforce.freebsd.org/chv.cgi?CH=164788 Change 164788 by dforsyth@squirrel on 2009/06/21 04:53:16 Parse NOW takes in dependencies and their origins. Last push was a dud. Affected files ... .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#21 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#20 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.c#4 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.h#3 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_error.h#2 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#13 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#10 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_util.h#7 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.c#16 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.c#9 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_private.h#2 edit .. //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#14 edit Differences ... ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#21 (text+ko) ==== @@ -27,7 +27,9 @@ struct pkg_plist plist; struct pkgdb_sub *sub; +#if 0 TAILQ_ENTRY(pkg) next; +#endif short dirty; /* Add an owner field? */ }; @@ -58,10 +60,8 @@ if (p == NULL) arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); - if (ident != NULL) - p->ident = strdup(ident); - else - p->ident = NULL; + free(p->ident); + p->ident = (ident != NULL) ? strdup(ident) : NULL; return (OK); } @@ -76,13 +76,13 @@ if (p == NULL) arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); - p->comment = NULL; - if (comment != NULL) { - p->comment = strdup(comment); - /* Blot out trailing \n */ + free(p->comment); + p->comment = (comment != NULL) ? strdup(comment) : NULL; + if (p->comment != NULL) { + /* Blot out trailing \n, if it's there. */ c = (int)'\n'; f = strrchr(p->comment, c); - if (f != NULL) + if (f != NULL && *(f + 1) == '\0') *f = '\0'; } @@ -99,10 +99,8 @@ /* Yes this makes for 3 copies of the text in memory at once, but just * until I decide how I want to handle 'dirty' packages. */ - if (contents != NULL) - p->contents = strdup(contents); - else - p->contents = NULL; + free(p->contents); + p->contents = (contents != NULL) ? strdup(contents) : NULL; return (OK); } @@ -112,12 +110,10 @@ { if (p == NULL) arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + free(p->description); + p->description = (description != NULL) ? strdup(description) : NULL; - if (description != NULL) - p->description = strdup(description); - else - p->description = NULL; - return (OK); } @@ -126,11 +122,9 @@ { if (p == NULL) arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); - - if (display != NULL) - p->display = strdup(display); - else - p->display = NULL; + + free(p->display); + p->display = (display != NULL) ? strdup(display) : NULL; return (OK); } @@ -140,12 +134,10 @@ { if (p == NULL) arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + free(p->mtree_dirs); + p->mtree_dirs = (mtree_dirs != NULL) ? strdup(mtree_dirs) : NULL; - if (mtree_dirs != NULL) - p->mtree_dirs = strdup(mtree_dirs); - else - p->mtree_dirs = NULL; - return (OK); } @@ -155,10 +147,8 @@ if (p == NULL) arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); - if (required_by != NULL) - p->required_by = strdup(required_by); - else - p->required_by = NULL; + free(p->required_by); + p->required_by = (required_by != NULL) ? strdup(required_by) : NULL; return (OK); } @@ -177,7 +167,6 @@ } pkg_plist_reset(&p->plist); - status = pkg_plist_parse_contents_from_text(&p->plist, p->contents); return (status); @@ -206,6 +195,12 @@ char * pkg_name(struct pkg *p) { + if (p == NULL) + arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + if (pkg_parse_plist(p) != OK) + return (NULL); + return (pkg_plist_name(&p->plist)); } @@ -215,6 +210,8 @@ if (p == NULL) arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + if (pkg_parse_plist(p) != OK) + return (NULL); return (pkg_plist_cwd(&p->plist)); } @@ -224,6 +221,8 @@ if (p == NULL) arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + if (pkg_parse_plist(p) != OK) + return (NULL); return (pkg_plist_origin(&p->plist)); } @@ -241,14 +240,28 @@ struct pkg_file * pkg_pkg_file_list_next(struct pkg *p) { - struct pkg_file *pf; + if (p == NULL) + arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + return (pkg_plist_pkg_file_list_next(&p->plist)); +} + +void +pkg_pkg_dep_list_init(struct pkg *p) +{ + if (p == NULL) + arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + return (pkg_plist_pkg_dep_list_reset(&p->plist)); +} +struct pkg_dep * +pkg_pkg_dep_list_next(struct pkg *p) +{ if (p == NULL) arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); - pf = pkg_plist_pkg_file_list_next(&p->plist); - - return (pf); + return (pkg_plist_pkg_dep_list_next(&p->plist)); } void @@ -267,7 +280,7 @@ pkg_plist_reset(&p->plist); } -/* TODO: Make an note in the manual for libpkg that pkg_free should not be +/* TODO: Make an note in the manual for libpkg that pkg_delete should not be * called on pkgs that are not explicitly created by the client. */ void ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#20 (text+ko) ==== @@ -20,33 +20,38 @@ /* PKGDB Errors. */ #define DB_OK 0x00000000 -#define DB_NOT_OK 0x00000001 -#define DB_BAD_ROOT 0x00000002 -#define DB_NOT_OPEN 0x00000004 -#define DB_OPEN 0x00000008 -#define DB_NO_PKG 0x00000010 +#define DB_NOT_OK 0x10000000 +#define DB_BAD_ROOT 0x20000000 +#define DB_NOT_OPEN 0x40000000 +#define DB_OPEN 0x80000000 +#define DB_NO_PKG 0x01000000 /* These should probably go to _private */ #define SUB_OK 0x00000000 -#define SUB_NO_COMMENT 0x00000001 -#define SUB_NO_CONTENTS 0x00000002 -#define SUB_NO_DESC 0x00000004 -#define SUB_NO_DISPLAY 0x00000008 -#define SUB_NO_MTREE_DIRS 0x00000010 -#define SUB_NO_REQUIRED_BY 0x00000020 -#define SUB_NO_FILE 0x00000040 -#define SUB_EMPTY_FILE 0x00000080 +#define SUB_NO_COMMENT 0x10000000 +#define SUB_NO_CONTENTS 0x20000000 +#define SUB_NO_DESC 0x40000000 +#define SUB_NO_DISPLAY 0x80000000 +#define SUB_NO_MTREE_DIRS 0x01000000 +#define SUB_NO_REQUIRED_BY 0x02000000 +#define SUB_NO_FILE 0x04000000 +#define SUB_EMPTY_FILE 0x08000000 /* PKG Errors. */ #define PKG_OK 0x00000000 -#define PKG_NOT_OK 0x00000001 -#define PKG_PARSE_NOT_OK 0x00000002 -#define PKG_NO_COMMENT 0x00000004 -#define PKG_NO_DESC 0x00000008 -#define PKG_NO_DISPLAY 0x00000010 -#define PKG_NO_MTREE_DIRS 0x00000020 -#define PKG_NO_REQUIRED_BY 0x00000040 +#define PKG_NOT_OK 0x10000000 +#define PKG_PARSE_NOT_OK 0x20000000 +#define PKG_NO_COMMENT 0x40000000 +#define PKG_NO_DESC 0x80000000 +#define PKG_NO_DISPLAY 0x01000000 +#define PKG_NO_MTREE_DIRS 0x02000000 +#define PKG_NO_REQUIRED_BY 0x04000000 +#define PKG_CORRUPT 0x08000000 + +/* Parse errors. */ +#define PARSE_OK 0x00000000 +#define PARSE_FAIL 0x10000000 /* pkg_file */ @@ -70,6 +75,20 @@ int pkg_file_set_group(struct pkg_file *pf, const char *group); +/* pkg_dep */ + +struct pkg_dep; + +struct pkg_dep *pkg_dep_new(void); + +struct pkg_dep *pkg_dep_set_name(struct pkg_dep *pd, const char *name); + +struct pkg_dep *pkg_dep_set_origin(struct pkg_dep *pd, const char *origin); + +const char *pkg_dep_name(struct pkg_dep *pd); + +const char *pkg_dep_origin(struct pkg_dep *pd); + /* pkg */ /* Add mtree stuff later. */ @@ -126,6 +145,10 @@ int pkg_pkg_file_remove(struct pkg *p, struct pkg_file *pf); +void pkg_pkg_dep_list_init(struct pkg *p); + +struct pkg_dep *pkg_pkg_dep_list_next(struct pkg *p); + void pkg_delete(struct pkg *p); /* pkgdb */ @@ -152,6 +175,6 @@ int pkgdb_db_sync(struct pkgdb *db); #endif -void pkgdb_delete(struct pkgdb *db); +void pkgdb_db_delete(struct pkgdb *db); #endif ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.c#4 (text+ko) ==== @@ -5,15 +5,11 @@ #include "pkg.h" struct pkg_dep * -pkg_dep_new(const char *name, const char *origin) +pkg_dep_new() { struct pkg_dep *pd; pd = calloc(1, sizeof(*pd)); - if (pd != NULL) { - pd->name = name; - pd->origin = origin; - } return (pd); } ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.h#3 (text+ko) ==== @@ -12,7 +12,8 @@ TAILQ_ENTRY(pkg_dep) next; }; -struct pkg_dep *pkg_dep_new(const char *name, const char *origin); +#if 0 +struct pkg_dep *pkg_dep_new(void); struct pkg_dep *pkg_dep_set_name(struct pkg_dep *pd, const char *name); @@ -21,5 +22,6 @@ const char *pkg_dep_name(struct pkg_dep *pd); const char *pkg_dep_origin(struct pkg_dep *pd); +#endif #endif ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_error.h#2 (text+ko) ==== @@ -1,0 +1,5 @@ +#ifndef __PKG_ERROR_H__ +#define __PKG_ERROR_H__ + + +#endif ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#13 (text+ko) ==== @@ -42,6 +42,18 @@ return (pl); } +void +pkg_plist_free(struct pkg_plist *pl) +{ + /* TODO: Write this function. */ +#if 0 + pkg_plist_pkg_list_free(pl); + pkg_plist_pkg_dep_free(pl); +#endif + free(pl); + return; +} + int pkg_plist_parsed(struct pkg_plist *pl) { @@ -100,6 +112,7 @@ /* XXX: Use fgets(), dummy. */ pkg_plist_pkg_file_list_init(pl); + pkg_plist_pkg_dep_list_init(pl); set_parse_state_default(&st); for (p = textp; *p != '\0'; p++) { if (*p == '\n') { @@ -143,11 +156,12 @@ char *argument; char *sep; struct pkg_file *pf; + struct pkg_dep *pd; if (line == NULL) return (-1); - s = 0; + s = PARSE_OK; line_len = strlen(line); if (*line == '@') { sep = strchr(line, ' '); @@ -183,7 +197,7 @@ st->last_elem = PLIST_OWNER; } else if (strcmp(command, PLIST_CMD_GROUP) == 0) { - if (line_len == strlen(PLIST_CMD_OWNER) + 1) + if (line_len == strlen(PLIST_CMD_GROUP) + 1) /* Empty group line, reset to NULL. */ st->owner = NULL; else @@ -198,8 +212,6 @@ * function. */ if (line_len == strlen(PLIST_CMD_COMMENT) + 1) { /* Empty comment. */ - st->last_elem = PLIST_COMMENT; - return (0); } sep = strchr(argument, ':'); if (sep == NULL) { @@ -208,27 +220,35 @@ * them out. Maybe later, add a new command that specifies * comments that should be printed when displaying * information from the plist. */ - return (0); + return (PARSE_OK); } *sep = '\0'; if (strcmp(argument, PLIST_COMMENT_PKG_REV) == 0) { - /* TODO: Keeping rev as s string for now. String based + /* TODO: Keeping rev as a string for now. String based * version comparison is dumb, convert to int. */ pl->rev = sep + 1; - st->last_elem = PLIST_COMMENT; } else if (strcmp(argument, PLIST_COMMENT_ORIGIN) == 0) { pl->origin = sep + 1; - st->last_elem = PLIST_COMMENT; } else if (strcmp(argument, PLIST_COMMENT_DEPORIGIN) == 0) { if (st->last_elem != PLIST_PKGDEP) - return (1); + return (PARSE_FAIL); /* add the the dependency list. */ + pd = pkg_plist_pkg_dep_list_last(pl); + pkg_dep_set_origin(pd, sep + 1); } else if (strcmp(argument, PLIST_COMMENT_MD5) == 0) { if (st->last_elem != PLIST_FILE) - return (1); + return (PARSE_FAIL); pf = pkg_plist_pkg_file_list_last(pl); pkg_file_set_md5(pf, sep + 1); + } else { + /* Comment we don't know anything about. */ } + st->last_elem = PLIST_COMMENT; + } else if (strcmp(command, PLIST_CMD_PKGDEP) == 0) { + pd = pkg_dep_new(); + pkg_dep_set_name(pd, argument); + pkg_plist_pkg_dep_list_append(pl, pd); + st->last_elem = PLIST_PKGDEP; } #if 0 else if (strcmp(command, PLIST_CMD_NOINST) == 0) { @@ -249,7 +269,10 @@ ent = pl_entry_new(PLIST_DIRRM, argument, NULL); #endif else if (strcmp(command, PLIST_CMD_MTREE) == 0) { - pl->mtree_file = argument; + if (pl->mtree_file == NULL) + pl->mtree_file = argument; + else + return (PARSE_FAIL); /* strict. */ st->last_elem = PLIST_MTREE; } else if (strcmp(command, PLIST_CMD_DISPLAY) == 0) { @@ -258,8 +281,10 @@ } #if 0 else { - /* If we cant identify the command, set it unknown and gather - * whatever information we can. */ + /* If we cant identify the command, we have to return + * PARSE_FAIL. Apparently their are quite a few undocumented + * commands for plists. If we don't know a given command, we + * could really mess something up. */ ent = pl_entry_new(PLIST_UNKNOWN, argument, NULL); } #endif @@ -371,12 +396,69 @@ TAILQ_INSERT_TAIL(&pl->pf_head, pf, next); } +/* pkg_dep list manipulation and access. */ +/* generalize plz. */ + +void +pkg_plist_pkg_dep_list_reset(struct pkg_plist *pl) +{ + if (pl == NULL) + return; + + pl->pd_curr = NULL; +} + +void +pkg_plist_pkg_dep_list_init(struct pkg_plist *pl) +{ + if (pl == NULL) + return; + + TAILQ_INIT(&pl->pd_head); +} + +struct pkg_dep * +pkg_plist_pkg_dep_list_last(struct pkg_plist *pl) +{ + if (pl == NULL) + arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG); + + return (TAILQ_LAST(&pl->pd_head, pd_head)); +} + void -pkg_plist_free(struct pkg_plist *pl) +pkg_plist_pkg_dep_list_append(struct pkg_plist *pl, struct pkg_dep *pd) +{ + if (pl == NULL || pd == NULL) + return; + + TAILQ_INSERT_TAIL(&pl->pd_head, pd, next); +} + +struct pkg_dep * +pkg_plist_pkg_dep_list_next(struct pkg_plist *pl) { - /* TODO: Write this function. */ - free(pl); - return; + struct pkg_dep *pd; + + if (pl == NULL) + return (NULL); + + if (pl->pd_curr == NULL) + pd = pkg_plist_pkg_dep_list_first(pl); + else + pd = TAILQ_NEXT(pl->pd_curr, next); + + if (pd != NULL) + pl->pd_curr = pd; + + return (pd); } -/* pkg_dep list manipulation and access. */ +struct pkg_dep * +pkg_plist_pkg_dep_list_first(struct pkg_plist *pl) +{ + if (pl == NULL) + arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG); + + return (TAILQ_FIRST(&pl->pd_head)); +} ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#10 (text+ko) ==== @@ -43,9 +43,10 @@ #define PLIST_CMD_IGNORE_INST "ignore_inst" #define PLIST_CMD_NAME "name" #define PLIST_CMD_DIRRM "dirrm" +#define PLIST_CMD_DIRRMTRY "dirrmtry" #define PLIST_CMD_MTREE "mtree" #define PLIST_CMD_DISPLAY "display" -#define PLIST_CMD_PKGDEG "pkgdep" +#define PLIST_CMD_PKGDEP "pkgdep" #define PLIST_CMD_CONFLICTS "conflicts" /* Meta comments. */ @@ -111,4 +112,15 @@ void pkg_plist_free(struct pkg_plist *pl); +/* pkg_dep */ +void pkg_plist_pkg_dep_list_init(struct pkg_plist *pl); + +struct pkg_dep *pkg_plist_pkg_dep_list_last(struct pkg_plist *pl); + +void pkg_plist_pkg_dep_list_append(struct pkg_plist *pl, + struct pkg_dep *pd); + +void pkg_plist_pkg_dep_list_reset(struct pkg_plist *pl); +struct pkg_dep *pkg_plist_pkg_dep_list_next(struct pkg_plist *pl); +struct pkg_dep *pkg_plist_pkg_dep_list_first(struct pkg_plist *pl); #endif ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_util.h#7 (text+ko) ==== @@ -9,6 +9,8 @@ char *path_build(const char *prefix, const char *suffix); +char *strrep(char *dest, char *src); + void arg_rage_quit(const char *function, const char *message, int ret); #endif ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.c#16 (text+ko) ==== @@ -74,7 +74,7 @@ } void -pkgdb_delete(struct pkgdb *db) +pkgdb_db_delete(struct pkgdb *db) { if (db == NULL) arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_CLIENT); @@ -101,8 +101,9 @@ * Is this a terrible idea? Stay tuned to find out. */ pkg_reset(p); sub = pkgdb_pkgdb_sub_list_next(db); - if (sub == NULL) + if (sub == NULL) { return (DB_NO_PKG); /* Already at the end. */ + } status = OK; status |=pkg_set_ident(p, pkgdb_sub_ident(sub)); /* Status should be pointless to check here, because the init loop @@ -116,7 +117,6 @@ /* I'm not sure all of these have to be loaded, but we can make a * decision about that later. */ - status |= pkg_parse_plist(p); /* Error codes to the client. */ return (status); } @@ -133,49 +133,50 @@ void pkgdb_pkgdb_sub_list_free(struct pkgdb *db) { - struct pkgdb_sub *dbs1; - struct pkgdb_sub *dbs2; + struct pkgdb_sub *sub1; + struct pkgdb_sub *sub2; if (db == NULL) arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG); pkgdb_pkgdb_sub_list_init(db); - dbs1 = pkgdb_pkgdb_sub_list_first(db); - while (dbs1 != NULL) { - dbs2 = pkgdb_pkgdb_sub_list_next(db); - pkgdb_sub_delete(dbs1); - dbs1 = dbs2; + sub1 = pkgdb_pkgdb_sub_list_first(db); + while (sub1 != NULL) { + sub2 = pkgdb_pkgdb_sub_list_next(db); + pkgdb_sub_reset(sub1); + sub1 = sub2; } } struct pkgdb_sub * pkgdb_pkgdb_sub_list_next(struct pkgdb *db) { - struct pkgdb_sub *dbs; + struct pkgdb_sub *sub; if (db == NULL) arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG); if (db->sub_curr == NULL) - dbs = TAILQ_FIRST(&db->sub_head); + sub = pkgdb_pkgdb_sub_list_first(db); else - dbs = TAILQ_NEXT(db->sub_curr, next); + sub = TAILQ_NEXT(db->sub_curr, next); + + if (sub != NULL) + db->sub_curr = sub; - db->sub_curr = dbs; - return (dbs); + return (sub); } struct pkgdb_sub * pkgdb_pkgdb_sub_list_first(struct pkgdb *db) { - struct pkgdb_sub *dbs; + struct pkgdb_sub *sub; if (db == NULL) arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG); - dbs = TAILQ_FIRST(&db->sub_head); - - return (dbs); + sub = TAILQ_FIRST(&db->sub_head); + return (sub); } void @@ -187,7 +188,7 @@ if (sub == NULL) arg_rage_quit(__func__, "Not a valid sub directory.", RAGE_AT_LIBPKG); - + TAILQ_INSERT_TAIL(&db->sub_head, sub, next); } @@ -196,7 +197,7 @@ { if (db == NULL) arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG); - + TAILQ_INIT(&db->sub_head); } ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.c#9 (text+ko) ==== @@ -199,9 +199,10 @@ void pkgdb_sub_reset(struct pkgdb_sub *dbs) { - if (dbs == NULL) + if (dbs == NULL) { + printf("uh oh."); return; - + } free(dbs->ident); free(dbs->path); free(dbs->comment_text); ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_private.h#2 (text+ko) ==== @@ -15,7 +15,7 @@ int sub_count; struct pkgdb_sub *sub_curr; - + TAILQ_HEAD(sub_head, pkgdb_sub) sub_head; int (*pkgdb_db_open) (struct pkgdb *db, const char *db_root); ==== //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#14 (text+ko) ==== @@ -59,7 +59,7 @@ perform_on_db(db); - pkgdb_delete(db); + // pkgdb_db_delete(db); return (EXIT_SUCCESS); } @@ -119,6 +119,9 @@ print_pkg_information(struct pkg *p) { struct pkg_file *pf; + struct pkg_dep *pd; + const char *ident; + const char *comment; const char *name; const char *cwd; const char *origin; @@ -129,34 +132,48 @@ /* Just print the basic PKGNAME COMMENT scheme right now. Other * information isn't collected by the library yet. */ - if (!opt_show_all_info) + if (!opt_show_all_info) { /* Use pkg_ident because old pkg_info goes by directory name. */ - printf("%s %s\n", pkg_ident(p), pkg_comment(p)); - else { + ident = pkg_ident(p); + comment = pkg_comment(p); + printf("%s %s\n", + (ident != NULL ? ident : BAD_OR_UNKNOWN_VALUE), + (comment != NULL ? comment : BAD_OR_UNKNOWN_VALUE)); + } else { /* Testing plist interaction. */ - name = - ((name = pkg_name(p)) == NULL ? BAD_OR_UNKNOWN_VALUE : name); - cwd = ((cwd = pkg_cwd(p)) == NULL ? BAD_OR_UNKNOWN_VALUE : cwd); - origin = - ((origin = pkg_origin(p)) == NULL ? BAD_OR_UNKNOWN_VALUE : origin); + name = pkg_name(p); + cwd = pkg_cwd(p); + origin = pkg_origin(p); - printf("%s:\n", name); - printf("\tcwd: %s\n", cwd); - printf("\torigin: %s\n", origin); + printf("%s:\n", + (name != NULL ? name : BAD_OR_UNKNOWN_VALUE)); + printf("\tcwd: %s\n", + (cwd != NULL ? name : BAD_OR_UNKNOWN_VALUE)); + printf("\torigin: %s\n", + (origin != NULL ? origin : BAD_OR_UNKNOWN_VALUE)); printf("\tfiles:\n"); pkg_pkg_file_list_init(p); while ((pf = pkg_pkg_file_list_next(p)) != NULL) { - path = - ((path = pkg_file_path(pf)) == NULL ? BAD_OR_UNKNOWN_VALUE : path); - md5 = - ((md5 = pkg_file_md5(pf)) == NULL ? BAD_OR_UNKNOWN_VALUE : md5); - owner = - ((owner = pkg_file_owner(pf)) == NULL ? BAD_OR_UNKNOWN_VALUE : owner); - group = - ((group = pkg_file_group(pf)) == NULL ? BAD_OR_UNKNOWN_VALUE : group); - printf("\t\t%s\n\t\t\tMD5: %s\n\t\t\tOWNER: %s\n\t\t\t", - path, md5, owner); - printf("GROUP: %s\n", owner); + path = pkg_file_path(pf); + md5 = pkg_file_md5(pf); + owner = pkg_file_owner(pf); + group = pkg_file_group(pf); + printf("\t\t%s\n", + (path != NULL ? path : BAD_OR_UNKNOWN_VALUE)); + printf("\t\t\tMD5: %s\n", + (md5 != NULL ? md5 : BAD_OR_UNKNOWN_VALUE)); + printf("\t\t\tOWNER: %s\n", + (owner != NULL ? owner : BAD_OR_UNKNOWN_VALUE)); + printf("\t\t\tGROUP: %s\n", + (group != NULL ? group : BAD_OR_UNKNOWN_VALUE)); + } + + printf("\tdepends:\n"); + pkg_pkg_dep_list_init(p); + while ((pd = pkg_pkg_dep_list_next(p)) != NULL) { + name = pkg_dep_name(pd); + origin = pkg_dep_origin(pd); + printf("\t\t%s : %s\n", name, origin); } } } From owner-p4-projects@FreeBSD.ORG Sun Jun 21 08:03:02 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6413D1065673; Sun, 21 Jun 2009 08:03:01 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 235D71065670 for ; Sun, 21 Jun 2009 08:03:01 +0000 (UTC) (envelope-from zjriggl@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0F6308FC16 for ; Sun, 21 Jun 2009 08:03:01 +0000 (UTC) (envelope-from zjriggl@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5L830Fe055948 for ; Sun, 21 Jun 2009 08:03:00 GMT (envelope-from zjriggl@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5L830R1055929 for perforce@freebsd.org; Sun, 21 Jun 2009 08:03:00 GMT (envelope-from zjriggl@FreeBSD.org) Date: Sun, 21 Jun 2009 08:03:00 GMT Message-Id: <200906210803.n5L830R1055929@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zjriggl@FreeBSD.org using -f From: Zachariah Riggle To: Perforce Change Reviews Cc: Subject: PERFORCE change 164796 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 08:03:03 -0000 http://perforce.freebsd.org/chv.cgi?CH=164796 Change 164796 by zjriggl@zjriggl_tcpregression on 2009/06/21 08:02:56 Periodic commit Affected files ... .. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/__init__.py#4 edit .. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/hwAddress.py#2 edit .. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/ipAddress.py#2 edit .. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/networkPort.py#2 edit .. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/payload.py#2 edit .. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpConstructor.py#4 edit .. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpFilter.py#4 edit .. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpstatemachine.py#3 edit .. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/testconfig.py#4 edit Differences ... ==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/__init__.py#4 (text+ko) ==== @@ -4,6 +4,7 @@ import socket import sys +from pcs.packets.ipv4 import ipv4 from pcs.packets.tcp import tcp from pcs.packets.tcpv6 import tcpv6 @@ -28,11 +29,19 @@ # Find the TCP layer in a packet. def findTcpLayer(packet): + return findPacketLayer(packet,tcp) + +def findIpLayer(packet): + return findPacketLayer(packet,ipv4) + +def findPacketLayer(packet, _class): p = packet while p is not None: - if isinstance(p,tcp) or isinstance(p,tcpv6): + if isinstance(p,_class): return p p = p.data + return None + def inet_lton(integer): @@ -45,33 +54,4 @@ return struct.unpack(">L",byteString)[0] def inet_atol(ipString): - return inet_ntol(socket.inet_aton(ipString)) - -def getPcsFormattedIP(ipAddr): - if type(ipAddr) == str: - # The byte representation's length will be 4 bytes - if len(ipAddr) == 4: - return inet_ntol(ipAddr) - - # Otherwise, the length is between len("0.0.0.0") and len("255.255.255.255") (lengths are 7 and 15) - elif 7 <= len(ipAddr) and len(ipAddr) <= 15: - return inet_atol(ipAddr) - - elif type(ipAddr) == int: - return ipAddr - - logging.warn("Could not properly identify IP address type for: %s" % str(ipAddr)) - return 0 - -def getPcsFormattedPort(port): - if type(port) == str: - if port.isdigit(): - return htons(int(port)) - else: - return struct.unpack("!i",'A\x00\x00\x00')[0] - - if type(port) == int: - return port - - logging.warn("Could not properly identify port type for: %s" % str(ipAddr)) - return 0+ return inet_ntol(socket.inet_aton(ipString)) ==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/hwAddress.py#2 (text+ko) ==== @@ -6,57 +6,67 @@ from socket import inet_ntoa, inet_aton, htons, ntohs, htonl, ntohl from struct import pack, unpack import binascii +from field import Field -class hwAddress(object): +class HwAddress( Field ): ''' Stores a hardware address, and provides helper methods to retrieve the hardware address. Unless specified, all byte orders are host-byte-order. ''' - + # 00:00:00:00:00:00 nbo = '\x00\x00\x00\x00\x00\x00' - - def setAscii(self, x): - + + def setAscii( self, x ): + nbo = "" - for word in x.split(":"): - nbo += binascii.a2b_hex(word) - + for word in x.split( ":" ): + nbo += binascii.a2b_hex( word ) + self.nbo = nbo - - def getAscii(self): - + + def getAscii( self ): + ascii = "" for b in self.nbo: - ascii += binascii.b2a_hex(b) + ":" - + ascii += binascii.b2a_hex( b ) + ":" + # Strip of the trailing ":", return return ascii[0:-1] - - def setBytes(self, bytes): + + def setBytes( self, bytes ): self.nbo = bytes[::-1] - - def getBytes(self): - return self.nbo[::-1] - - def setNetworkBytes(self, bytes): + + def getBytes( self ): + return self.nbo[::-1] + + def setNetworkBytes( self, bytes ): self.nbo = bytes - - def getNetworkBytes(self): + + def getNetworkBytes( self ): return self.nbo - - def setInteger(self, x): - self.nbo = pack("L", x) - - def getInteger(self): - return unpack("L", self.nbo)[0] - - def setNetworkInteger(self, x): - self.nbo = pack("!L", x) - + + def setInteger( self, x ): + self.nbo = pack( "L", x ) + + def getInteger( self ): + return unpack( "L", self.nbo )[0] + + def setNetworkInteger( self, x ): + self.nbo = pack( "!L", x ) + # Make sure the length is 6 bytes/48 bit - while len(self.nbo) > 6: + while len( self.nbo ) > 6: self.nbo = '\x00' + self.nbo - - def getNetworkInteger(self): - return unpack("!L", self.nbo)[0]+ + def getNetworkInteger( self ): + return unpack( "!L", self.nbo )[0] + + def getPCS( self ): + return self.getNetworkBytes() + + def setPCS( self, x ): + self.setNetworkBytes( x ) + + def __str__( self ): + return getAscii() ==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/ipAddress.py#2 (text+ko) ==== @@ -4,43 +4,55 @@ @author: zach ''' -from socket import inet_ntoa, inet_aton, htons, ntohs, htonl, ntohl +from socket import inet_ntoa, inet_aton, htons, ntohs, htonl, ntohl, inet_pton, inet_ntop from struct import pack, unpack +from field import Field +from socket import IPPROTO_IP, IPPROTO_IPV6, AF_INET, AF_INET6, htonl, ntohl -class IpAddress(object): +class IpAddress( Field ): ''' Stores an IP address, and provides helper methods to retrieve the IP address. Unless specified, all byte orders are host-byte-order. ''' - + nbo = '\x7f\x00\x00\x01' - - def setAscii(self, x): - self.nbo = inet_aton(x) - - def getAscii(self): - return inet_ntoa(self.nbo) - - def setBytes(self, bytes): - self.nbo = bytes[::-1] - - def getBytes(self): - return self.nbo[::-1] - - def setNetworkBytes(self, bytes): + + def __init__( self, default = 0, width = None, networkByteOrder = False, version = AF_INET ): + self.version = version + Field.__init__( self, width = width, default = default, networkByteOrder = networkByteOrder ) + + def setAscii( self, x ): + self.nbo = inet_pton( self.version, x ) + + def getAscii( self ): + return inet_ntop( self.version, self.nbo ) + + def setBytes( self, bytes ): + self.nbo = bytes + + def getBytes( self ): + return pack( "L", self.getInteger() ) + + def setNetworkBytes( self, bytes ): self.nbo = bytes - - def getNetworkBytes(self): + + def getNetworkBytes( self ): return self.nbo - - def setInteger(self, x): - self.nbo = pack("L", x) - - def getInteger(self): - return unpack("L", self.nbo)[0] - - def setNetworkInteger(self, x): - self.nbo = pack("!L", x) - - def getNetworkInteger(self): - return unpack("!L", self.nbo)[0] + + def setInteger( self, x ): + self.nbo = pack( "!L", x ) + + def getInteger( self ): + return unpack( "!L", self.nbo )[0] + + def setNetworkInteger( self, x ): + self.nbo = pack( "!L", ntohl( x ) ) + + def getNetworkInteger( self ): + return htonl( unpack( "!L", self.nbo )[0] ) + + def getPCS( self ): + return self.getNetworkInteger() + + def setPCS( self, x ): + self.setNetworkInteger( x ) ==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/networkPort.py#2 (text+ko) ==== @@ -12,45 +12,52 @@ from socket import inet_ntoa, inet_aton, htons, ntohs, htonl, ntohl from struct import pack, unpack +from field import Field -class NetworkPort(object): +class NetworkPort( Field ): ''' Stores an network (TCP/UDP) port, and provides helper methods to retrieve the port. Unless specified, all byte orders are host-byte-order. ''' - + # Host-order integer internally ho = 80 - - def __init__(self): - pass - - def setAscii(self, x): - self.ho = int(x) - - def getAscii(self): - return str(self.ho) - - def setBytes(self, bytes): - self.ho = unpack("L",bytes) - - def setNetworkBytes(self, bytes): - self.ho = unpack("!L",bytes) - - def getBytes(self): - return pack("L", self.ho) - - def getNetworkBytes(self): - return pack("!L", self.ho) - - def setInteger(self, x): + + def setAscii( self, x ): + self.ho = int( x ) + + def getAscii( self ): + return str( self.ho ) + + def setBytes( self, bytes ): + self.ho = unpack( "H", bytes ) + + def setNetworkBytes( self, bytes ): + self.ho = unpack( "!H", bytes ) + + def getBytes( self ): + return pack( "H", self.ho ) + + def getNetworkBytes( self ): + return pack( "!H", self.ho ) + + def setInteger( self, x ): self.ho = x - - def getInteger(self): + + def getInteger( self ): return self.ho - - def setNetworkInteger(self, x): - self.ho = ntohs(x) - - def getNetworkInteger(self): - return htons(self.ho)+ + def setNetworkInteger( self, x ): + self.ho = ntohs( x ) + + def getNetworkInteger( self ): + return htons( self.ho ) + + def __eq__( self, x ): + if isinstance( x, int ): + return x == self.getInteger() + if isinstance( x, str ): + if( x.isdigit() ): + return x == self.getAscii() + else: + return x == self.getBytes() ==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/payload.py#2 (text+ko) ==== @@ -5,40 +5,40 @@ ''' import pcs -from pcsextension.StringField import StringField +from pcsextension.StringField import StringField from pprint import pformat import inspect import time import struct -class payload(pcs.Packet): +class Payload( pcs.Packet ): """Payload""" _layout = pcs.Layout() _map = None - - def __init__(self, bytes = None, **kv): + + def __init__( self, bytes = None, **kv ): """initialize a payload packet""" - pcs.Packet.__init__(self, [], bytes = bytes, **kv) - self.description = inspect.getdoc(self) + pcs.Packet.__init__( self, [], bytes = bytes, **kv ) + self.description = inspect.getdoc( self ) # Dencode - self.decode(bytes) + self.decode( bytes ) # Unconditionally the last packet in a chain self.data = None - - def encode(self): + + def encode( self ): pass - - def decode(self, value): + + def decode( self, value ): self._bytes = value - - def getbytes(self): - return struct.pack("!%ss" % len(self._bytes), self._bytes) + + def getbytes( self ): + return struct.pack( "!%ss" % len( self._bytes ), self._bytes ) - def __str__(self): + def __str__( self ): """return a readable version of a payload object""" retval = "Payload\n" - retval += "%s" % pformat(self.payload) - return retval+ retval += "%s" % pformat( self._bytes ) + return retval ==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpConstructor.py#4 (text+ko) ==== @@ -5,106 +5,138 @@ ''' import socket -from pcs.packets import ipv4 -from pcs.packets import ipv6 -from pcs.packets import tcp -from pcs.packets import tcpv6 -from pcs.packets import ethernet +import testconfig +from random import randint +from pcs.packets.ipv4 import ipv4 +from pcs.packets.tcp import tcp +from pcs.packets.ethernet import * +from socket import IPPROTO_IPV4, IPPROTO_IPV6, IPPROTO_TCP +from pcsextension.ipAddress import IpAddress +from pcsextension.hwAddress import HwAddress +from pcsextension.checksum import * + +class tcpConstructor: + ''' + Used to construct a packet complete with hardware and IP layers. + Currently supports: + - Ethernet + - IPv4 + TODO IPv6 + ''' + ipVersion = IPPROTO_IPV4 + localIP = IpAddress() + remoteIP = IpAddress() + + localHw = HwAddress() + remoteHw = HwAddress() + + def __init__( self ): + self.localIP.setAscii( testconfig.localIP ) + self.remoteIP.setAscii( testconfig.remoteIP ) + + self.localHw.setAscii( testconfig.localMAC ) + self.remoteHw.setAscii( testconfig.remoteMAC ) + + def setLocalIP( self, ip ): + ''' + Sets the IP address to be used as the source IP address in the IP layer. + @param ip + IP parameter supports dotted-quad strings and IpAddress objects. + ''' + if isinstance( ip, str ): + self.localIP.setAscii( ip ) + elif isinstance( ip, IpAddress ): + self.localIP.setAscii( ip.getAscii() ) + def setRemoteIP( self, ip ): + ''' + Sets the IP address to be used as the remote address in the IP layer. + @see setLocalIP + ''' + if isinstance( ip, str ): + self.remoteIP.setAscii( ip ) + elif isinstance( ip, IpAddress ): + self.remoteIP.setAscii( ip.getAscii() ) -class tcpStateMachine: - - - srcMac = "FF:FF:FF:FF:FF:FF" - dstMac = "FF:FF:FF:FF:FF:FF" - srcPort = 1025 - dstPort = 1025 - srcIP = "127.0.0.1" - dstIP = "127.0.0.1" - ipv6 = False - + def setIpVersion( self, version ): + ''' + Sets the IP version to be used when creating the IP layer. + @param version + Either socket.IPPROTO_IPV4 or socket.IPPROTO_IPV6 + ''' + if version == IPPROTO_IPV4 or version == IPPROTO_IPV6: + self.ipVersion = version - - # Tcp States - ( CLOSED, # Initial closed state - LISTEN, # Listening for connections - SYNSENT, # Initial SYN sent - SYNRECVD, # Initial SYN recvd - ESTAB, # Connection established - FINWAIT1, # FIN-Wait 1 - CLOSEWAIT, # Close-Wait - FINWAIT2, # FIN-Wait 2 - CLOSING, # Connection closing - LASTACK, # Last ACK - TIMEWAIT, # Connection closing - CLOSED2 ) = range(12) # Connection terminated + def generateIPv4( self ): + ''' + Generates a pcs.packets.ipv4.ipv4 object with all of the fields set + to the following values: + - protocol = socket.IPPROTO_TCP + - src = local IP address (@see setLocalIP) + - dst = remote IP address (@see setRemoteIP) + - id = Random, between 0 and 65535 inclusive - - - - def tcpConstructor(self, srcMAC, srcIP, srcPort, dstMAC, dstIP, dstPort, ipv6=False): - self.srcMac = srcMAC - self.dstMac = dstMAC - self.srcPort = srcPort - self.dstPort = dstPort - self.srcIP = srcIP - self.dstIP = dstIP - - def createEthernetPacket(self): - ether = ethernet.ethernet() - ether.type = ethernet.ETHERTYPE_IP - ether.src = ethernet.ether_atob(testconfig.localMAC) - ether.dst = ethernet.ether_atob(testconfig.remoteMAC) - - - def _createIpv4Packet(self): + Other values are filled in with default values that will likely be changed. + ''' + ip = ipv4() + ip.version = 4 + ip.hlen = 5 + ip.tos = 0 # Normal + ip.length = 20 + ip.id = randint( 0, 65535 ) # See RFC4413, pp. 20 + ip.flags = 0x4 # 'Dont fragment' + ip.ttl = 64 + ip.protocol = IPPROTO_TCP + ip.src = self.localIP.getPCS() + ip.dst = self.remoteIP.getPCS() + return ip + + def generateIPv6( self ): + ''' + Genreates a pcs.packets.ipv6.ipv6 object + TODO: Not supported. + ''' pass - - def _createIpv6Packet(self): - pass - - def _createTCPv4Packet(self): - pass - - def _createTCPv6Packet(self): - pass - - def createIpPacket(self): - pass - - def createTcpPacket(self): - pass - - def buildConnectionPacket(self): - pass - - def buildPacket(self, srcMAC, srcIP, srcPort, dstMAC, dstIP, dstPort, ipv6=False): - - # Set ethernet information. - ether = ethernet.ethernet() - ether.type = ethernet.ETHERTYPE_IP - ether.src = ethernet.ether_atob(srcMAC) - ether.dst = ethernet.ether_atob(dstMAC) - - # IP and TCP levels - ip = None - t = None - - # Create the proper IP and TCP types - if ipv6 is True: - raise NotImplementedError - else: - ip = ipv4.ipv4() - t = tcp.tcp() - ip.src =inet_atol(srcIP) - ip.dst =inet_atol(dstIP) + + def generateIP( self ): + ''' + Generates the appropriate IP layer, depending on what the user has selected. + @see setIpVersion + @see generateIPv4 + @see generateIPv6 + ''' + if self.ipVersion == IPPROTO_IPV4: + return self.generateIPv4() + elif self.ipVersion == IPPROTO_IPV6: + return self.generateIPv6() + return None + + def generateEthernet( self ): + ''' + Generates the ethernet-level data... + ''' + ether = ethernet() + ether.type = ETHERTYPE_IP + ether.src = self.localHw.getPCS() + ether.dst = self.remoteHw.getPCS() + return ether + + def generateChain( self, tcpPacket ): + ''' + Generates a pcs.Chain complete with Ethernet and IP levels, that uses the provided + pcs.packets.tcp.tcp object as the TCP layer. + NOTE: This method makes no modifications to the TCP packet, and as such does not + perform any validation of auto-generation of ANY TCP fields. The length of the + TCP header + data is necessary to set the IP length field. + ''' + ether = self.generateEthernet() + ip = self.generateIP() + + ether.data = ip + ip.data = tcpPacket + + # Set the proper IP length and checksum + ip.length = ip.length + len( tcpPacket.chain().bytes ) + ip.checksum = ipChecksum( ip ) - t = tcp.tcp() - t.sport = srcPort - t.dport = dstPort - t.seq = 1 - t.window = 1024 - - ip.protocol = socket.IPPROTO_TCP - ip.checksum = ip.calc_checksum() - + return ether.chain() ==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpFilter.py#4 (text+ko) ==== @@ -1,47 +1,48 @@ -from pcsextension import intToBytes, bytesToInt - import sys import logging import struct -from socket import inet_ntoa, ntohs, inet_aton, htons +from socket import inet_ntoa, ntohs, inet_aton, htons, getnameinfo -from loggable import Loggable +from loggable import tcplog from pcs import PcapConnector from pcs.packets.ipv4 import ipv4 from pcs.packets.tcp import tcp from pcs.packets.tcpv6 import tcpv6 from pcs.packets.ethernet import ethernet +from pcsextension.ipAddress import IpAddress +from pcsextension.networkPort import NetworkPort +from pcsextension import findIpLayer, findTcpLayer -class tcpFilter(Loggable): +class tcpFilter(object): + log = None pcapHandle = None doRead = False def __init__(self, interfaceName): - Loggable._setLogKey(self) + self.log = tcplog(self) self.openInterface(interfaceName) def openInterface(self, interfaceName): try: self.pcapHandle = PcapConnector(interfaceName) + # self.pcapHandle = IP4Connector(); except: - self.log.error("Could not open interface %s" % interfaceName) + self.log.error("Could not open interface %s" % interfaceName) def read(self): return self.pcapHandle.readpkt() - def write(self,packet,byets): - self.pcapHandle.write(packet,bytes) + def write(self,bytes): + self.pcapHandle.write(bytes,len(bytes)) - def readFilteredByIP(self, ipAddress): + def readFilteredByIP(self, ip): """ Reads packets until a packet is found going either to or from the specified IP address is discovered. Returns the first matching packet. - @param port TCP port in network byte order (byte-string or integer representation) - @return A pcs.ipv4.ipv4 or pcs.ipv6.ipv6 object. - @see pcs.htons(integer) - @see pcs.htonl(integer) + @param ip IpAddress or dotted-quad string + @return A pcs.Packet object """ # if isinstance(ipAddress,int): @@ -49,58 +50,52 @@ # If the IP address is a string ("127.0.0.1") or byte array ('\x7f\x00\x00\x01') # we need to convert it into an integer representation of the same. - if isinstance(ipAddress,str): - if len(ipAddress) != 4: - ipAddress = inet_aton(ipAddress) - - ipAddress = bytesToInt(ipAddress) - + if isinstance(ip,str): + tmp = IpAddress() + tmp.setAscii(ip) + ip = tmp + + srcIP = IpAddress() + dstIP = IpAddress() while True: packet = self.read() - if isinstance(packet,ethernet): - packet = packet.data + ipLayer = findIpLayer(packet) - if not isinstance(packet,ipv4): + if ipLayer == None: continue - if (not packet.src == ipAddress) and \ - (not packet.dst == ipAddress): - continue + srcIP.setNetworkInteger(ipLayer.src) + dstIP.setNetworkInteger(ipLayer.dst) - return packet + if ipLayer.src == ip.getPCS() or ipLayer.dst == ip.getPCS(): + return packet def readFilteredByTuple(self, ipAddress, port): """ Reads packets until a packet is found going either to or from [1] the specified IP address and [2] the specified port. Returns the first matching packet. - @param ipAddress IP address in network byte order. - @param port TCP port in network byte order. - @return A pcs.tcp.tcp or pcs.tcpv6.tcpv6 object. - @see pcs.inet_aton(string) - @see pcs.htons(integer) - @see pcs.htonl(integer) + @param IpAddress object or dotted-quad string ('127.0.0.1') + @param NetworkPort object or integer port number. + @return A pcs.Packet object. + @see readFilteredByIP """ + if isinstance(port,int): + tmp = NetworkPort() + tmp.setInteger(port) + port = tmp + while True: packet = self.readFilteredByIP(ipAddress) - if isinstance(port,str): - if port.isdigit(): - port = htons(port) - - port = bytesToInt(port) - - port = htons(port) - - if (not isinstance(packet.data, tcp)) and \ - (not isinstance(packet.data, tcpv6)): + tcpLayer = findTcpLayer(packet) + if tcpLayer == None: continue - tcpPacket = packet.data - if (not tcpPacket.sport == port) and \ - (not tcpPacket.dport == port): - continue + print tcpLayer.sport + print port.getNetworkInteger() - return packet+ if tcpLayer.sport == port.getInteger() or tcpLayer.dport == port.getInteger(): + return packet ==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpstatemachine.py#3 (text+ko) ==== @@ -5,21 +5,20 @@ ''' from loggable import tcplog +from pcs.packets import ethernet, ipv4, tcp from pcsextension.decorators import prop, validateTypes +from pcsextension.hwAddress import HwAddress from pcsextension.ipAddress import IpAddress from pcsextension.networkPort import NetworkPort from pcsextension.pseudoipv4 import pseudoipv4, ipv4_cksum from socket import IPPROTO_TCP -from tcpstates import * from tcpFilter import tcpFilter +from tcpConstructor import tcpConstructor +from tcpstates import +import binascii import binhex import pcs -from pcs.packets import tcp -from pcs.packets import ipv4 -from pcs.packets import ethernet import testconfig -import binascii - # Valid state transitions, as defined by the diagram on RFC 793 pp. 23: # September 1981 @@ -76,7 +75,7 @@ # # [Page 23] -class TcpStateMachine(object): +class TcpStateMachine( object ): ''' Enumerates the various states of a TCP connection as defined by RFC 793, pages 21-22. @@ -107,139 +106,129 @@ >>> t.state 3 ''' - - _connector = None - - def generateInitialSequence(self): + + _constructor = tcpConstructor() + _connector = tcpFilter( testconfig.interface ) + + def generateInitialSequence( self ): return 0 - + snd_nxt = 0 # Next available send sequence # snd_una = 0 # Unacknowledge send sequence # - snd_wnd = 128*1024 # Send window - snd_up = 0 # Seng urgent pointer + snd_wnd = 128 * 1024 # Send window + snd_up = 0 # Seng urgent pointer snd_wl1 = 0 # Sequence number used for last window update snd_wl2 = 0 # Ack number used for last window update - iss = -1 # Initial sequence number - - rcv_wnd = 128*1024 # Recv window size - rcv_up = 0 # Recv urgent pointer - irs = -1 # Initial receive sequence number + iss = -1 # Initial sequence number + + rcv_wnd = 128 * 1024 # Recv window size + rcv_up = 0 # Recv urgent pointer + irs = -1 # Initial receive sequence number rcv_nxt = irs # Expected next recv sequence # - + ack_nxt = 0 # Next ACK number to send. ack_lst = 0 # Last ACK number sent. - + msl = 2 * 60 # Maximum Segment Lifetime. Arbitrarily defined in the RFC to 2 minutes - timeout = 2*msl # Timeout - - + timeout = 2 * msl # Timeout + + # Ethernet stuff + def localEthernet(): + return {'doc': 'Local hardware ethernet address'} + _localEthernet = HwAddress( default = testconfig.localMAC ) + + def remoteEthernet(): + return {'doc': 'Remote hardware ethernet address'} + remoteEthernet = HwAddress( default = testconfig.remoteMAC ) + @prop def localIP(): return {'doc': 'Local IP address.'} - - + _localIP = IpAddress( default = testconfig.localIP ) + @prop def remoteIP(): return {'doc': 'Remote IP address.' } - + _remoteIP = IpAddress( default = testconfig.remoteIP ) + @prop def localPort(): return {'doc': 'Local port.'} - + _localPort = NetworkPort( default = testconfig.localPort ) + @prop def remotePort(): - return {'doc': 'Remote port.'} - + return {'doc': 'Remote port.'} + _remotePort = NetworkPort( default = testconfig.remotePort ) + @prop def mtu(): return {'doc': 'Maximum Tranmission Unit'} - -# packetsToSend = [] - # = testconfig.mtu - - + _mtu = testconfig.mtu + + def generate(): + return {'doc': 'What fields of outgoing TCP packets should be auto-generated.'} + _generate = {'cksum': True, + 'off': True, + 'seq': True, + 'acknum': True, + 'sport': True, + 'dport': True, + 'window': True, + 'urg': True, + 'ack': True, + 'syn': True, + 'fin': True, + 'rst': True, + 'psh': True, + 'urgp': True } + + @prop + def validate(): + return {'doc': 'What fields of incoming TCP packets should be validated.'} + _validate = { 'cksum': True, + 'seq': True, + 'acknum': True, + 'sport': True, + 'dport': True } + @prop def packetsToSend(): return {'doc': 'List of all packets to be sent.' } - + _packetsToSend = [] + @prop def packetsSent(): return {'doc': 'List of all packets the have been sent.' } + _packetsSent = [] - # packetsSent = [] @prop def packetsSentAcked(): return {'doc': 'List of all packets the have been sent, for which ' 'an ACKnowledgement message has not been received.'} - #packetsSentUnack = [] - + _packetsSentAcked = [] + @prop - def packetsRecvd(): - return {'doc': 'List of all packets the have been received, but have not been ACKnowledged. ' + def packetsRecvd(): + return {'doc': 'List of all packets the have been received, but have not been ACKnowledged. ' 'Upon receiving, a packet will be put into this buffer. If its sequence number is rcv_nxt, ' 'it is moved to packetsRecvdAcked, and rcv_next is updated.'} - # packetsRecvd = [] >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Sun Jun 21 08:30:32 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6E1F61065670; Sun, 21 Jun 2009 08:30:32 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 27E4D1065675 for ; Sun, 21 Jun 2009 08:30:32 +0000 (UTC) (envelope-from zec@fer.hr) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 1445B8FC18 for ; Sun, 21 Jun 2009 08:30:32 +0000 (UTC) (envelope-from zec@fer.hr) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5L8UWUe058903 for ; Sun, 21 Jun 2009 08:30:32 GMT (envelope-from zec@fer.hr) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5L8UVCB058901 for perforce@freebsd.org; Sun, 21 Jun 2009 08:30:31 GMT (envelope-from zec@fer.hr) Date: Sun, 21 Jun 2009 08:30:31 GMT Message-Id: <200906210830.n5L8UVCB058901@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zec@fer.hr using -f From: Marko Zec To: Perforce Change Reviews Cc: Subject: PERFORCE change 164797 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 08:30:33 -0000 http://perforce.freebsd.org/chv.cgi?CH=164797 Change 164797 by zec@zec_amdx4 on 2009/06/21 08:30:31 IFC @ 164795 Affected files ... .. //depot/projects/vimage-commit2/src/sys/amd64/amd64/msi.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/amd64/conf/GENERIC.hints#4 integrate .. //depot/projects/vimage-commit2/src/sys/arm/arm/pmap.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/arm/conf/CAMBRIA.hints#4 integrate .. //depot/projects/vimage-commit2/src/sys/arm/include/pmap.h#4 integrate .. //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/if_npe.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/ixp425.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/ixp425_npe.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/ixp425_npereg.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/ixp425var.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/boot/forth/loader.conf#14 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h#4 integrate .. //depot/projects/vimage-commit2/src/sys/compat/freebsd32/freebsd32_proto.h#15 integrate .. //depot/projects/vimage-commit2/src/sys/compat/freebsd32/freebsd32_syscall.h#15 integrate .. //depot/projects/vimage-commit2/src/sys/compat/freebsd32/freebsd32_syscalls.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/compat/freebsd32/freebsd32_sysent.c#16 integrate .. //depot/projects/vimage-commit2/src/sys/compat/freebsd32/syscalls.master#15 integrate .. //depot/projects/vimage-commit2/src/sys/compat/linprocfs/linprocfs.c#22 integrate .. //depot/projects/vimage-commit2/src/sys/compat/linux/linux_ioctl.c#19 integrate .. //depot/projects/vimage-commit2/src/sys/compat/linux/linux_misc.c#22 integrate .. //depot/projects/vimage-commit2/src/sys/compat/linux/linux_uid16.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/conf/NOTES#31 integrate .. //depot/projects/vimage-commit2/src/sys/conf/files#44 integrate .. //depot/projects/vimage-commit2/src/sys/conf/options#34 integrate .. //depot/projects/vimage-commit2/src/sys/dev/cas/if_cas.c#1 branch .. //depot/projects/vimage-commit2/src/sys/dev/cas/if_casreg.h#1 branch .. //depot/projects/vimage-commit2/src/sys/dev/cas/if_casvar.h#1 branch .. //depot/projects/vimage-commit2/src/sys/dev/cxgb/common/cxgb_t3_cpl.h#5 integrate .. //depot/projects/vimage-commit2/src/sys/dev/cxgb/cxgb_adapter.h#9 integrate .. //depot/projects/vimage-commit2/src/sys/dev/cxgb/cxgb_main.c#19 integrate .. //depot/projects/vimage-commit2/src/sys/dev/cxgb/cxgb_multiq.c#9 delete .. //depot/projects/vimage-commit2/src/sys/dev/cxgb/cxgb_osdep.h#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/cxgb/cxgb_sge.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/dev/cxgb/sys/cxgb_support.c#5 delete .. //depot/projects/vimage-commit2/src/sys/dev/cxgb/sys/mvec.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/dev/cxgb/sys/uipc_mvec.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/dev/drm/drm_bufs.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/drm/drm_context.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/dev/drm/i915_dma.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/drm/i915_drv.h#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/drm/i915_irq.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/fxp/if_fxp.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/dev/fxp/if_fxpvar.h#5 integrate .. //depot/projects/vimage-commit2/src/sys/dev/if_ndis/if_ndis.c#16 integrate .. //depot/projects/vimage-commit2/src/sys/dev/puc/pucdata.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/syscons/scterm-teken.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/syscons/teken/teken.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/net/if_cdce.c#10 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/serial/umodem.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_device.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_device.h#13 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/wlan/if_uath.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/fs/devfs/devfs_vnops.c#17 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfs/nfs.h#4 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfs/nfs_commonport.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfs/nfsport.h#6 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfsclient/nfs_clbio.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfsclient/nfs_clkrpc.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfsclient/nfs_clport.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfsclient/nfs_clvnops.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfsserver/nfs_nfsdkrpc.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfsserver/nfs_nfsdport.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfsserver/nfs_nfsdstate.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/fs/portalfs/portal.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/fs/portalfs/portal_vnops.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/fs/unionfs/union_vnops.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/geom/label/g_label_gpt.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/gnu/fs/ext2fs/ext2_lookup.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/gnu/fs/ext2fs/ext2_vnops.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/i386/i386/msi.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/i386/ibcs2/ibcs2_isc_sysent.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/i386/ibcs2/ibcs2_misc.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/i386/ibcs2/ibcs2_xenix_sysent.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/i386/include/cpufunc.h#9 integrate .. //depot/projects/vimage-commit2/src/sys/i386/include/specialreg.h#9 integrate .. //depot/projects/vimage-commit2/src/sys/ia64/ia64/vm_machdep.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/kern/init_sysent.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_acct.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_descrip.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_exec.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_exit.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_jail.c#27 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_lock.c#11 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_lockf.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_mbuf.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_proc.c#16 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_prot.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_sysctl.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_vimage.c#55 integrate .. //depot/projects/vimage-commit2/src/sys/kern/makesyscalls.sh#4 integrate .. //depot/projects/vimage-commit2/src/sys/kern/syscalls.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/kern/syscalls.master#7 integrate .. //depot/projects/vimage-commit2/src/sys/kern/systrace_args.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/kern/sysv_msg.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/kern/tty.c#27 integrate .. //depot/projects/vimage-commit2/src/sys/kern/uipc_socket.c#24 integrate .. //depot/projects/vimage-commit2/src/sys/kern/uipc_usrreq.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/kern/vfs_export.c#10 integrate .. //depot/projects/vimage-commit2/src/sys/mips/adm5120/if_admsw.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/mips/conf/.cvsignore#1 branch .. //depot/projects/vimage-commit2/src/sys/mips/idt/idtpci.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/mips/idt/if_kr.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/modules/Makefile#26 integrate .. //depot/projects/vimage-commit2/src/sys/modules/acpi/acpi/Makefile#4 integrate .. //depot/projects/vimage-commit2/src/sys/modules/cas/Makefile#1 branch .. //depot/projects/vimage-commit2/src/sys/modules/cxgb/cxgb/Makefile#6 integrate .. //depot/projects/vimage-commit2/src/sys/modules/wlan/Makefile#7 integrate .. //depot/projects/vimage-commit2/src/sys/net/bpf.c#21 integrate .. //depot/projects/vimage-commit2/src/sys/net/if.c#77 integrate .. //depot/projects/vimage-commit2/src/sys/net/if.h#9 integrate .. //depot/projects/vimage-commit2/src/sys/net/if_enc.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/net/if_gre.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/net/if_tun.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/net/if_var.h#32 integrate .. //depot/projects/vimage-commit2/src/sys/net80211/ieee80211_wds.c#11 integrate .. //depot/projects/vimage-commit2/src/sys/netatalk/ddp_output.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/in_proto.c#16 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/ip_var.h#19 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/ipfw/ip_dummynet.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/ipfw/ip_fw2.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp.h#6 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_indata.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_input.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_output.c#17 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/tcp_input.c#39 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/tcp_output.c#23 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/tcp_subr.c#55 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/tcp_timer.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/tcp_usrreq.c#20 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/tcp_var.h#18 integrate .. //depot/projects/vimage-commit2/src/sys/netinet6/in6_proto.c#25 integrate .. //depot/projects/vimage-commit2/src/sys/netipsec/key.c#34 integrate .. //depot/projects/vimage-commit2/src/sys/netipsec/xform_tcp.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/netipx/ipx_usrreq.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/netipx/spx.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/netipx/spx_reass.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/netipx/spx_usrreq.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/netipx/spx_var.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/nfsclient/nfs_bio.c#10 integrate .. //depot/projects/vimage-commit2/src/sys/nfsclient/nfs_vnops.c#21 integrate .. //depot/projects/vimage-commit2/src/sys/nfsserver/nfs_srvkrpc.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/nfsserver/nfs_srvsock.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/nfsserver/nfs_srvsubs.c#10 integrate .. //depot/projects/vimage-commit2/src/sys/nlm/nlm_prot_impl.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/powerpc/include/spr.h#8 integrate .. //depot/projects/vimage-commit2/src/sys/powerpc/powerpc/cpu.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/rpc/svc.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/rpc/svc_auth.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/rpc/svc_auth_unix.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/rpc/svc_generic.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/rpc/svc_vc.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/security/mac_biba/mac_biba.c#19 integrate .. //depot/projects/vimage-commit2/src/sys/security/mac_lomac/mac_lomac.c#16 integrate .. //depot/projects/vimage-commit2/src/sys/sparc64/conf/GENERIC#14 integrate .. //depot/projects/vimage-commit2/src/sys/sys/jail.h#13 integrate .. //depot/projects/vimage-commit2/src/sys/sys/lockmgr.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/sys/mbuf.h#12 integrate .. //depot/projects/vimage-commit2/src/sys/sys/param.h#45 integrate .. //depot/projects/vimage-commit2/src/sys/sys/priv.h#12 integrate .. //depot/projects/vimage-commit2/src/sys/sys/sockio.h#5 integrate .. //depot/projects/vimage-commit2/src/sys/sys/syscall.h#7 integrate .. //depot/projects/vimage-commit2/src/sys/sys/syscall.mk#7 integrate .. //depot/projects/vimage-commit2/src/sys/sys/sysctl.h#22 integrate .. //depot/projects/vimage-commit2/src/sys/sys/syslimits.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/sys/sysproto.h#7 integrate .. //depot/projects/vimage-commit2/src/sys/sys/ucred.h#8 integrate .. //depot/projects/vimage-commit2/src/sys/sys/user.h#7 integrate .. //depot/projects/vimage-commit2/src/sys/sys/vimage.h#74 integrate .. //depot/projects/vimage-commit2/src/sys/ufs/ufs/ufs_dirhash.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/ufs/ufs/ufs_lookup.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/ufs/ufs/ufs_vnops.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/vm/device_pager.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/vm/uma_core.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/vm/vm_contig.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/vm/vm_extern.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/vm/vm_page.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/vm/vm_phys.c#2 integrate Differences ... ==== //depot/projects/vimage-commit2/src/sys/amd64/amd64/msi.c#4 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.10 2009/01/29 09:22:56 jeff Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.11 2009/06/15 13:47:49 mav Exp $"); #include #include @@ -210,6 +210,8 @@ old_id = msi->msi_cpu; if (old_vector && old_id == apic_id) return; + if (old_vector && !msi->msi_msix && msi->msi_first->msi_count > 1) + return; /* Allocate IDT vector on this cpu. */ vector = apic_alloc_vector(apic_id, msi->msi_irq); if (vector == 0) ==== //depot/projects/vimage-commit2/src/sys/amd64/conf/GENERIC.hints#4 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/amd64/conf/GENERIC.hints,v 1.20 2009/05/14 21:53:35 jhb Exp $ +# $FreeBSD: src/sys/amd64/conf/GENERIC.hints,v 1.21 2009/06/15 21:55:29 ps Exp $ hint.fdc.0.at="isa" hint.fdc.0.port="0x3F0" hint.fdc.0.irq="6" @@ -24,3 +24,6 @@ hint.uart.1.irq="3" hint.ppc.0.at="isa" hint.ppc.0.irq="7" +hint.atrtc.0.at="isa" +hint.atrtc.0.port="0x70" +hint.atrtc.0.irq="8" ==== //depot/projects/vimage-commit2/src/sys/arm/arm/pmap.c#8 (text+ko) ==== @@ -147,7 +147,7 @@ #include "opt_vm.h" #include -__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.109 2009/06/08 12:15:39 raj Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.110 2009/06/18 20:42:37 thompsa Exp $"); #include #include #include @@ -200,8 +200,7 @@ static void pmap_enter_locked(pmap_t, vm_offset_t, vm_page_t, vm_prot_t, boolean_t, int); -static __inline void pmap_fix_cache(struct vm_page *, pmap_t, - vm_offset_t); +static void pmap_fix_cache(struct vm_page *, pmap_t, vm_offset_t); static void pmap_alloc_l1(pmap_t); static void pmap_free_l1(pmap_t); static void pmap_use_l1(pmap_t); @@ -406,7 +405,7 @@ #define pmap_is_current(pm) ((pm) == pmap_kernel() || \ curproc->p_vmspace->vm_map.pmap == (pm)) -static uma_zone_t pvzone; +static uma_zone_t pvzone = NULL; uma_zone_t l2zone; static uma_zone_t l2table_zone; static vm_offset_t pmap_kernel_l2dtable_kva; @@ -1451,6 +1450,7 @@ * kernel writable or kernel readable with writable user entry */ if ((kwritable && entries) || + (kwritable > 1) || ((kwritable != writable) && kentries && (pv->pv_pmap == pmap_kernel() || (pv->pv_flags & PVF_WRITE) || @@ -1472,7 +1472,8 @@ continue; } /* user is no longer sharable and writable */ - if (pm != pmap_kernel() && (pv->pv_pmap == pm) && + if (pm != pmap_kernel() && + (pv->pv_pmap == pm || pv->pv_pmap == pmap_kernel()) && !pmwc && (pv->pv_flags & PVF_NC)) { pv->pv_flags &= ~(PVF_NC | PVF_MWC); @@ -1674,7 +1675,29 @@ vm_offset_t va, u_int flags) { + int km; + mtx_assert(&vm_page_queue_mtx, MA_OWNED); + + if (pg->md.pv_kva) { + /* PMAP_ASSERT_LOCKED(pmap_kernel()); */ + pve->pv_pmap = pmap_kernel(); + pve->pv_va = pg->md.pv_kva; + pve->pv_flags = PVF_WRITE | PVF_UNMAN; + pg->md.pv_kva = 0; + + TAILQ_INSERT_HEAD(&pg->md.pv_list, pve, pv_list); + TAILQ_INSERT_HEAD(&pm->pm_pvlist, pve, pv_plist); + if ((km = PMAP_OWNED(pmap_kernel()))) + PMAP_UNLOCK(pmap_kernel()); + vm_page_unlock_queues(); + if ((pve = pmap_get_pv_entry()) == NULL) + panic("pmap_kenter_internal: no pv entries"); + vm_page_lock_queues(); + if (km) + PMAP_LOCK(pmap_kernel()); + } + PMAP_ASSERT_LOCKED(pm); pve->pv_pmap = pm; pve->pv_va = va; @@ -1742,6 +1765,7 @@ pmap_nuke_pv(struct vm_page *pg, pmap_t pm, struct pv_entry *pve) { + struct pv_entry *pv; mtx_assert(&vm_page_queue_mtx, MA_OWNED); PMAP_ASSERT_LOCKED(pm); TAILQ_REMOVE(&pg->md.pv_list, pve, pv_list); @@ -1766,6 +1790,20 @@ vm_page_flag_clear(pg, PG_WRITEABLE); } } + pv = TAILQ_FIRST(&pg->md.pv_list); + if (pv != NULL && (pv->pv_flags & PVF_UNMAN) && + TAILQ_NEXT(pv, pv_list) == NULL) { + pg->md.pv_kva = pv->pv_va; + /* a recursive pmap_nuke_pv */ + TAILQ_REMOVE(&pg->md.pv_list, pv, pv_list); + TAILQ_REMOVE(&pm->pm_pvlist, pv, pv_plist); + if (pv->pv_flags & PVF_WIRED) + --pm->pm_stats.wired_count; + pg->md.pvh_attrs &= ~PVF_REF; + pg->md.pvh_attrs &= ~PVF_MOD; + vm_page_flag_clear(pg, PG_WRITEABLE); + pmap_free_pv_entry(pv); + } } static struct pv_entry * @@ -1784,6 +1822,9 @@ pve = TAILQ_NEXT(pve, pv_list); } + if (pve == NULL && pg->md.pv_kva == va) + pg->md.pv_kva = 0; + return(pve); /* return removed pve */ } /* @@ -2711,8 +2752,8 @@ cpu_idcache_wbinv_all(); cpu_l2cache_wbinv_all(); for (pv = TAILQ_FIRST(&pmap->pm_pvlist); pv; pv = npv) { - if (pv->pv_flags & PVF_WIRED) { - /* The page is wired, cannot remove it now. */ + if (pv->pv_flags & PVF_WIRED || pv->pv_flags & PVF_UNMAN) { + /* Cannot remove wired or unmanaged pages now. */ npv = TAILQ_NEXT(pv, pv_plist); continue; } @@ -2822,6 +2863,9 @@ struct l2_bucket *l2b; pt_entry_t *pte; pt_entry_t opte; + struct pv_entry *pve; + vm_page_t m; + PDEBUG(1, printf("pmap_kenter: va = %08x, pa = %08x\n", (uint32_t) va, (uint32_t) pa)); @@ -2835,10 +2879,7 @@ PDEBUG(1, printf("pmap_kenter: pte = %08x, opte = %08x, npte = %08x\n", (uint32_t) pte, opte, *pte)); if (l2pte_valid(opte)) { - cpu_dcache_wbinv_range(va, PAGE_SIZE); - cpu_l2cache_wbinv_range(va, PAGE_SIZE); - cpu_tlb_flushD_SE(va); - cpu_cpwait(); + pmap_kremove(va); } else { if (opte == 0) l2b->l2b_occupancy++; @@ -2850,6 +2891,33 @@ if (flags & KENTER_USER) *pte |= L2_S_PROT_U; PTE_SYNC(pte); + + /* kernel direct mappings can be shared, so use a pv_entry + * to ensure proper caching. + * + * The pvzone is used to delay the recording of kernel + * mappings until the VM is running. + * + * This expects the physical memory to have vm_page_array entry. + */ + if (pvzone != NULL && (m = vm_phys_paddr_to_vm_page(pa))) { + vm_page_lock_queues(); + if (!TAILQ_EMPTY(&m->md.pv_list) || m->md.pv_kva) { + /* release vm_page lock for pv_entry UMA */ + vm_page_unlock_queues(); + if ((pve = pmap_get_pv_entry()) == NULL) + panic("pmap_kenter_internal: no pv entries"); + vm_page_lock_queues(); + PMAP_LOCK(pmap_kernel()); + pmap_enter_pv(m, pve, pmap_kernel(), va, + PVF_WRITE | PVF_UNMAN); + pmap_fix_cache(m, pmap_kernel(), va); + PMAP_UNLOCK(pmap_kernel()); + } else { + m->md.pv_kva = va; + } + vm_page_unlock_queues(); + } } void @@ -2886,6 +2954,9 @@ { struct l2_bucket *l2b; pt_entry_t *pte, opte; + struct pv_entry *pve; + vm_page_t m; + vm_offset_t pa; l2b = pmap_get_l2_bucket(pmap_kernel(), va); if (!l2b) @@ -2894,6 +2965,25 @@ pte = &l2b->l2b_kva[l2pte_index(va)]; opte = *pte; if (l2pte_valid(opte)) { + /* pa = vtophs(va) taken from pmap_extract() */ + switch (opte & L2_TYPE_MASK) { + case L2_TYPE_L: + pa = (opte & L2_L_FRAME) | (va & L2_L_OFFSET); + break; + default: + pa = (opte & L2_S_FRAME) | (va & L2_S_OFFSET); + break; + } + /* note: should never have to remove an allocation + * before the pvzone is initialized. + */ + vm_page_lock_queues(); + PMAP_LOCK(pmap_kernel()); + if (pvzone != NULL && (m = vm_phys_paddr_to_vm_page(pa)) && + (pve = pmap_remove_pv(m, pmap_kernel(), va))) + pmap_free_pv_entry(pve); + PMAP_UNLOCK(pmap_kernel()); + vm_page_unlock_queues(); cpu_dcache_wbinv_range(va, PAGE_SIZE); cpu_l2cache_wbinv_range(va, PAGE_SIZE); cpu_tlb_flushD_SE(va); @@ -3137,16 +3227,24 @@ cpu_l2cache_inv_range(pv->pv_va, PAGE_SIZE); } - l2b = pmap_get_l2_bucket(pv->pv_pmap, pv->pv_va); - KASSERT(l2b != NULL, ("No l2 bucket")); - ptep = &l2b->l2b_kva[l2pte_index(pv->pv_va)]; - *ptep = 0; - PTE_SYNC_CURRENT(pv->pv_pmap, ptep); - pmap_free_l2_bucket(pv->pv_pmap, l2b, 1); - if (pv->pv_flags & PVF_WIRED) - pv->pv_pmap->pm_stats.wired_count--; - pv->pv_pmap->pm_stats.resident_count--; - flags |= pv->pv_flags; + if (pv->pv_flags & PVF_UNMAN) { + /* remove the pv entry, but do not remove the mapping + * and remember this is a kernel mapped page + */ + m->md.pv_kva = pv->pv_va; + } else { + /* remove the mapping and pv entry */ + l2b = pmap_get_l2_bucket(pv->pv_pmap, pv->pv_va); + KASSERT(l2b != NULL, ("No l2 bucket")); + ptep = &l2b->l2b_kva[l2pte_index(pv->pv_va)]; + *ptep = 0; + PTE_SYNC_CURRENT(pv->pv_pmap, ptep); + pmap_free_l2_bucket(pv->pv_pmap, l2b, 1); + if (pv->pv_flags & PVF_WIRED) + pv->pv_pmap->pm_stats.wired_count--; + pv->pv_pmap->pm_stats.resident_count--; + flags |= pv->pv_flags; + } pmap_nuke_pv(m, pv->pv_pmap, pv); PMAP_UNLOCK(pv->pv_pmap); pmap_free_pv_entry(pv); @@ -3428,25 +3526,19 @@ * It is part of our managed memory so we * must remove it from the PV list */ - pve = pmap_remove_pv(opg, pmap, va); - if (m && (m->flags & (PG_UNMANAGED | PG_FICTITIOUS)) && - pve) - pmap_free_pv_entry(pve); - else if (!pve && - !(m->flags & (PG_UNMANAGED | PG_FICTITIOUS))) - pve = pmap_get_pv_entry(); - KASSERT(pve != NULL || m->flags & (PG_UNMANAGED | - PG_FICTITIOUS), ("No pv")); - oflags = pve->pv_flags; - + if ((pve = pmap_remove_pv(opg, pmap, va))) { + + /* note for patch: the oflags/invalidation was moved + * because PG_FICTITIOUS pages could free the pve + */ + oflags = pve->pv_flags; /* * If the old mapping was valid (ref/mod * emulation creates 'invalid' mappings * initially) then make sure to frob * the cache. */ - if ((oflags & PVF_NC) == 0 && - l2pte_valid(opte)) { + if ((oflags & PVF_NC) == 0 && l2pte_valid(opte)) { if (PV_BEEN_EXECD(oflags)) { pmap_idcache_wbinv_range(pmap, va, PAGE_SIZE); @@ -3456,15 +3548,43 @@ PAGE_SIZE, TRUE, (oflags & PVF_WRITE) == 0); } - } - } else if (m && !(m->flags & (PG_UNMANAGED | PG_FICTITIOUS))) - if ((pve = pmap_get_pv_entry()) == NULL) { - panic("pmap_enter: no pv entries"); + } + + /* free/allocate a pv_entry for UNMANAGED pages if + * this physical page is not/is already mapped. + */ + + if (m && ((m->flags & PG_FICTITIOUS) || + ((m->flags & PG_UNMANAGED) && + !m->md.pv_kva && + TAILQ_EMPTY(&m->md.pv_list)))) { + pmap_free_pv_entry(pve); + pve = NULL; + } + } else if (m && !(m->flags & PG_FICTITIOUS) && + (!(m->flags & PG_UNMANAGED) || m->md.pv_kva || + !TAILQ_EMPTY(&m->md.pv_list))) + pve = pmap_get_pv_entry(); + } else if (m && !(m->flags & PG_FICTITIOUS) && + (!(m->flags & PG_UNMANAGED) || m->md.pv_kva || + !TAILQ_EMPTY(&m->md.pv_list))) + pve = pmap_get_pv_entry(); + + if (m && !(m->flags & PG_FICTITIOUS)) { + KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva, + ("pmap_enter: managed mapping within the clean submap")); + if (m->flags & PG_UNMANAGED) { + if (!TAILQ_EMPTY(&m->md.pv_list) || + m->md.pv_kva) { + KASSERT(pve != NULL, ("No pv")); + nflags |= PVF_UNMAN; + pmap_enter_pv(m, pve, pmap, va, nflags); + } else + m->md.pv_kva = va; + } else { + KASSERT(pve != NULL, ("No pv")); + pmap_enter_pv(m, pve, pmap, va, nflags); } - if (m && !(m->flags & (PG_UNMANAGED | PG_FICTITIOUS))) { - KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva, - ("pmap_enter: managed mapping within the clean submap")); - pmap_enter_pv(m, pve, pmap, va, nflags); } } /* ==== //depot/projects/vimage-commit2/src/sys/arm/conf/CAMBRIA.hints#4 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/arm/conf/CAMBRIA.hints,v 1.4 2009/04/21 22:48:12 stas Exp $ +# $FreeBSD: src/sys/arm/conf/CAMBRIA.hints,v 1.5 2009/06/17 17:58:18 sam Exp $ # # Device wiring for the Gateworks Cambria 2358. @@ -21,11 +21,11 @@ hint.npe.0.mac="C" hint.npe.0.mii="C" hint.npe.0.phy=1 -#hint.npe.1.at="ixp0" -#hint.npe.1.npeid="A" -#hint.npe.1.mac="A" -#hint.npe.1.mii="C" -#hint.npe.1.phy=2 +hint.npe.1.at="ixp0" +hint.npe.1.npeid="A" +hint.npe.1.mac="A" +hint.npe.1.mii="C" +hint.npe.1.phy=2 # FLASH hint.cfi.0.at="ixp0" ==== //depot/projects/vimage-commit2/src/sys/arm/include/pmap.h#4 (text+ko) ==== @@ -44,7 +44,7 @@ * from: @(#)pmap.h 7.4 (Berkeley) 5/12/91 * from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30 * - * $FreeBSD: src/sys/arm/include/pmap.h,v 1.31 2009/05/07 05:42:13 alc Exp $ + * $FreeBSD: src/sys/arm/include/pmap.h,v 1.32 2009/06/18 20:42:37 thompsa Exp $ */ #ifndef _MACHINE_PMAP_H_ @@ -94,6 +94,7 @@ struct md_page { int pvh_attrs; + vm_offset_t pv_kva; /* first kernel VA mapping */ TAILQ_HEAD(,pv_entry) pv_list; }; @@ -494,6 +495,7 @@ #define PVF_EXEC 0x10 /* mapping is executable */ #define PVF_NC 0x20 /* mapping is non-cacheable */ #define PVF_MWC 0x40 /* mapping is used multiple times in userland */ +#define PVF_UNMAN 0x80 /* mapping is unmanaged */ void vector_page_setprot(int); ==== //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/if_npe.c#8 (text+ko) ==== @@ -23,7 +23,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/if_npe.c,v 1.18 2009/06/11 17:05:13 avg Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/if_npe.c,v 1.19 2009/06/17 02:53:05 sam Exp $"); /* * Intel XScale NPE Ethernet driver. @@ -153,9 +153,9 @@ * multi-port processing. It may be better to handle * all traffic through one Q (as done by the Intel drivers). * - * Note that the PHY's are accessible only from MAC A - * on the IXP425. This and other platform-specific - * assumptions probably need to be handled through hints. + * Note that the PHY's are accessible only from MAC B on the + * IXP425 and from MAC C on other devices. This and other + * platform-specific assumptions are handled with hints. */ static const struct { uint32_t macbase; @@ -177,7 +177,7 @@ }, [NPE_B] = { .macbase = IXP425_MAC_B_HWBASE, - .miibase = IXP425_MAC_C_HWBASE, + .miibase = IXP425_MAC_B_HWBASE, .phy = 0, .rx_qid = 4, .rx_freeqid = 27, @@ -186,7 +186,7 @@ }, [NPE_C] = { .macbase = IXP425_MAC_C_HWBASE, - .miibase = IXP425_MAC_C_HWBASE, + .miibase = IXP425_MAC_B_HWBASE, .phy = 1, .rx_qid = 12, .rx_freeqid = 28, @@ -239,6 +239,7 @@ static int npe_setrxqosentry(struct npe_softc *, int classix, int trafclass, int qid); +static int npe_setportaddress(struct npe_softc *, const uint8_t mac[]); static int npe_setfirewallmode(struct npe_softc *, int onoff); static int npe_updatestats(struct npe_softc *); #if 0 @@ -666,7 +667,7 @@ static int npe_activate(device_t dev) { - struct npe_softc * sc = device_get_softc(dev); + struct npe_softc *sc = device_get_softc(dev); int error, i, macbase, miibase; /* @@ -1024,7 +1025,7 @@ struct txdone *td, q[NPE_MAX]; uint32_t entry; - /* XXX no NPE-A support */ + q[NPE_A].tail = &q[NPE_A].head; q[NPE_A].count = 0; q[NPE_B].tail = &q[NPE_B].head; q[NPE_B].count = 0; q[NPE_C].tail = &q[NPE_C].head; q[NPE_C].count = 0; /* XXX max # at a time? */ @@ -1043,6 +1044,8 @@ td->count++; } + if (q[NPE_A].count) + npe_txdone_finish(npes[NPE_A], &q[NPE_A]); if (q[NPE_B].count) npe_txdone_finish(npes[NPE_B], &q[NPE_B]); if (q[NPE_C].count) @@ -1252,6 +1255,7 @@ WR4(sc, NPE_MAC_RX_CNTRL2, 0); npe_setmac(sc, IF_LLADDR(ifp)); + npe_setportaddress(sc, IF_LLADDR(ifp)); npe_setmcast(sc); npe_startxmit(sc); @@ -1552,6 +1556,22 @@ } static int +npe_setportaddress(struct npe_softc *sc, const uint8_t mac[ETHER_ADDR_LEN]) +{ + uint32_t msg[2]; + + msg[0] = (NPE_SETPORTADDRESS << 24) + | (sc->sc_npeid << 20) + | (mac[0] << 8) + | (mac[1] << 0); + msg[1] = (mac[2] << 24) + | (mac[3] << 16) + | (mac[4] << 8) + | (mac[5] << 0); + return ixpnpe_sendandrecvmsg_sync(sc->sc_npe, msg, msg); +} + +static int npe_setfirewallmode(struct npe_softc *sc, int onoff) { uint32_t msg[2]; ==== //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/ixp425.c#7 (text+ko) ==== @@ -34,7 +34,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425.c,v 1.19 2009/06/11 17:05:13 avg Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425.c,v 1.20 2009/06/17 02:51:16 sam Exp $"); #include "opt_ddb.h" @@ -85,6 +85,12 @@ return bits; } +void +ixp4xx_write_feature_bits(uint32_t v) +{ + IXPREG(IXP425_EXP_VBASE + EXP_FCTRL_OFFSET) = ~v; +} + struct arm32_dma_range * bus_dma_get_range(void) { ==== //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/ixp425_npe.c#3 (text+ko) ==== @@ -57,7 +57,7 @@ * SUCH DAMAGE. */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npe.c,v 1.10 2008/12/23 04:51:46 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npe.c,v 1.12 2009/06/17 17:57:52 sam Exp $"); /* * Intel XScale Network Processing Engine (NPE) support. @@ -306,8 +306,14 @@ sc->sc_nrefs = 1; sc->sc_size = config->size; - sc->insMemSize = config->ins_memsize; /* size of instruction memory */ - sc->dataMemSize = config->data_memsize; /* size of data memory */ + if (cpu_is_ixp42x()) { + /* NB: instruction/data memory sizes are NPE-dependent */ + sc->insMemSize = config->ins_memsize; + sc->dataMemSize = config->data_memsize; + } else { + sc->insMemSize = IXP46X_NPEDL_INS_MEMSIZE_WORDS; + sc->dataMemSize = IXP46X_NPEDL_DATA_MEMSIZE_WORDS; + } if (bus_space_map(sc->sc_iot, config->base, sc->sc_size, 0, &sc->sc_ioh)) panic("%s: Cannot map registers", device_get_name(dev)); @@ -798,20 +804,34 @@ IX_NPEDL_CTXT_REG_RESET_CINDEX, }; -#define IX_NPEDL_RESET_NPE_PARITY 0x0800 #define IX_NPEDL_PARITY_BIT_MASK 0x3F00FFFF #define IX_NPEDL_CONFIG_CTRL_REG_MASK 0x3F3FFFFF +#if 0 +/* + * Reset the NPE and its coprocessor using the + * fuse bits in the feature control register. + */ +static void +npe_reset(int npeid) +{ + uint32_t mask = EXP_FCTRL_NPEA << npeid; + uint32_t v; + + v = ixp4xx_read_feature_bits(); + ixp4xx_write_feature_bits(v &~ mask); + /* un-fuse and un-reset the NPE & coprocessor */ + ixp4xx_write_feature_bits(v | mask); +} +#endif + static int npe_cpu_reset(struct ixpnpe_softc *sc) { #define N(a) (sizeof(a) / sizeof(a[0])) - struct ixp425_softc *sa = - device_get_softc(device_get_parent(sc->sc_dev)); uint32_t ctxtReg; /* identifies Context Store reg (0-3) */ uint32_t regAddr; uint32_t regVal; - uint32_t resetNpeParity; uint32_t ixNpeConfigCtrlRegVal; int i, error = 0; @@ -929,33 +949,15 @@ /* Reset the Watch-count register */ npe_reg_write(sc, IX_NPEDL_REG_OFFSET_WC, 0); - +#if 0 /* * WR IXA00055043 - Remove IMEM Parity Introduced by NPE Reset Operation + * XXX Removed because it breaks IXP435 operation; e.g. on Gateworks + * XXX 2358 boards reseting NPE-A after NPE-C is running causes both + * XXX npe's to stop working */ - - /* - * Reset the NPE and its coprocessor - to reset internal - * states and remove parity error. Note this makes no - * sense based on the documentation. The feature control - * register always reads back as 0 on the ixp425 and further - * the bit definition of NPEA/NPEB is off by 1 according to - * the Intel documention--so we're blindly following the - * Intel code w/o any real understanding. - */ - regVal = EXP_BUS_READ_4(sa, EXP_FCTRL_OFFSET); - DPRINTFn(2, sc->sc_dev, "%s: FCTRL 0x%x\n", __func__, regVal); - resetNpeParity = - IX_NPEDL_RESET_NPE_PARITY << (1 + device_get_unit(sc->sc_dev)); - DPRINTFn(2, sc->sc_dev, "%s: FCTRL fuse parity, write 0x%x\n", - __func__, regVal | resetNpeParity); - EXP_BUS_WRITE_4(sa, EXP_FCTRL_OFFSET, regVal | resetNpeParity); - - /* un-fuse and un-reset the NPE & coprocessor */ - DPRINTFn(2, sc->sc_dev, "%s: FCTRL unfuse parity, write 0x%x\n", - __func__, regVal & resetNpeParity); - EXP_BUS_WRITE_4(sa, EXP_FCTRL_OFFSET, regVal &~ resetNpeParity); - + npe_reset(sc->sc_npeid); +#endif /* * Call NpeMgr function to stop the NPE again after the Feature Control * has unfused and Un-Reset the NPE and its associated Coprocessors. ==== //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/ixp425_npereg.h#2 (text+ko) ==== @@ -26,7 +26,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGES. * - * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npereg.h,v 1.1 2006/11/19 23:55:23 sam Exp $ + * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npereg.h,v 1.2 2009/06/17 02:55:53 sam Exp $ */ /*- @@ -95,7 +95,6 @@ /* * Instruction and Data Memory Size (in words) for each NPE */ -#ifndef __ixp46X #define IX_NPEDL_INS_MEMSIZE_WORDS_NPEA 4096 #define IX_NPEDL_INS_MEMSIZE_WORDS_NPEB 2048 #define IX_NPEDL_INS_MEMSIZE_WORDS_NPEC 2048 @@ -103,15 +102,9 @@ #define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEA 2048 #define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEB 2048 #define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEC 2048 -#else -#define IX_NPEDL_INS_MEMSIZE_WORDS_NPEA 4096 -#define IX_NPEDL_INS_MEMSIZE_WORDS_NPEB 4096 -#define IX_NPEDL_INS_MEMSIZE_WORDS_NPEC 4096 -#define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEA 4096 -#define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEB 4096 -#define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEC 4096 -#endif +#define IXP46X_NPEDL_INS_MEMSIZE_WORDS 4096 +#define IXP46X_NPEDL_DATA_MEMSIZE_WORDS 4096 /* BAR offsets */ #define IX_NPEDL_REG_OFFSET_EXAD 0x00000000 /* Execution Address */ ==== //depot/projects/vimage-commit2/src/sys/arm/xscale/ixp425/ixp425var.h#3 (text+ko) ==== @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425var.h,v 1.6 2008/12/23 04:48:27 sam Exp $ + * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425var.h,v 1.7 2009/06/17 02:51:16 sam Exp $ * */ @@ -101,6 +101,7 @@ uint32_t ixp425_sdram_size(void); uint32_t ixp435_ddram_size(void); uint32_t ixp4xx_read_feature_bits(void); +void ixp4xx_write_feature_bits(uint32_t); int ixp425_md_route_interrupt(device_t, device_t, int); void ixp425_md_attach(device_t); ==== //depot/projects/vimage-commit2/src/sys/boot/forth/loader.conf#14 (text+ko) ==== @@ -6,7 +6,7 @@ # # All arguments must be in double quotes. # -# $FreeBSD: src/sys/boot/forth/loader.conf,v 1.141 2009/06/10 02:07:58 yongari Exp $ +# $FreeBSD: src/sys/boot/forth/loader.conf,v 1.142 2009/06/15 18:22:41 marius Exp $ ############################################################## ### Basic configuration options ############################ @@ -221,6 +221,7 @@ if_bce_load="NO" # Broadcom NetXtreme II Gigabit Ethernet if_bfe_load="NO" # Broadcom BCM4401 if_bge_load="NO" # Broadcom BCM570x PCI Gigabit Ethernet +if_cas_load="NO" # Sun Cassini/Cassini+ and NS DP83065 Saturn if_cm_load="NO" # SMC (90c26, 90c56, 90c66) if_cs_load="NO" # Crystal Semiconductor CS8920 if_cue_load="NO" # CATC USB-EL1210A USB Ethernet ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c#7 (text+ko) ==== @@ -158,7 +158,7 @@ */ static int arc_min_prefetch_lifespan; -extern int zfs_prefetch_enable; +extern int zfs_prefetch_disable; static int arc_dead; /* @@ -3552,21 +3552,21 @@ mutex_init(&zfs_write_limit_lock, NULL, MUTEX_DEFAULT, NULL); #ifdef _KERNEL - if (TUNABLE_INT_FETCH("vfs.zfs.prefetch_enable", &zfs_prefetch_enable)) + if (TUNABLE_INT_FETCH("vfs.zfs.prefetch_disable", &zfs_prefetch_disable)) prefetch_tunable_set = 1; #ifdef __i386__ if (prefetch_tunable_set == 0) { printf("ZFS NOTICE: prefetch is disabled by default on i386" " - add enable to tunable to change.\n" ); - zfs_prefetch_enable=0; + zfs_prefetch_disable=1; } #else if ((((uint64_t)physmem * PAGESIZE) < (1ULL << 32)) && prefetch_tunable_set == 0) { printf("ZFS NOTICE: system has less than 4GB and prefetch enable is not set" "... disabling.\n"); - zfs_prefetch_enable=0; + zfs_prefetch_disable=1; } #endif /* Warn about ZFS memory and address space requirements. */ ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c#5 (text+ko) ==== @@ -326,7 +326,7 @@ uint64_t blkid; int nblks, i, err; - if (zfs_prefetch_enable == 0) + if (zfs_prefetch_disable) return; if (len == 0) { /* they're interested in the bonus buffer */ ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c#5 (text+ko) ==== @@ -37,7 +37,7 @@ * until we can get this working the way we want it to. */ -int zfs_prefetch_enable = 1; +int zfs_prefetch_disable = 0; >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Sun Jun 21 08:52:58 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E8B431065676; Sun, 21 Jun 2009 08:52:57 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A8C511065670 for ; Sun, 21 Jun 2009 08:52:57 +0000 (UTC) (envelope-from anchie@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 94C0F8FC0A for ; Sun, 21 Jun 2009 08:52:57 +0000 (UTC) (envelope-from anchie@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5L8qvO3070623 for ; Sun, 21 Jun 2009 08:52:57 GMT (envelope-from anchie@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5L8qumn070617 for perforce@freebsd.org; Sun, 21 Jun 2009 08:52:56 GMT (envelope-from anchie@FreeBSD.org) Date: Sun, 21 Jun 2009 08:52:56 GMT Message-Id: <200906210852.n5L8qumn070617@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to anchie@FreeBSD.org using -f From: Ana Kukec To: Perforce Change Reviews Cc: Subject: PERFORCE change 164800 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 08:52:58 -0000 http://perforce.freebsd.org/chv.cgi?CH=164800 Change 164800 by anchie@anchie_malimis on 2009/06/21 08:52:01 Integrate. Affected files ... .. //depot/projects/soc2009/anchie_send/src/sys/arm/arm/pmap.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/arm/conf/CAMBRIA.hints#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/arm/include/pmap.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/if_npe.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/ixp425.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/ixp425_npe.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/ixp425_npereg.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/ixp425var.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/compat/freebsd32/freebsd32_proto.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/compat/freebsd32/freebsd32_syscall.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/compat/freebsd32/freebsd32_syscalls.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/compat/freebsd32/freebsd32_sysent.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/compat/freebsd32/syscalls.master#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/compat/linux/linux_ioctl.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/compat/linux/linux_misc.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/compat/linux/linux_uid16.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/conf/files#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/conf/options#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/cxgb/common/cxgb_t3_cpl.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/cxgb/cxgb_adapter.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/cxgb/cxgb_main.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/cxgb/cxgb_multiq.c#3 delete .. //depot/projects/soc2009/anchie_send/src/sys/dev/cxgb/cxgb_osdep.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/cxgb/cxgb_sge.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/cxgb/sys/cxgb_support.c#2 delete .. //depot/projects/soc2009/anchie_send/src/sys/dev/cxgb/sys/mvec.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/cxgb/sys/uipc_mvec.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/drm/drm_bufs.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/drm/drm_context.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/drm/i915_dma.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/drm/i915_drv.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/drm/i915_irq.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/if_ndis/if_ndis.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/puc/pucdata.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/syscons/scterm-teken.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/syscons/teken/teken.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/dev/usb/wlan/if_uath.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/devfs/devfs_vnops.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfs/nfs.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfs/nfs_commonport.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfs/nfsport.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfsclient/nfs_clbio.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfsclient/nfs_clkrpc.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfsclient/nfs_clport.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfsclient/nfs_clvnops.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfsserver/nfs_nfsdkrpc.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfsserver/nfs_nfsdport.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/nfsserver/nfs_nfsdstate.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/portalfs/portal.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/portalfs/portal_vnops.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/fs/unionfs/union_vnops.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/geom/label/g_label_gpt.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/gnu/fs/ext2fs/ext2_lookup.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/gnu/fs/ext2fs/ext2_vnops.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/i386/ibcs2/ibcs2_isc_sysent.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/i386/ibcs2/ibcs2_misc.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/i386/ibcs2/ibcs2_xenix_sysent.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/i386/include/cpufunc.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/i386/include/specialreg.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/ia64/ia64/vm_machdep.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/init_sysent.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/kern_acct.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/kern_exec.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/kern_lock.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/kern_lockf.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/kern_mbuf.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/kern_proc.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/kern_prot.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/kern_sysctl.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/makesyscalls.sh#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/syscalls.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/syscalls.master#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/systrace_args.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/tty.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/uipc_usrreq.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/kern/vfs_export.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/mips/adm5120/if_admsw.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/mips/conf/.cvsignore#1 branch .. //depot/projects/soc2009/anchie_send/src/sys/mips/idt/idtpci.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/mips/idt/if_kr.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/modules/Makefile#5 integrate .. //depot/projects/soc2009/anchie_send/src/sys/modules/acpi/acpi/Makefile#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/modules/cxgb/cxgb/Makefile#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/modules/wlan/Makefile#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/net/bpf.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/net/if_enc.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/net/if_gre.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/net/if_tun.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/net/if_var.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/net/route.h#4 edit .. //depot/projects/soc2009/anchie_send/src/sys/net80211/ieee80211_wds.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netatalk/ddp_output.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/in_proto.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/ip_var.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/ipfw/ip_fw2.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/sctp.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/sctp_indata.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/sctp_input.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/sctp_output.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/tcp_input.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/tcp_output.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/tcp_subr.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/tcp_timer.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/tcp_usrreq.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet/tcp_var.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#11 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/in6_proto.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/nd6.c#9 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/nd6_nbr.c#2 edit .. //depot/projects/soc2009/anchie_send/src/sys/netipsec/key.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netipsec/xform_tcp.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netipx/ipx_usrreq.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netipx/spx.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netipx/spx_reass.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netipx/spx_usrreq.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/netipx/spx_var.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/nfsclient/nfs_bio.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/nfsclient/nfs_vnops.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/nfsserver/nfs_srvkrpc.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/nfsserver/nfs_srvsock.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/nfsserver/nfs_srvsubs.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/nlm/nlm_prot_impl.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/powerpc/include/spr.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/powerpc/powerpc/cpu.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/rpc/svc.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/rpc/svc_auth.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/rpc/svc_auth_unix.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/rpc/svc_generic.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/rpc/svc_vc.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/security/mac_biba/mac_biba.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/security/mac_lomac/mac_lomac.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/lockmgr.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/mbuf.h#3 edit .. //depot/projects/soc2009/anchie_send/src/sys/sys/param.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/priv.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/syscall.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/syscall.mk#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/syslimits.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/sysproto.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/ucred.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/user.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/sys/vimage.h#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/ufs/ufs/ufs_dirhash.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/ufs/ufs/ufs_lookup.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/ufs/ufs/ufs_vnops.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/vm/device_pager.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/vm/uma_core.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/vm/vm_contig.c#3 integrate .. //depot/projects/soc2009/anchie_send/src/sys/vm/vm_extern.h#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/vm/vm_page.c#2 integrate .. //depot/projects/soc2009/anchie_send/src/sys/vm/vm_phys.c#2 integrate Differences ... ==== //depot/projects/soc2009/anchie_send/src/sys/arm/arm/pmap.c#3 (text+ko) ==== @@ -147,7 +147,7 @@ #include "opt_vm.h" #include -__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.109 2009/06/08 12:15:39 raj Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.110 2009/06/18 20:42:37 thompsa Exp $"); #include #include #include @@ -200,8 +200,7 @@ static void pmap_enter_locked(pmap_t, vm_offset_t, vm_page_t, vm_prot_t, boolean_t, int); -static __inline void pmap_fix_cache(struct vm_page *, pmap_t, - vm_offset_t); +static void pmap_fix_cache(struct vm_page *, pmap_t, vm_offset_t); static void pmap_alloc_l1(pmap_t); static void pmap_free_l1(pmap_t); static void pmap_use_l1(pmap_t); @@ -406,7 +405,7 @@ #define pmap_is_current(pm) ((pm) == pmap_kernel() || \ curproc->p_vmspace->vm_map.pmap == (pm)) -static uma_zone_t pvzone; +static uma_zone_t pvzone = NULL; uma_zone_t l2zone; static uma_zone_t l2table_zone; static vm_offset_t pmap_kernel_l2dtable_kva; @@ -1451,6 +1450,7 @@ * kernel writable or kernel readable with writable user entry */ if ((kwritable && entries) || + (kwritable > 1) || ((kwritable != writable) && kentries && (pv->pv_pmap == pmap_kernel() || (pv->pv_flags & PVF_WRITE) || @@ -1472,7 +1472,8 @@ continue; } /* user is no longer sharable and writable */ - if (pm != pmap_kernel() && (pv->pv_pmap == pm) && + if (pm != pmap_kernel() && + (pv->pv_pmap == pm || pv->pv_pmap == pmap_kernel()) && !pmwc && (pv->pv_flags & PVF_NC)) { pv->pv_flags &= ~(PVF_NC | PVF_MWC); @@ -1674,7 +1675,29 @@ vm_offset_t va, u_int flags) { + int km; + mtx_assert(&vm_page_queue_mtx, MA_OWNED); + + if (pg->md.pv_kva) { + /* PMAP_ASSERT_LOCKED(pmap_kernel()); */ + pve->pv_pmap = pmap_kernel(); + pve->pv_va = pg->md.pv_kva; + pve->pv_flags = PVF_WRITE | PVF_UNMAN; + pg->md.pv_kva = 0; + + TAILQ_INSERT_HEAD(&pg->md.pv_list, pve, pv_list); + TAILQ_INSERT_HEAD(&pm->pm_pvlist, pve, pv_plist); + if ((km = PMAP_OWNED(pmap_kernel()))) + PMAP_UNLOCK(pmap_kernel()); + vm_page_unlock_queues(); + if ((pve = pmap_get_pv_entry()) == NULL) + panic("pmap_kenter_internal: no pv entries"); + vm_page_lock_queues(); + if (km) + PMAP_LOCK(pmap_kernel()); + } + PMAP_ASSERT_LOCKED(pm); pve->pv_pmap = pm; pve->pv_va = va; @@ -1742,6 +1765,7 @@ pmap_nuke_pv(struct vm_page *pg, pmap_t pm, struct pv_entry *pve) { + struct pv_entry *pv; mtx_assert(&vm_page_queue_mtx, MA_OWNED); PMAP_ASSERT_LOCKED(pm); TAILQ_REMOVE(&pg->md.pv_list, pve, pv_list); @@ -1766,6 +1790,20 @@ vm_page_flag_clear(pg, PG_WRITEABLE); } } + pv = TAILQ_FIRST(&pg->md.pv_list); + if (pv != NULL && (pv->pv_flags & PVF_UNMAN) && + TAILQ_NEXT(pv, pv_list) == NULL) { + pg->md.pv_kva = pv->pv_va; + /* a recursive pmap_nuke_pv */ + TAILQ_REMOVE(&pg->md.pv_list, pv, pv_list); + TAILQ_REMOVE(&pm->pm_pvlist, pv, pv_plist); + if (pv->pv_flags & PVF_WIRED) + --pm->pm_stats.wired_count; + pg->md.pvh_attrs &= ~PVF_REF; + pg->md.pvh_attrs &= ~PVF_MOD; + vm_page_flag_clear(pg, PG_WRITEABLE); + pmap_free_pv_entry(pv); + } } static struct pv_entry * @@ -1784,6 +1822,9 @@ pve = TAILQ_NEXT(pve, pv_list); } + if (pve == NULL && pg->md.pv_kva == va) + pg->md.pv_kva = 0; + return(pve); /* return removed pve */ } /* @@ -2711,8 +2752,8 @@ cpu_idcache_wbinv_all(); cpu_l2cache_wbinv_all(); for (pv = TAILQ_FIRST(&pmap->pm_pvlist); pv; pv = npv) { - if (pv->pv_flags & PVF_WIRED) { - /* The page is wired, cannot remove it now. */ + if (pv->pv_flags & PVF_WIRED || pv->pv_flags & PVF_UNMAN) { + /* Cannot remove wired or unmanaged pages now. */ npv = TAILQ_NEXT(pv, pv_plist); continue; } @@ -2822,6 +2863,9 @@ struct l2_bucket *l2b; pt_entry_t *pte; pt_entry_t opte; + struct pv_entry *pve; + vm_page_t m; + PDEBUG(1, printf("pmap_kenter: va = %08x, pa = %08x\n", (uint32_t) va, (uint32_t) pa)); @@ -2835,10 +2879,7 @@ PDEBUG(1, printf("pmap_kenter: pte = %08x, opte = %08x, npte = %08x\n", (uint32_t) pte, opte, *pte)); if (l2pte_valid(opte)) { - cpu_dcache_wbinv_range(va, PAGE_SIZE); - cpu_l2cache_wbinv_range(va, PAGE_SIZE); - cpu_tlb_flushD_SE(va); - cpu_cpwait(); + pmap_kremove(va); } else { if (opte == 0) l2b->l2b_occupancy++; @@ -2850,6 +2891,33 @@ if (flags & KENTER_USER) *pte |= L2_S_PROT_U; PTE_SYNC(pte); + + /* kernel direct mappings can be shared, so use a pv_entry + * to ensure proper caching. + * + * The pvzone is used to delay the recording of kernel + * mappings until the VM is running. + * + * This expects the physical memory to have vm_page_array entry. + */ + if (pvzone != NULL && (m = vm_phys_paddr_to_vm_page(pa))) { + vm_page_lock_queues(); + if (!TAILQ_EMPTY(&m->md.pv_list) || m->md.pv_kva) { + /* release vm_page lock for pv_entry UMA */ + vm_page_unlock_queues(); + if ((pve = pmap_get_pv_entry()) == NULL) + panic("pmap_kenter_internal: no pv entries"); + vm_page_lock_queues(); + PMAP_LOCK(pmap_kernel()); + pmap_enter_pv(m, pve, pmap_kernel(), va, + PVF_WRITE | PVF_UNMAN); + pmap_fix_cache(m, pmap_kernel(), va); + PMAP_UNLOCK(pmap_kernel()); + } else { + m->md.pv_kva = va; + } + vm_page_unlock_queues(); + } } void @@ -2886,6 +2954,9 @@ { struct l2_bucket *l2b; pt_entry_t *pte, opte; + struct pv_entry *pve; + vm_page_t m; + vm_offset_t pa; l2b = pmap_get_l2_bucket(pmap_kernel(), va); if (!l2b) @@ -2894,6 +2965,25 @@ pte = &l2b->l2b_kva[l2pte_index(va)]; opte = *pte; if (l2pte_valid(opte)) { + /* pa = vtophs(va) taken from pmap_extract() */ + switch (opte & L2_TYPE_MASK) { + case L2_TYPE_L: + pa = (opte & L2_L_FRAME) | (va & L2_L_OFFSET); + break; + default: + pa = (opte & L2_S_FRAME) | (va & L2_S_OFFSET); + break; + } + /* note: should never have to remove an allocation + * before the pvzone is initialized. + */ + vm_page_lock_queues(); + PMAP_LOCK(pmap_kernel()); + if (pvzone != NULL && (m = vm_phys_paddr_to_vm_page(pa)) && + (pve = pmap_remove_pv(m, pmap_kernel(), va))) + pmap_free_pv_entry(pve); + PMAP_UNLOCK(pmap_kernel()); + vm_page_unlock_queues(); cpu_dcache_wbinv_range(va, PAGE_SIZE); cpu_l2cache_wbinv_range(va, PAGE_SIZE); cpu_tlb_flushD_SE(va); @@ -3137,16 +3227,24 @@ cpu_l2cache_inv_range(pv->pv_va, PAGE_SIZE); } - l2b = pmap_get_l2_bucket(pv->pv_pmap, pv->pv_va); - KASSERT(l2b != NULL, ("No l2 bucket")); - ptep = &l2b->l2b_kva[l2pte_index(pv->pv_va)]; - *ptep = 0; - PTE_SYNC_CURRENT(pv->pv_pmap, ptep); - pmap_free_l2_bucket(pv->pv_pmap, l2b, 1); - if (pv->pv_flags & PVF_WIRED) - pv->pv_pmap->pm_stats.wired_count--; - pv->pv_pmap->pm_stats.resident_count--; - flags |= pv->pv_flags; + if (pv->pv_flags & PVF_UNMAN) { + /* remove the pv entry, but do not remove the mapping + * and remember this is a kernel mapped page + */ + m->md.pv_kva = pv->pv_va; + } else { + /* remove the mapping and pv entry */ + l2b = pmap_get_l2_bucket(pv->pv_pmap, pv->pv_va); + KASSERT(l2b != NULL, ("No l2 bucket")); + ptep = &l2b->l2b_kva[l2pte_index(pv->pv_va)]; + *ptep = 0; + PTE_SYNC_CURRENT(pv->pv_pmap, ptep); + pmap_free_l2_bucket(pv->pv_pmap, l2b, 1); + if (pv->pv_flags & PVF_WIRED) + pv->pv_pmap->pm_stats.wired_count--; + pv->pv_pmap->pm_stats.resident_count--; + flags |= pv->pv_flags; + } pmap_nuke_pv(m, pv->pv_pmap, pv); PMAP_UNLOCK(pv->pv_pmap); pmap_free_pv_entry(pv); @@ -3428,25 +3526,19 @@ * It is part of our managed memory so we * must remove it from the PV list */ - pve = pmap_remove_pv(opg, pmap, va); - if (m && (m->flags & (PG_UNMANAGED | PG_FICTITIOUS)) && - pve) - pmap_free_pv_entry(pve); - else if (!pve && - !(m->flags & (PG_UNMANAGED | PG_FICTITIOUS))) - pve = pmap_get_pv_entry(); - KASSERT(pve != NULL || m->flags & (PG_UNMANAGED | - PG_FICTITIOUS), ("No pv")); - oflags = pve->pv_flags; - + if ((pve = pmap_remove_pv(opg, pmap, va))) { + + /* note for patch: the oflags/invalidation was moved + * because PG_FICTITIOUS pages could free the pve + */ + oflags = pve->pv_flags; /* * If the old mapping was valid (ref/mod * emulation creates 'invalid' mappings * initially) then make sure to frob * the cache. */ - if ((oflags & PVF_NC) == 0 && - l2pte_valid(opte)) { + if ((oflags & PVF_NC) == 0 && l2pte_valid(opte)) { if (PV_BEEN_EXECD(oflags)) { pmap_idcache_wbinv_range(pmap, va, PAGE_SIZE); @@ -3456,15 +3548,43 @@ PAGE_SIZE, TRUE, (oflags & PVF_WRITE) == 0); } - } - } else if (m && !(m->flags & (PG_UNMANAGED | PG_FICTITIOUS))) - if ((pve = pmap_get_pv_entry()) == NULL) { - panic("pmap_enter: no pv entries"); + } + + /* free/allocate a pv_entry for UNMANAGED pages if + * this physical page is not/is already mapped. + */ + + if (m && ((m->flags & PG_FICTITIOUS) || + ((m->flags & PG_UNMANAGED) && + !m->md.pv_kva && + TAILQ_EMPTY(&m->md.pv_list)))) { + pmap_free_pv_entry(pve); + pve = NULL; + } + } else if (m && !(m->flags & PG_FICTITIOUS) && + (!(m->flags & PG_UNMANAGED) || m->md.pv_kva || + !TAILQ_EMPTY(&m->md.pv_list))) + pve = pmap_get_pv_entry(); + } else if (m && !(m->flags & PG_FICTITIOUS) && + (!(m->flags & PG_UNMANAGED) || m->md.pv_kva || + !TAILQ_EMPTY(&m->md.pv_list))) + pve = pmap_get_pv_entry(); + + if (m && !(m->flags & PG_FICTITIOUS)) { + KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva, + ("pmap_enter: managed mapping within the clean submap")); + if (m->flags & PG_UNMANAGED) { + if (!TAILQ_EMPTY(&m->md.pv_list) || + m->md.pv_kva) { + KASSERT(pve != NULL, ("No pv")); + nflags |= PVF_UNMAN; + pmap_enter_pv(m, pve, pmap, va, nflags); + } else + m->md.pv_kva = va; + } else { + KASSERT(pve != NULL, ("No pv")); + pmap_enter_pv(m, pve, pmap, va, nflags); } - if (m && !(m->flags & (PG_UNMANAGED | PG_FICTITIOUS))) { - KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva, - ("pmap_enter: managed mapping within the clean submap")); - pmap_enter_pv(m, pve, pmap, va, nflags); } } /* ==== //depot/projects/soc2009/anchie_send/src/sys/arm/conf/CAMBRIA.hints#2 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/arm/conf/CAMBRIA.hints,v 1.4 2009/04/21 22:48:12 stas Exp $ +# $FreeBSD: src/sys/arm/conf/CAMBRIA.hints,v 1.5 2009/06/17 17:58:18 sam Exp $ # # Device wiring for the Gateworks Cambria 2358. @@ -21,11 +21,11 @@ hint.npe.0.mac="C" hint.npe.0.mii="C" hint.npe.0.phy=1 -#hint.npe.1.at="ixp0" -#hint.npe.1.npeid="A" -#hint.npe.1.mac="A" -#hint.npe.1.mii="C" -#hint.npe.1.phy=2 +hint.npe.1.at="ixp0" +hint.npe.1.npeid="A" +hint.npe.1.mac="A" +hint.npe.1.mii="C" +hint.npe.1.phy=2 # FLASH hint.cfi.0.at="ixp0" ==== //depot/projects/soc2009/anchie_send/src/sys/arm/include/pmap.h#2 (text+ko) ==== @@ -44,7 +44,7 @@ * from: @(#)pmap.h 7.4 (Berkeley) 5/12/91 * from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30 * - * $FreeBSD: src/sys/arm/include/pmap.h,v 1.31 2009/05/07 05:42:13 alc Exp $ + * $FreeBSD: src/sys/arm/include/pmap.h,v 1.32 2009/06/18 20:42:37 thompsa Exp $ */ #ifndef _MACHINE_PMAP_H_ @@ -94,6 +94,7 @@ struct md_page { int pvh_attrs; + vm_offset_t pv_kva; /* first kernel VA mapping */ TAILQ_HEAD(,pv_entry) pv_list; }; @@ -494,6 +495,7 @@ #define PVF_EXEC 0x10 /* mapping is executable */ #define PVF_NC 0x20 /* mapping is non-cacheable */ #define PVF_MWC 0x40 /* mapping is used multiple times in userland */ +#define PVF_UNMAN 0x80 /* mapping is unmanaged */ void vector_page_setprot(int); ==== //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/if_npe.c#3 (text+ko) ==== @@ -23,7 +23,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/if_npe.c,v 1.18 2009/06/11 17:05:13 avg Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/if_npe.c,v 1.19 2009/06/17 02:53:05 sam Exp $"); /* * Intel XScale NPE Ethernet driver. @@ -153,9 +153,9 @@ * multi-port processing. It may be better to handle * all traffic through one Q (as done by the Intel drivers). * - * Note that the PHY's are accessible only from MAC A - * on the IXP425. This and other platform-specific - * assumptions probably need to be handled through hints. + * Note that the PHY's are accessible only from MAC B on the + * IXP425 and from MAC C on other devices. This and other + * platform-specific assumptions are handled with hints. */ static const struct { uint32_t macbase; @@ -177,7 +177,7 @@ }, [NPE_B] = { .macbase = IXP425_MAC_B_HWBASE, - .miibase = IXP425_MAC_C_HWBASE, + .miibase = IXP425_MAC_B_HWBASE, .phy = 0, .rx_qid = 4, .rx_freeqid = 27, @@ -186,7 +186,7 @@ }, [NPE_C] = { .macbase = IXP425_MAC_C_HWBASE, - .miibase = IXP425_MAC_C_HWBASE, + .miibase = IXP425_MAC_B_HWBASE, .phy = 1, .rx_qid = 12, .rx_freeqid = 28, @@ -239,6 +239,7 @@ static int npe_setrxqosentry(struct npe_softc *, int classix, int trafclass, int qid); +static int npe_setportaddress(struct npe_softc *, const uint8_t mac[]); static int npe_setfirewallmode(struct npe_softc *, int onoff); static int npe_updatestats(struct npe_softc *); #if 0 @@ -666,7 +667,7 @@ static int npe_activate(device_t dev) { - struct npe_softc * sc = device_get_softc(dev); + struct npe_softc *sc = device_get_softc(dev); int error, i, macbase, miibase; /* @@ -1024,7 +1025,7 @@ struct txdone *td, q[NPE_MAX]; uint32_t entry; - /* XXX no NPE-A support */ + q[NPE_A].tail = &q[NPE_A].head; q[NPE_A].count = 0; q[NPE_B].tail = &q[NPE_B].head; q[NPE_B].count = 0; q[NPE_C].tail = &q[NPE_C].head; q[NPE_C].count = 0; /* XXX max # at a time? */ @@ -1043,6 +1044,8 @@ td->count++; } + if (q[NPE_A].count) + npe_txdone_finish(npes[NPE_A], &q[NPE_A]); if (q[NPE_B].count) npe_txdone_finish(npes[NPE_B], &q[NPE_B]); if (q[NPE_C].count) @@ -1252,6 +1255,7 @@ WR4(sc, NPE_MAC_RX_CNTRL2, 0); npe_setmac(sc, IF_LLADDR(ifp)); + npe_setportaddress(sc, IF_LLADDR(ifp)); npe_setmcast(sc); npe_startxmit(sc); @@ -1552,6 +1556,22 @@ } static int +npe_setportaddress(struct npe_softc *sc, const uint8_t mac[ETHER_ADDR_LEN]) +{ + uint32_t msg[2]; + + msg[0] = (NPE_SETPORTADDRESS << 24) + | (sc->sc_npeid << 20) + | (mac[0] << 8) + | (mac[1] << 0); + msg[1] = (mac[2] << 24) + | (mac[3] << 16) + | (mac[4] << 8) + | (mac[5] << 0); + return ixpnpe_sendandrecvmsg_sync(sc->sc_npe, msg, msg); +} + +static int npe_setfirewallmode(struct npe_softc *sc, int onoff) { uint32_t msg[2]; ==== //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/ixp425.c#3 (text+ko) ==== @@ -34,7 +34,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425.c,v 1.19 2009/06/11 17:05:13 avg Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425.c,v 1.20 2009/06/17 02:51:16 sam Exp $"); #include "opt_ddb.h" @@ -85,6 +85,12 @@ return bits; } +void +ixp4xx_write_feature_bits(uint32_t v) +{ + IXPREG(IXP425_EXP_VBASE + EXP_FCTRL_OFFSET) = ~v; +} + struct arm32_dma_range * bus_dma_get_range(void) { ==== //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/ixp425_npe.c#2 (text+ko) ==== @@ -57,7 +57,7 @@ * SUCH DAMAGE. */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npe.c,v 1.10 2008/12/23 04:51:46 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npe.c,v 1.12 2009/06/17 17:57:52 sam Exp $"); /* * Intel XScale Network Processing Engine (NPE) support. @@ -306,8 +306,14 @@ sc->sc_nrefs = 1; sc->sc_size = config->size; - sc->insMemSize = config->ins_memsize; /* size of instruction memory */ - sc->dataMemSize = config->data_memsize; /* size of data memory */ + if (cpu_is_ixp42x()) { + /* NB: instruction/data memory sizes are NPE-dependent */ + sc->insMemSize = config->ins_memsize; + sc->dataMemSize = config->data_memsize; + } else { + sc->insMemSize = IXP46X_NPEDL_INS_MEMSIZE_WORDS; + sc->dataMemSize = IXP46X_NPEDL_DATA_MEMSIZE_WORDS; + } if (bus_space_map(sc->sc_iot, config->base, sc->sc_size, 0, &sc->sc_ioh)) panic("%s: Cannot map registers", device_get_name(dev)); @@ -798,20 +804,34 @@ IX_NPEDL_CTXT_REG_RESET_CINDEX, }; -#define IX_NPEDL_RESET_NPE_PARITY 0x0800 #define IX_NPEDL_PARITY_BIT_MASK 0x3F00FFFF #define IX_NPEDL_CONFIG_CTRL_REG_MASK 0x3F3FFFFF +#if 0 +/* + * Reset the NPE and its coprocessor using the + * fuse bits in the feature control register. + */ +static void +npe_reset(int npeid) +{ + uint32_t mask = EXP_FCTRL_NPEA << npeid; + uint32_t v; + + v = ixp4xx_read_feature_bits(); + ixp4xx_write_feature_bits(v &~ mask); + /* un-fuse and un-reset the NPE & coprocessor */ + ixp4xx_write_feature_bits(v | mask); +} +#endif + static int npe_cpu_reset(struct ixpnpe_softc *sc) { #define N(a) (sizeof(a) / sizeof(a[0])) - struct ixp425_softc *sa = - device_get_softc(device_get_parent(sc->sc_dev)); uint32_t ctxtReg; /* identifies Context Store reg (0-3) */ uint32_t regAddr; uint32_t regVal; - uint32_t resetNpeParity; uint32_t ixNpeConfigCtrlRegVal; int i, error = 0; @@ -929,33 +949,15 @@ /* Reset the Watch-count register */ npe_reg_write(sc, IX_NPEDL_REG_OFFSET_WC, 0); - +#if 0 /* * WR IXA00055043 - Remove IMEM Parity Introduced by NPE Reset Operation + * XXX Removed because it breaks IXP435 operation; e.g. on Gateworks + * XXX 2358 boards reseting NPE-A after NPE-C is running causes both + * XXX npe's to stop working */ - - /* - * Reset the NPE and its coprocessor - to reset internal - * states and remove parity error. Note this makes no - * sense based on the documentation. The feature control - * register always reads back as 0 on the ixp425 and further - * the bit definition of NPEA/NPEB is off by 1 according to - * the Intel documention--so we're blindly following the - * Intel code w/o any real understanding. - */ - regVal = EXP_BUS_READ_4(sa, EXP_FCTRL_OFFSET); - DPRINTFn(2, sc->sc_dev, "%s: FCTRL 0x%x\n", __func__, regVal); - resetNpeParity = - IX_NPEDL_RESET_NPE_PARITY << (1 + device_get_unit(sc->sc_dev)); - DPRINTFn(2, sc->sc_dev, "%s: FCTRL fuse parity, write 0x%x\n", - __func__, regVal | resetNpeParity); - EXP_BUS_WRITE_4(sa, EXP_FCTRL_OFFSET, regVal | resetNpeParity); - - /* un-fuse and un-reset the NPE & coprocessor */ - DPRINTFn(2, sc->sc_dev, "%s: FCTRL unfuse parity, write 0x%x\n", - __func__, regVal & resetNpeParity); - EXP_BUS_WRITE_4(sa, EXP_FCTRL_OFFSET, regVal &~ resetNpeParity); - + npe_reset(sc->sc_npeid); +#endif /* * Call NpeMgr function to stop the NPE again after the Feature Control * has unfused and Un-Reset the NPE and its associated Coprocessors. ==== //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/ixp425_npereg.h#2 (text+ko) ==== @@ -26,7 +26,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGES. * - * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npereg.h,v 1.1 2006/11/19 23:55:23 sam Exp $ + * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npereg.h,v 1.2 2009/06/17 02:55:53 sam Exp $ */ /*- @@ -95,7 +95,6 @@ /* * Instruction and Data Memory Size (in words) for each NPE */ -#ifndef __ixp46X #define IX_NPEDL_INS_MEMSIZE_WORDS_NPEA 4096 #define IX_NPEDL_INS_MEMSIZE_WORDS_NPEB 2048 #define IX_NPEDL_INS_MEMSIZE_WORDS_NPEC 2048 @@ -103,15 +102,9 @@ #define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEA 2048 #define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEB 2048 #define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEC 2048 -#else -#define IX_NPEDL_INS_MEMSIZE_WORDS_NPEA 4096 -#define IX_NPEDL_INS_MEMSIZE_WORDS_NPEB 4096 -#define IX_NPEDL_INS_MEMSIZE_WORDS_NPEC 4096 -#define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEA 4096 -#define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEB 4096 -#define IX_NPEDL_DATA_MEMSIZE_WORDS_NPEC 4096 -#endif +#define IXP46X_NPEDL_INS_MEMSIZE_WORDS 4096 +#define IXP46X_NPEDL_DATA_MEMSIZE_WORDS 4096 /* BAR offsets */ #define IX_NPEDL_REG_OFFSET_EXAD 0x00000000 /* Execution Address */ ==== //depot/projects/soc2009/anchie_send/src/sys/arm/xscale/ixp425/ixp425var.h#2 (text+ko) ==== @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425var.h,v 1.6 2008/12/23 04:48:27 sam Exp $ + * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425var.h,v 1.7 2009/06/17 02:51:16 sam Exp $ * */ @@ -101,6 +101,7 @@ uint32_t ixp425_sdram_size(void); uint32_t ixp435_ddram_size(void); uint32_t ixp4xx_read_feature_bits(void); +void ixp4xx_write_feature_bits(uint32_t); int ixp425_md_route_interrupt(device_t, device_t, int); void ixp425_md_attach(device_t); ==== //depot/projects/soc2009/anchie_send/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c#3 (text+ko) ==== @@ -158,7 +158,7 @@ */ static int arc_min_prefetch_lifespan; -extern int zfs_prefetch_enable; +extern int zfs_prefetch_disable; static int arc_dead; /* @@ -3552,21 +3552,21 @@ mutex_init(&zfs_write_limit_lock, NULL, MUTEX_DEFAULT, NULL); #ifdef _KERNEL - if (TUNABLE_INT_FETCH("vfs.zfs.prefetch_enable", &zfs_prefetch_enable)) + if (TUNABLE_INT_FETCH("vfs.zfs.prefetch_disable", &zfs_prefetch_disable)) prefetch_tunable_set = 1; #ifdef __i386__ if (prefetch_tunable_set == 0) { printf("ZFS NOTICE: prefetch is disabled by default on i386" " - add enable to tunable to change.\n" ); - zfs_prefetch_enable=0; + zfs_prefetch_disable=1; } #else if ((((uint64_t)physmem * PAGESIZE) < (1ULL << 32)) && prefetch_tunable_set == 0) { printf("ZFS NOTICE: system has less than 4GB and prefetch enable is not set" "... disabling.\n"); - zfs_prefetch_enable=0; + zfs_prefetch_disable=1; } #endif /* Warn about ZFS memory and address space requirements. */ ==== //depot/projects/soc2009/anchie_send/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c#3 (text+ko) ==== @@ -326,7 +326,7 @@ uint64_t blkid; int nblks, i, err; - if (zfs_prefetch_enable == 0) + if (zfs_prefetch_disable) return; if (len == 0) { /* they're interested in the bonus buffer */ ==== //depot/projects/soc2009/anchie_send/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c#3 (text+ko) ==== @@ -37,7 +37,7 @@ * until we can get this working the way we want it to. */ -int zfs_prefetch_enable = 1; +int zfs_prefetch_disable = 0; /* max # of streams per zfetch */ uint32_t zfetch_max_streams = 8; @@ -49,8 +49,8 @@ uint64_t zfetch_array_rd_sz = 1024 * 1024; SYSCTL_DECL(_vfs_zfs); -SYSCTL_INT(_vfs_zfs, OID_AUTO, prefetch_enable, CTLFLAG_RDTUN, - &zfs_prefetch_enable, 0, "Enable prefetch for systems with less than 4GB"); +SYSCTL_INT(_vfs_zfs, OID_AUTO, prefetch_disable, CTLFLAG_RDTUN, + &zfs_prefetch_disable, 0, "Disable prefetch"); SYSCTL_NODE(_vfs_zfs, OID_AUTO, zfetch, CTLFLAG_RW, 0, "ZFS ZFETCH"); TUNABLE_INT("vfs.zfs.zfetch.max_streams", &zfetch_max_streams); SYSCTL_UINT(_vfs_zfs_zfetch, OID_AUTO, max_streams, CTLFLAG_RDTUN, @@ -598,7 +598,7 @@ unsigned int blkshft; uint64_t blksz; - if (zfs_prefetch_enable == 0) + if (zfs_prefetch_disable) return; /* files that aren't ln2 blocksz are only one block -- nothing to do */ ==== //depot/projects/soc2009/anchie_send/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h#3 (text+ko) ==== @@ -457,7 +457,7 @@ int dmu_write_pages(objset_t *os, uint64_t object, uint64_t offset, uint64_t size, struct page *pp, dmu_tx_t *tx); -extern int zfs_prefetch_enable; +extern int zfs_prefetch_disable; /* * Asynchronously try to read in the data. ==== //depot/projects/soc2009/anchie_send/src/sys/compat/freebsd32/freebsd32_proto.h#3 (text+ko) ==== @@ -2,8 +2,8 @@ * System call prototypes. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.102 2009/06/15 20:40:23 jhb Exp $ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 194262 2009-06-15 20:38:55Z jhb + * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.103 2009/06/17 19:53:47 jhb Exp $ + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 194390 2009-06-17 19:50:38Z jhb */ #ifndef _FREEBSD32_SYSPROTO_H_ ==== //depot/projects/soc2009/anchie_send/src/sys/compat/freebsd32/freebsd32_syscall.h#3 (text+ko) ==== @@ -2,8 +2,8 @@ * System call numbers. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscall.h,v 1.101 2009/06/15 20:40:23 jhb Exp $ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 194262 2009-06-15 20:38:55Z jhb + * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscall.h,v 1.102 2009/06/17 19:53:47 jhb Exp $ + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 194390 2009-06-17 19:50:38Z jhb */ #define FREEBSD32_SYS_syscall 0 ==== //depot/projects/soc2009/anchie_send/src/sys/compat/freebsd32/freebsd32_syscalls.c#3 (text+ko) ==== @@ -2,8 +2,8 @@ * System call names. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscalls.c,v 1.92 2009/06/15 20:40:23 jhb Exp $ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 194262 2009-06-15 20:38:55Z jhb + * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscalls.c,v 1.93 2009/06/17 19:53:47 jhb Exp $ + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 194390 2009-06-17 19:50:38Z jhb */ const char *freebsd32_syscallnames[] = { @@ -25,7 +25,7 @@ "chmod", /* 15 = chmod */ "chown", /* 16 = chown */ "break", /* 17 = break */ - "compat4.freebsd32_getfsstat", /* 18 = old freebsd32_getfsstat */ + "compat4.freebsd32_getfsstat", /* 18 = freebsd4 freebsd32_getfsstat */ >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Sun Jun 21 10:30:44 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A61EA1065679; Sun, 21 Jun 2009 10:30:44 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 63FF31065675 for ; Sun, 21 Jun 2009 10:30:44 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 37C758FC0C for ; Sun, 21 Jun 2009 10:30:44 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LAUiLg080189 for ; Sun, 21 Jun 2009 10:30:44 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LAUigV080187 for perforce@freebsd.org; Sun, 21 Jun 2009 10:30:44 GMT (envelope-from pgj@FreeBSD.org) Date: Sun, 21 Jun 2009 10:30:44 GMT Message-Id: <200906211030.n5LAUigV080187@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 164803 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 10:30:45 -0000 http://perforce.freebsd.org/chv.cgi?CH=164803 Change 164803 by pgj@beehive on 2009/06/21 10:30:23 MFen (doc): 1.131 -> 1.132 hu_HU.ISO8859-2/books/handbook/multimedia/chapter.sgml Affected files ... .. //depot/projects/docproj_hu/doc/hu_HU.ISO8859-2/books/handbook/multimedia/chapter.sgml#8 edit Differences ... ==== //depot/projects/docproj_hu/doc/hu_HU.ISO8859-2/books/handbook/multimedia/chapter.sgml#8 (text+ko) ==== @@ -7,7 +7,7 @@ @@ -672,10 +672,14 @@ Az mpg123 futtatásához paraméterként meg kell adnunk a hangeszközt és lejátszandó - MP3 állományt, ahogy ez a példában - is látható: + MP3 állományt. Ha a hangeszközünk a + /dev/dsp1.0 és a + IzéMizé-Sláger.mp3 + nevû MP3 állományt akarjuk rajta + lejátszatni, akkor a következõt kell + begépelnünk: - &prompt.root; mpg123 -a /dev/dsp1.0 IzéMizé-Sláger.mp3 + &prompt.root; mpg123 -a /dev/dsp1.0 IzéMizé-Sláger.mp3 High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2 and 3. Version 0.59r (1999/Jun/15). Written and copyrights by Michael Hipp. Uses code from various people. See 'README' for more! @@ -688,12 +692,6 @@ Playing MPEG stream from IzéMizé-Sláger.mp3 ... MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo - - Itt a - /dev/dsp1.0 - nevet ne felejtsük el kicserélni a - rendszerünkben található - dsp eszköz nevével. From owner-p4-projects@FreeBSD.ORG Sun Jun 21 14:08:44 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4A6211065674; Sun, 21 Jun 2009 14:08:43 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0A2911065672 for ; Sun, 21 Jun 2009 14:08:43 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id EACDD8FC08 for ; Sun, 21 Jun 2009 14:08:42 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LE8gJF010764 for ; Sun, 21 Jun 2009 14:08:42 GMT (envelope-from gk@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LE8ggF010762 for perforce@freebsd.org; Sun, 21 Jun 2009 14:08:42 GMT (envelope-from gk@FreeBSD.org) Date: Sun, 21 Jun 2009 14:08:42 GMT Message-Id: <200906211408.n5LE8ggF010762@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gk@FreeBSD.org using -f From: Gleb Kurtsou To: Perforce Change Reviews Cc: Subject: PERFORCE change 164811 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 14:08:44 -0000 http://perforce.freebsd.org/chv.cgi?CH=164811 Change 164811 by gk@gk_h1 on 2009/06/21 14:07:54 add rest of vops. support not block aligned read/write. handle file resize. rename to be more consistens, cleanup Affected files ... .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs.h#3 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_subr.c#3 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_vfsops.c#2 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_vnops.c#3 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_xbase64.c#2 edit .. //depot/projects/soc2009/gk_pefs/sys/modules/pefs/Makefile#3 edit Differences ... ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs.h#3 (text+ko) ==== @@ -39,62 +39,81 @@ #include -struct pe_mount { - struct mount *pem_vfs; - struct vnode *pem_rootvp; /* Reference to root pe_node */ +struct pefs_mount { + struct mount *pm_vfs; + struct vnode *pm_rootvp; /* Reference to root pefs_node */ }; #ifdef _KERNEL + +#define PEFS_BLOCK 16 + /* * A cache of vnode references */ -struct pe_node { - LIST_ENTRY(pe_node) pe_hash; /* Hash list */ - struct vnode *pe_lowervp; /* VREFed once */ - struct vnode *pe_vnode; /* Back pointer */ +struct pefs_node { + LIST_ENTRY(pefs_node) pn_hash; /* Hash list */ + struct vnode *pn_lowervp; /* VREFed once */ + struct vnode *pn_vnode; /* Back pointer */ }; -struct pe_xuio { - struct uio xuio_uio; - void **xuio_bases; +struct pefs_chunk { + int pc_iovcnt; + int pc_basescnt; + struct iovec *pc_iov; + int pc_size; + void **pc_bases; + struct uio pc_uio; }; -typedef void (*pe_tr)(void *mem, size_t size, void *arg); +typedef void (*pefs_tr)(void *mem, size_t size, void *arg); -#define MOUNTTOPEMOUNT(mp) ((struct pe_mount *)((mp)->mnt_data)) -#define VTOPE(vp) ((struct pe_node *)(vp)->v_data) -#define PETOV(xp) ((xp)->pe_vnode) +#define MOUNTTOPEMOUNT(mp) ((struct pefs_mount *)((mp)->mnt_data)) +#define VTOPE(vp) ((struct pefs_node *)(vp)->v_data) +#define PETOV(xp) ((xp)->pn_vnode) struct vfsconf; struct vop_generic_args; int pefs_init(struct vfsconf *vfsp); int pefs_uninit(struct vfsconf *vfsp); -int pe_nodeget(struct mount *mp, struct vnode *target, struct vnode **vpp); -void pe_hashrem(struct pe_node *xp); -int pe_bypass(struct vop_generic_args *ap); -struct pe_xuio* pe_xuio_create(struct uio* uio); -void pe_xuio_finish(struct pe_xuio* xuio, struct uio *src); -void pe_xuio_transfrom(struct pe_xuio *xuio, struct uio *src, pe_tr tr, void *arg); -int pe_name_encrypt(const char *plain, size_t plain_len, char *enc, size_t enc_size); -int pe_name_decrypt(const char *enc, size_t enc_len, char *plain, size_t plain_size); +int pefs_nodeget(struct mount *mp, struct vnode *target, struct vnode **vpp); +void pefs_hashrem(struct pefs_node *xp); +int pefs_bypass(struct vop_generic_args *ap); +int pefs_name_encrypt(const char *plain, size_t plain_len, char *enc, size_t enc_size); +int pefs_name_decrypt(const char *enc, size_t enc_len, char *plain, size_t plain_size); + +void pefs_xor(void *mem, size_t size); + +#define PEFS_NAME_NTOP_SIZE(a) (((a) * 4 + 2)/3) +#define PEFS_NAME_PTON_SIZE(a) (((a) * 3)/4) +int pefs_name_ntop(u_char const *src, size_t srclength, char *target, size_t targsize); +int pefs_name_pton(char const *src, size_t srclen, u_char *target, size_t targsize); -void pe_xor(void *mem, size_t size, void *arg); +void pefs_xor_chunk(struct pefs_chunk *pc); -int pe_b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize); -int pe_b64_pton(char const *src, size_t srclen, u_char *target, size_t targsize); +struct pefs_chunk* pefs_chunk_create(size_t size); +void pefs_chunk_free(struct pefs_chunk* pc); +struct uio* pefs_chunk_uio(struct pefs_chunk *pc, off_t uio_offset, enum uio_rw uio_rw); +struct uio* pefs_chunk_uio_range(struct pefs_chunk *pc, size_t skip, size_t size, off_t uio_offset, enum uio_rw uio_rw); +void* pefs_chunk_get(struct pefs_chunk *pc, size_t *size, long *_state); +void pefs_chunk_zero(struct pefs_chunk *pc); +int pefs_chunk_copy(struct pefs_chunk *pc, size_t skip, struct uio *uio); +void pefs_chunk_crop(struct pefs_chunk *pc, size_t skip_begin, size_t skip_end); +void pefs_chunk_shrink(struct pefs_chunk *pc, size_t size); #ifdef DIAGNOSTIC -struct vnode *pe_checkvp(struct vnode *vp, char *fil, int lno); -#define PEVPTOLOWERVP(vp) pe_checkvp((vp), __FILE__, __LINE__) +struct vnode *pefs_checkvp(struct vnode *vp, char *fil, int lno); +#define PEVPTOLOWERVP(vp) pefs_checkvp((vp), __FILE__, __LINE__) #else -#define PEVPTOLOWERVP(vp) (VTOPE(vp)->pe_lowervp) +#define PEVPTOLOWERVP(vp) (VTOPE(vp)->pn_lowervp) #endif -extern struct vop_vector pe_vnodeops; +extern struct vop_vector pefs_vnodeops; #ifdef MALLOC_DECLARE MALLOC_DECLARE(M_PEFSNODE); +MALLOC_DECLARE(M_PEFSBUF); #endif #ifdef PEFS_DEBUG ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_subr.c#3 (text+ko) ==== @@ -61,31 +61,27 @@ * alias is removed the lower vnode is vrele'd. */ -#define PE_NHASH(vp) \ - (&pe_node_hashtbl[(((uintptr_t)vp)>>LOG2_SIZEVNODE) & pe_node_hash]) +#define PEFS_NHASH(vp) \ + (&pefs_node_hashtbl[(((uintptr_t)vp)>>LOG2_SIZEVNODE) & pefs_node_hash]) -static LIST_HEAD(pe_node_hashhead, pe_node) *pe_node_hashtbl; -static u_long pe_node_hash; -struct mtx pe_hashmtx; +static LIST_HEAD(pefs_node_hashhead, pefs_node) *pefs_node_hashtbl; +static u_long pefs_node_hash; +struct mtx pefs_hashmtx; static MALLOC_DEFINE(M_PEFSHASH, "pefs_hash", "PEFS hash table"); MALLOC_DEFINE(M_PEFSNODE, "pefs_node", "PEFS vnode private part"); -static MALLOC_DEFINE(M_PEFSBUF, "pefs_buf", "PEFS buffers"); +MALLOC_DEFINE(M_PEFSBUF, "pefs_buf", "PEFS buffers"); -static struct vnode * pe_hashget(struct mount *, struct vnode *); -static struct vnode * pe_hashins(struct mount *, struct pe_node *); - /* * Initialise cache headers */ int -pefs_init(vfsp) - struct vfsconf *vfsp; +pefs_init(struct vfsconf *vfsp) { PEFSDEBUG("pefs_init\n"); /* printed during system boot */ - pe_node_hashtbl = hashinit(NPENODECACHE, M_PEFSHASH, &pe_node_hash); - mtx_init(&pe_hashmtx, "pehs", NULL, MTX_DEF); + pefs_node_hashtbl = hashinit(NPENODECACHE, M_PEFSHASH, &pefs_node_hash); + mtx_init(&pefs_hashmtx, "pehs", NULL, MTX_DEF); return (0); } @@ -94,8 +90,8 @@ struct vfsconf *vfsp; { - mtx_destroy(&pe_hashmtx); - free(pe_node_hashtbl, M_PEFSHASH); + mtx_destroy(&pefs_hashmtx); + free(pefs_node_hashtbl, M_PEFSHASH); return (0); } @@ -104,26 +100,24 @@ * Lower vnode should be locked on entry and will be left locked on exit. */ static struct vnode * -pe_hashget(mp, lowervp) - struct mount *mp; - struct vnode *lowervp; +pefs_hashget(struct mount *mp, struct vnode *lowervp) { - struct pe_node_hashhead *hd; - struct pe_node *a; + struct pefs_node_hashhead *hd; + struct pefs_node *a; struct vnode *vp; - ASSERT_VOP_LOCKED(lowervp, "pe_hashget"); + ASSERT_VOP_LOCKED(lowervp, "pefs_hashget"); /* * Find hash base, and then search the (two-way) linked - * list looking for a pe_node structure which is referencing - * the lower vnode. If found, the increment the pe_node + * list looking for a pefs_node structure which is referencing + * the lower vnode. If found, the increment the pefs_node * reference count (but NOT the lower vnode's VREF counter). */ - hd = PE_NHASH(lowervp); - mtx_lock(&pe_hashmtx); - LIST_FOREACH(a, hd, pe_hash) { - if (a->pe_lowervp == lowervp && PETOV(a)->v_mount == mp) { + hd = PEFS_NHASH(lowervp); + mtx_lock(&pefs_hashmtx); + LIST_FOREACH(a, hd, pn_hash) { + if (a->pn_lowervp == lowervp && PETOV(a)->v_mount == mp) { /* * Since we have the lower node locked the pefs * node can not be in the process of recycling. If @@ -132,49 +126,47 @@ */ vp = PETOV(a); vref(vp); - mtx_unlock(&pe_hashmtx); + mtx_unlock(&pefs_hashmtx); return (vp); } } - mtx_unlock(&pe_hashmtx); + mtx_unlock(&pefs_hashmtx); return (NULLVP); } /* - * Act like pe_hashget, but add passed pe_node to hash if no existing + * Act like pefs_hashget, but add passed pefs_node to hash if no existing * node found. */ static struct vnode * -pe_hashins(mp, xp) - struct mount *mp; - struct pe_node *xp; +pefs_hashins(struct mount *mp, struct pefs_node *xp) { - struct pe_node_hashhead *hd; - struct pe_node *oxp; + struct pefs_node_hashhead *hd; + struct pefs_node *oxp; struct vnode *ovp; - hd = PE_NHASH(xp->pe_lowervp); - mtx_lock(&pe_hashmtx); - LIST_FOREACH(oxp, hd, pe_hash) { - if (oxp->pe_lowervp == xp->pe_lowervp && + hd = PEFS_NHASH(xp->pn_lowervp); + mtx_lock(&pefs_hashmtx); + LIST_FOREACH(oxp, hd, pn_hash) { + if (oxp->pn_lowervp == xp->pn_lowervp && PETOV(oxp)->v_mount == mp) { /* - * See pe_hashget for a description of this + * See pefs_hashget for a description of this * operation. */ ovp = PETOV(oxp); vref(ovp); - mtx_unlock(&pe_hashmtx); + mtx_unlock(&pefs_hashmtx); return (ovp); } } - LIST_INSERT_HEAD(hd, xp, pe_hash); - mtx_unlock(&pe_hashmtx); + LIST_INSERT_HEAD(hd, xp, pn_hash); + mtx_unlock(&pefs_hashmtx); return (NULLVP); } static void -pe_insmntque_dtr(struct vnode *vp, void *xp) +pefs_insmntque_dtr(struct vnode *vp, void *xp) { vp->v_data = NULL; vp->v_vnlock = &vp->v_lock; @@ -194,17 +186,14 @@ * the caller's "spare" reference to created pefs vnode. */ int -pe_nodeget(mp, lowervp, vpp) - struct mount *mp; - struct vnode *lowervp; - struct vnode **vpp; +pefs_nodeget(struct mount *mp, struct vnode *lowervp, struct vnode **vpp) { - struct pe_node *xp; + struct pefs_node *xp; struct vnode *vp; int error; /* Lookup the hash firstly */ - *vpp = pe_hashget(mp, lowervp); + *vpp = pefs_hashget(mp, lowervp); if (*vpp != NULL) { vrele(lowervp); return (0); @@ -223,34 +212,34 @@ * might cause a bogus v_data pointer to get dereferenced * elsewhere if MALLOC should block. */ - xp = malloc(sizeof(struct pe_node), + xp = malloc(sizeof(struct pefs_node), M_PEFSNODE, M_WAITOK); - error = getnewvnode("null", mp, &pe_vnodeops, &vp); + error = getnewvnode("pefs", mp, &pefs_vnodeops, &vp); if (error) { free(xp, M_PEFSNODE); return (error); } - xp->pe_vnode = vp; - xp->pe_lowervp = lowervp; + xp->pn_vnode = vp; + xp->pn_lowervp = lowervp; vp->v_type = lowervp->v_type; vp->v_data = xp; vp->v_vnlock = lowervp->v_vnlock; if (vp->v_vnlock == NULL) - panic("pe_nodeget: Passed a NULL vnlock.\n"); - error = insmntque1(vp, mp, pe_insmntque_dtr, xp); + panic("pefs_nodeget: Passed a NULL vnlock.\n"); + error = insmntque1(vp, mp, pefs_insmntque_dtr, xp); if (error != 0) return (error); /* * Atomically insert our new node into the hash or vget existing * if someone else has beaten us to it. */ - *vpp = pe_hashins(mp, xp); + *vpp = pefs_hashins(mp, xp); if (*vpp != NULL) { vrele(lowervp); vp->v_vnlock = &vp->v_lock; - xp->pe_lowervp = NULL; + xp->pn_lowervp = NULL; vrele(vp); return (0); } @@ -263,17 +252,16 @@ * Remove node from hash. */ void -pe_hashrem(xp) - struct pe_node *xp; +pefs_hashrem(struct pefs_node *xp) { - mtx_lock(&pe_hashmtx); - LIST_REMOVE(xp, pe_hash); - mtx_unlock(&pe_hashmtx); + mtx_lock(&pefs_hashmtx); + LIST_REMOVE(xp, pn_hash); + mtx_unlock(&pefs_hashmtx); } void -pe_xor(void *mem, size_t size, void *arg) +pefs_xor(void *mem, size_t size) { char *b = (char *)mem; char *e = b + size; @@ -283,8 +271,23 @@ } } +void +pefs_xor_chunk(struct pefs_chunk *pc) +{ + long arg = 0; + char *mem; + size_t size; + + while (1) { + mem = pefs_chunk_get(pc, &size, &arg); + if (mem == NULL) + break; + pefs_xor(mem, size); + } +} + int -pe_name_encrypt(const char *plain, size_t plain_len, char *enc, size_t enc_size) +pefs_name_encrypt(const char *plain, size_t plain_len, char *enc, size_t enc_size) { char b_static[64]; char *b; @@ -298,123 +301,236 @@ // FIXME for (int i = 0; i < plain_len; i++) b[i] ^= 0xAA; - r = pe_b64_ntop(b, plain_len, enc, enc_size); - printf("pe_name_encrypt: %d; %.*s => %.*s\n", r, plain_len, plain, r, enc); + r = pefs_name_ntop(b, plain_len, enc, enc_size); + // printf("pefs_name_encrypt: %d; %.*s => %.*s\n", r, plain_len, plain, r, enc); if (b != b_static) free(b, M_PEFSBUF); return r; } int -pe_name_decrypt(const char *enc, size_t enc_len, char *plain, size_t plain_size) +pefs_name_decrypt(const char *enc, size_t enc_len, char *plain, size_t plain_size) { int r; - r = pe_b64_pton(enc, enc_len, plain, plain_size); + r = pefs_name_pton(enc, enc_len, plain, plain_size); if (r > 0) { // FIXME for (int i = 0; i < r; i++) plain[i] ^= 0xAA; } - printf("pe_name_decrypt: %d; %.*s => %.*s\n", r, enc_len, enc, r < 0 ? 0 : r, plain); + if (r < plain_size) + plain[r] = '\0'; + // printf("pefs_name_decrypt: %d; %.*s => %.*s\n", r, enc_len, enc, r < 0 ? 0 : r, plain); return r; } -struct pe_xuio* -pe_xuio_create(struct uio* uio) +struct pefs_chunk* +pefs_chunk_create(size_t size) +{ + struct pefs_chunk *pc; + int iovcnt; + + iovcnt = (size + PAGE_SIZE - 1) / PAGE_SIZE; + PEFSDEBUG("%s: length=%u; iovcnt=%d\n", __func__, size, iovcnt); + pc = malloc(sizeof(struct pefs_chunk) + (sizeof(void*) + sizeof(struct iovec) * 2) * iovcnt, + M_PEFSBUF, M_WAITOK | M_ZERO); + + pc->pc_size = size; + pc->pc_iovcnt = iovcnt; + pc->pc_basescnt = iovcnt; + pc->pc_bases = (void **)(pc + 1); + pc->pc_iov = (struct iovec *)(pc->pc_bases + iovcnt); + pc->pc_uio.uio_iov = (struct iovec *)(pc->pc_iov + iovcnt); + + for (int i = 0; i < iovcnt && size > 0; i++) { + int len = imin(PAGE_SIZE, size); + pc->pc_iov[i].iov_len = len; + pc->pc_bases[i] = malloc(len, M_PEFSBUF, M_WAITOK | M_ZERO); + pc->pc_iov[i].iov_base = pc->pc_bases[i]; + size -= len; + } + if (size != 0) + panic("pefs_chunk initialization error\n"); + + return (pc); +} + +void +pefs_chunk_free(struct pefs_chunk* pc) +{ + for (int i = 0; i < pc->pc_basescnt; i++) { + free(pc->pc_bases[i], M_PEFSBUF); + } + free(pc, M_PEFSBUF); +} + +struct uio* +pefs_chunk_uio(struct pefs_chunk *pc, off_t uio_offset, enum uio_rw uio_rw) +{ + return pefs_chunk_uio_range(pc, 0, pc->pc_size, uio_offset, uio_rw); +} + +struct uio* +pefs_chunk_uio_range(struct pefs_chunk *pc, size_t skip, size_t size, off_t uio_offset, enum uio_rw uio_rw) { - struct pe_xuio *xuio; - size_t len; - int iov_cnt; + int skip_iov, i; - len = 0; - for (int i = 0; i < uio->uio_iovcnt; i++) { - len += uio->uio_iov[i].iov_len; + KASSERT(pc->pc_size >= size + skip, ("invalid range value")); + /* skip */ + for (skip_iov = 0; skip_iov < pc->pc_iovcnt && skip; skip_iov++) { + if (skip < pc->pc_iov[skip_iov].iov_len) + break; + else + skip -= pc->pc_iov[skip_iov].iov_len; } - iov_cnt = (len + PAGE_SIZE - 1) / PAGE_SIZE; - xuio = malloc(sizeof(struct pe_xuio) + (sizeof(void*) + sizeof(struct iovec)) * iov_cnt, - M_PEFSBUF, M_WAITOK); - xuio->xuio_uio = *uio; - xuio->xuio_uio.uio_segflg = UIO_SYSSPACE; - xuio->xuio_uio.uio_iov = (struct iovec *)(xuio + 1); - xuio->xuio_bases = (void **)(xuio->xuio_uio.uio_iov + iov_cnt); - for (int i = 0; i < iov_cnt; i++) { - xuio->xuio_uio.uio_iov[i].iov_len = imin(PAGE_SIZE, len); - len -= PAGE_SIZE; - xuio->xuio_bases[i] = xuio->xuio_uio.uio_iov[i].iov_base = - malloc(xuio->xuio_uio.uio_iov[i].iov_len, M_PEFSBUF, M_WAITOK); + pc->pc_uio.uio_offset = uio_offset; + pc->pc_uio.uio_resid = size; + pc->pc_uio.uio_rw = uio_rw; + pc->pc_uio.uio_segflg = UIO_SYSSPACE; + pc->pc_uio.uio_td = curthread; + + for (i = 0; skip_iov + i < pc->pc_iovcnt && size; i++) { + pc->pc_uio.uio_iov[i].iov_base = (char *)pc->pc_iov[skip_iov + i].iov_base + skip; + pc->pc_uio.uio_iov[i].iov_len = min(size, pc->pc_iov[skip_iov + i].iov_len - skip); + size -= pc->pc_uio.uio_iov[i].iov_len; + skip = 0; + printf("%s: creating iov: i=%d; len=%d; base=%p\n", __func__, i, + pc->pc_uio.uio_iov[i].iov_len, pc->pc_uio.uio_iov[i].iov_base); } + pc->pc_uio.uio_iovcnt = i; + + return (&pc->pc_uio); +} - return (xuio); +void* +pefs_chunk_get(struct pefs_chunk *pc, size_t *size, long *state) +{ + void *mem; + + if (!size || !state || *state < 0) + panic("invalid args"); + if (*state >= pc->pc_iovcnt) { + *size = 0; + return (NULL); + } + mem = pc->pc_iov[*state].iov_base; + *size = pc->pc_iov[*state].iov_len; + (*state)++; + return (mem); } void -pe_xuio_finish(struct pe_xuio* xuio, struct uio *src) +pefs_chunk_zero(struct pefs_chunk *pc) +{ + int i; + + for (i = 0; i < pc->pc_iovcnt; i++) { + bzero(pc->pc_iov[i].iov_base, pc->pc_iov[i].iov_len); + } +} + +int +pefs_chunk_copy(struct pefs_chunk *pc, size_t skip, struct uio *uio) { - src->uio_offset = xuio->xuio_uio.uio_offset; - src->uio_resid = xuio->xuio_uio.uio_resid; - for (int i = 0; i < xuio->xuio_uio.uio_iovcnt; i++) { - free(xuio->xuio_bases[i], M_PEFSBUF); + int i; + int error; + + KASSERT(pc->pc_size >= skip, ("invalid range value")); + /* skip */ + for (i = 0; i < pc->pc_iovcnt && skip; i++) { + if (skip < pc->pc_iov[i].iov_len) + break; + else + skip -= pc->pc_iov[i].iov_len; + } + + for (; i < pc->pc_iovcnt && uio->uio_resid; i++) { + error = uiomove((char *)pc->pc_iov[i].iov_base + skip, pc->pc_iov[i].iov_len - skip, uio); + if (error) + return (error); + skip = 0; } - free(xuio, M_PEFSBUF); + return (0); } void -pe_xuio_transfrom(struct pe_xuio *_xuio, struct uio *src, pe_tr tr, void *arg) +pefs_chunk_crop(struct pefs_chunk *pc, size_t skip_begin, size_t skip_end) { - struct uio *xuio = &_xuio->xuio_uio; + + KASSERT(pc->pc_size >= skip_begin + skip_end, ("invalid range value")); + + if (skip_begin + skip_end == 0) + return; + + PEFSDEBUG("%s: skip_begin=%d; skip_end=%d; size=%d\n", __func__, + skip_begin, skip_end, pc->pc_size); + + for (int i = 0; i < pc->pc_iovcnt && skip_begin; i++) { + struct iovec *iov = &pc->pc_iov[i]; - KASSERT(xuio->uio_segflg == UIO_SYSSPACE && xuio->uio_rw == src->uio_rw, - ("pe_uio_transfrom")); - for (int i = 0; i < xuio->uio_iovcnt; i++) { - int n; - void *base = xuio->uio_iov[i].iov_base; + if (skip_begin < iov->iov_len) { + pc->pc_size -= skip_begin; + iov->iov_base = (char *)iov->iov_base + skip_begin; + iov->iov_len -= skip_begin; + skip_begin = 0; + break; + } else { + pc->pc_size -= iov->iov_len; + skip_begin -= iov->iov_len; + pc->pc_iovcnt--; + i--; + pc->pc_iov++; + } + } + for (int i = pc->pc_iovcnt - 1; i >= 0 && skip_end; i--) { + struct iovec *iov = &pc->pc_iov[i]; - if (xuio->uio_rw == UIO_READ) { - n = src->uio_iov[i].iov_len - xuio->uio_iov[i].iov_len; - base = ((caddr_t) base) - n; + if (skip_end < iov->iov_len) { + pc->pc_size -= skip_end; + iov->iov_len -= skip_end; + skip_end = 0; + break; } else { - n = src->uio_iov[i].iov_len; + pc->pc_size -= iov->iov_len; + skip_end -= iov->iov_len; + pc->pc_iovcnt--; } - if (xuio->uio_rw == UIO_WRITE) - uiomove(base, n, src); - if (tr) - tr(base, n, arg); - if (xuio->uio_rw == UIO_READ) - uiomove(base, n, src); } } +void +pefs_chunk_shrink(struct pefs_chunk *pc, size_t size) +{ + pefs_chunk_crop(pc, 0, pc->pc_size - size); +} #ifdef DIAGNOSTIC #ifdef KDB -#define pe_checkvp_barrier 1 +#define pefs_checkvp_barrier 1 #else -#define pe_checkvp_barrier 0 +#define pefs_checkvp_barrier 0 #endif struct vnode * -pe_checkvp(vp, fil, lno) - struct vnode *vp; - char *fil; - int lno; +pefs_checkvp(struct vnode *vp, char *fil, int lno) { int interlock = 0; - struct pe_node *a = VTOPE(vp); + struct pefs_node *a = VTOPE(vp); #ifdef notyet /* * Can't do this check because vop_reclaim runs * with a funny vop vector. */ - if (vp->v_op != pe_vnodeop_p) { - printf ("pe_checkvp: on non-null-node\n"); - while (pe_checkvp_barrier) /*WAIT*/ ; - panic("pe_checkvp"); + if (vp->v_op != pefs_vnodeop_p) { + printf ("pefs_checkvp: on non-null-node\n"); + while (pefs_checkvp_barrier) /*WAIT*/ ; + panic("pefs_checkvp"); }; #endif - if (a->pe_lowervp == NULLVP) { + if (a->pefs_lowervp == NULLVP) { /* Should never happen */ int i; u_long *p; printf("vp = %p, ZERO ptr\n", (void *)vp); @@ -422,21 +538,21 @@ printf(" %lx", p[i]); printf("\n"); /* wait for debugger */ - while (pe_checkvp_barrier) /*WAIT*/ ; - panic("pe_checkvp"); + while (pefs_checkvp_barrier) /*WAIT*/ ; + panic("pefs_checkvp"); } if (mtx_owned(VI_MTX(vp)) != 0) { VI_UNLOCK(vp); interlock = 1; } - if (vrefcnt(a->pe_lowervp) < 1) { + if (vrefcnt(a->pefs_lowervp) < 1) { int i; u_long *p; printf("vp = %p, unref'ed lowervp\n", (void *)vp); for (p = (u_long *) a, i = 0; i < 8; i++) printf(" %lx", p[i]); printf("\n"); /* wait for debugger */ - while (pe_checkvp_barrier) /*WAIT*/ ; + while (pefs_checkvp_barrier) /*WAIT*/ ; panic ("null with unref'ed lowervp"); }; if (interlock != 0) @@ -444,9 +560,9 @@ #ifdef notyet printf("null %x/%d -> %x/%d [%s, %d]\n", PETOV(a), vrefcnt(PETOV(a)), - a->pe_lowervp, vrefcnt(a->pe_lowervp), + a->pn_lowervp, vrefcnt(a->pn_lowervp), fil, lno); #endif - return a->pe_lowervp; + return a->pn_lowervp; } #endif ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_vfsops.c#2 (text+ko) ==== @@ -38,11 +38,6 @@ * $FreeBSD$ */ -/* - * Null Layer - * (See pe_vnops.c for a description of what this does.) - */ - #include #include #include @@ -58,16 +53,6 @@ static MALLOC_DEFINE(M_PEFSMNT, "pefs_mount", "PEFS mount structure"); -static vfs_fhtovp_t pefs_fhtovp; -static vfs_mount_t pefs_mount; -static vfs_quotactl_t pefs_quotactl; -static vfs_root_t pefs_root; -static vfs_sync_t pefs_sync; -static vfs_statfs_t pefs_statfs; -static vfs_unmount_t pefs_unmount; -static vfs_vget_t pefs_vget; -static vfs_extattrctl_t pefs_extattrctl; - /* * Mount null layer */ @@ -76,8 +61,8 @@ { int error = 0; struct vnode *lowerrootvp, *vp; - struct vnode *pem_rootvp; - struct pe_mount *xmp; + struct vnode *pm_rootvp; + struct pefs_mount *xmp; char *target; int isvnunlocked = 0, len; struct nameidata nd, *ndp = &nd; @@ -110,7 +95,7 @@ * Unlock lower node to avoid deadlock. * (XXX) VOP_ISLOCKED is needed? */ - if ((mp->mnt_vnodecovered->v_op == &pe_vnodeops) && + if ((mp->mnt_vnodecovered->v_op == &pefs_vnodeops) && VOP_ISLOCKED(mp->mnt_vnodecovered)) { VOP_UNLOCK(mp->mnt_vnodecovered, 0); isvnunlocked = 1; @@ -138,25 +123,25 @@ /* * Check multi null mount to avoid `lock against myself' panic. */ - if (lowerrootvp == VTOPE(mp->mnt_vnodecovered)->pe_lowervp) { + if (lowerrootvp == VTOPE(mp->mnt_vnodecovered)->pn_lowervp) { PEFSDEBUG("pefs_mount: multi null mount?\n"); vput(lowerrootvp); return (EDEADLK); } - xmp = (struct pe_mount *) malloc(sizeof(struct pe_mount), + xmp = (struct pefs_mount *) malloc(sizeof(struct pefs_mount), M_PEFSMNT, M_WAITOK); /* XXX */ /* * Save reference to underlying FS */ - xmp->pem_vfs = lowerrootvp->v_mount; + xmp->pm_vfs = lowerrootvp->v_mount; /* * Save reference. Each mount also holds * a reference on the root vnode. */ - error = pe_nodeget(mp, lowerrootvp, &vp); + error = pefs_nodeget(mp, lowerrootvp, &vp); /* * Make sure the node alias worked */ @@ -171,16 +156,16 @@ * Keep a held reference to the root vnode. * It is vrele'd in pefs_unmount. */ - pem_rootvp = vp; - pem_rootvp->v_vflag |= VV_ROOT; - xmp->pem_rootvp = pem_rootvp; + pm_rootvp = vp; + pm_rootvp->v_vflag |= VV_ROOT; + xmp->pm_rootvp = pm_rootvp; /* * Unlock the node (either the lower or the alias) */ VOP_UNLOCK(vp, 0); - if (PEVPTOLOWERVP(pem_rootvp)->v_mount->mnt_flag & MNT_LOCAL) { + if (PEVPTOLOWERVP(pm_rootvp)->v_mount->mnt_flag & MNT_LOCAL) { MNT_ILOCK(mp); mp->mnt_flag |= MNT_LOCAL; MNT_IUNLOCK(mp); @@ -202,9 +187,7 @@ * Free reference to null layer */ static int -pefs_unmount(mp, mntflags) - struct mount *mp; - int mntflags; +pefs_unmount(struct mount *mp, int mntflags) { void *mntdata; int error; @@ -215,13 +198,13 @@ if (mntflags & MNT_FORCE) flags |= FORCECLOSE; - /* There is 1 extra root vnode reference (pem_rootvp). */ + /* There is 1 extra root vnode reference (pm_rootvp). */ error = vflush(mp, 1, flags, curthread); if (error) return (error); /* - * Finally, throw away the pe_mount structure + * Finally, throw away the pefs_mount structure */ mntdata = mp->mnt_data; mp->mnt_data = 0; @@ -230,24 +213,21 @@ } static int -pefs_root(mp, flags, vpp) - struct mount *mp; - int flags; - struct vnode **vpp; +pefs_root(struct mount *mp, int flags, struct vnode **vpp) { struct vnode *vp; PEFSDEBUG("pefs_root(mp = %p, vp = %p->%p)\n", (void *)mp, - (void *)MOUNTTOPEMOUNT(mp)->pem_rootvp, - (void *)PEVPTOLOWERVP(MOUNTTOPEMOUNT(mp)->pem_rootvp)); + (void *)MOUNTTOPEMOUNT(mp)->pm_rootvp, + (void *)PEVPTOLOWERVP(MOUNTTOPEMOUNT(mp)->pm_rootvp)); /* * Return locked reference to root. */ - vp = MOUNTTOPEMOUNT(mp)->pem_rootvp; + vp = MOUNTTOPEMOUNT(mp)->pm_rootvp; VREF(vp); -#ifdef PEFS_DEBUG +#ifdef PEFSXXX_DEBUG if (VOP_ISLOCKED(vp)) panic("root vnode is locked.\n"); #endif @@ -257,30 +237,24 @@ } static int -pefs_quotactl(mp, cmd, uid, arg) - struct mount *mp; - int cmd; - uid_t uid; - void *arg; +pefs_quotactl(struct mount *mp, int cmd, uid_t uid, void *arg) { - return VFS_QUOTACTL(MOUNTTOPEMOUNT(mp)->pem_vfs, cmd, uid, arg); + return VFS_QUOTACTL(MOUNTTOPEMOUNT(mp)->pm_vfs, cmd, uid, arg); } static int -pefs_statfs(mp, sbp) - struct mount *mp; - struct statfs *sbp; +pefs_statfs(struct mount *mp, struct statfs *sbp) { int error; struct statfs mstat; PEFSDEBUG("pefs_statfs(mp = %p, vp = %p->%p)\n", (void *)mp, - (void *)MOUNTTOPEMOUNT(mp)->pem_rootvp, - (void *)PEVPTOLOWERVP(MOUNTTOPEMOUNT(mp)->pem_rootvp)); + (void *)MOUNTTOPEMOUNT(mp)->pm_rootvp, + (void *)PEVPTOLOWERVP(MOUNTTOPEMOUNT(mp)->pm_rootvp)); bzero(&mstat, sizeof(mstat)); - error = VFS_STATFS(MOUNTTOPEMOUNT(mp)->pem_vfs, &mstat); + error = VFS_STATFS(MOUNTTOPEMOUNT(mp)->pm_vfs, &mstat); if (error) return (error); @@ -298,9 +272,7 @@ } static int -pefs_sync(mp, waitfor) - struct mount *mp; - int waitfor; +pefs_sync(struct mount *mp, int waitfor) { /* * XXX - Assumes no data cached at null layer. @@ -309,48 +281,43 @@ } static int -pefs_vget(mp, ino, flags, vpp) - struct mount *mp; - ino_t ino; - int flags; - struct vnode **vpp; +pefs_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp) { int error; - error = VFS_VGET(MOUNTTOPEMOUNT(mp)->pem_vfs, ino, flags, vpp); + error = VFS_VGET(MOUNTTOPEMOUNT(mp)->pm_vfs, ino, flags, vpp); if (error) return (error); - return (pe_nodeget(mp, *vpp, vpp)); + return (pefs_nodeget(mp, *vpp, vpp)); } static int -pefs_fhtovp(mp, fidp, vpp) - struct mount *mp; - struct fid *fidp; - struct vnode **vpp; +pefs_fhtovp(struct mount *mp, struct fid *fidp, struct vnode **vpp) { int error; - error = VFS_FHTOVP(MOUNTTOPEMOUNT(mp)->pem_vfs, fidp, vpp); + + error = VFS_FHTOVP(MOUNTTOPEMOUNT(mp)->pm_vfs, fidp, vpp); if (error) return (error); - return (pe_nodeget(mp, *vpp, vpp)); + error = pefs_nodeget(mp, *vpp, vpp); + printf("pefs_fhtovp: error=%d; vp=%p; v_object=%p\n", error, + !error ? *vpp : NULL, !error ? (*vpp)->v_object : NULL); + if (error) + return (error); + vnode_create_vobject(*vpp, 0, curthread); + return (error); } -static int -pefs_extattrctl(mp, cmd, filename_vp, namespace, attrname) - struct mount *mp; - int cmd; - struct vnode *filename_vp; - int namespace; - const char *attrname; +static int +pefs_extattrctl(struct mount *mp, int cmd, struct vnode *filename_vp, int namespace, const char *attrname) { - return VFS_EXTATTRCTL(MOUNTTOPEMOUNT(mp)->pem_vfs, cmd, filename_vp, + return VFS_EXTATTRCTL(MOUNTTOPEMOUNT(mp)->pm_vfs, cmd, filename_vp, namespace, attrname); >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Sun Jun 21 18:22:21 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9DF8E1065673; Sun, 21 Jun 2009 18:22:20 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5A7171065670 for ; Sun, 21 Jun 2009 18:22:20 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 48DF38FC14 for ; Sun, 21 Jun 2009 18:22:20 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LIMJ60045075 for ; Sun, 21 Jun 2009 18:22:19 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LIMJU1045073 for perforce@freebsd.org; Sun, 21 Jun 2009 18:22:19 GMT (envelope-from pgj@FreeBSD.org) Date: Sun, 21 Jun 2009 18:22:19 GMT Message-Id: <200906211822.n5LIMJU1045073@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 164816 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 18:22:21 -0000 http://perforce.freebsd.org/chv.cgi?CH=164816 Change 164816 by pgj@petymeg-current on 2009/06/21 18:21:22 Improve resolve_portname() Affected files ... .. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#32 edit Differences ... ==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#32 (text+ko) ==== @@ -826,12 +826,16 @@ { struct servent *sp = NULL; - sp = getservbyport((int)htons(addr->at_port), - addr->at_parent->st_name); - if ((sp != NULL || addr->at_port == 0) && - ((addr->at_flags & ADDRTYPE_ANONPORT) == 0)) - sprintf(addr->at_portname, "%.15s", sp ? sp->s_name : "*"); - else - sprintf(addr->at_portname, "%d", addr->at_port); + if ((addr->at_port == 0) || + ((addr->at_flags & ADDRTYPE_ANONPORT) != 0)) { + sprintf(addr->at_portname, "%.15s", "*"); + } else { + sp = getservbyport((int)htons(addr->at_port), + addr->at_parent->st_name); + if (sp != NULL) + sprintf(addr->at_portname, "%.15s", sp->s_name); + else + sprintf(addr->at_portname, "%d", addr->at_port); + } addr->at_flags |= ADDRTYPE_PORT_RESOLVED; } From owner-p4-projects@FreeBSD.ORG Sun Jun 21 19:17:21 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0E9D11065679; Sun, 21 Jun 2009 19:17:21 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BBDCA1065673 for ; Sun, 21 Jun 2009 19:17:20 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id A94318FC19 for ; Sun, 21 Jun 2009 19:17:20 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LJHKip050775 for ; Sun, 21 Jun 2009 19:17:20 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LJHKVw050773 for perforce@freebsd.org; Sun, 21 Jun 2009 19:17:20 GMT (envelope-from pgj@FreeBSD.org) Date: Sun, 21 Jun 2009 19:17:20 GMT Message-Id: <200906211917.n5LJHKVw050773@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 164820 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 19:17:22 -0000 http://perforce.freebsd.org/chv.cgi?CH=164820 Change 164820 by pgj@petymeg-current on 2009/06/21 19:17:18 Introduce a type for socket buffers Affected files ... .. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#33 edit .. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#20 edit .. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#18 edit .. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#20 edit .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet.c#19 edit .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/unix.c#15 edit .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/nettop/main.c#5 edit Differences ... ==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#33 (text+ko) ==== @@ -581,20 +581,20 @@ stp->st_qlen = xpcb->xu_socket.so_qlen; stp->st_incqlen = xpcb->xu_socket.so_incqlen; stp->st_qlimit = xpcb->xu_socket.so_qlimit; - stp->st_snd_cc = xpcb->xu_socket.so_snd.sb_cc; - stp->st_snd_mcnt = xpcb->xu_socket.so_snd.sb_mcnt; - stp->st_snd_ccnt = xpcb->xu_socket.so_snd.sb_ccnt; - stp->st_snd_hiwat = xpcb->xu_socket.so_snd.sb_hiwat; - stp->st_snd_lowat = xpcb->xu_socket.so_snd.sb_lowat; - stp->st_snd_mbcnt = xpcb->xu_socket.so_snd.sb_mbcnt; - stp->st_snd_mbmax = xpcb->xu_socket.so_snd.sb_mbmax; - stp->st_rcv_cc = xpcb->xu_socket.so_rcv.sb_cc; - stp->st_rcv_mcnt = xpcb->xu_socket.so_rcv.sb_mcnt; - stp->st_rcv_ccnt = xpcb->xu_socket.so_rcv.sb_ccnt; - stp->st_rcv_hiwat = xpcb->xu_socket.so_rcv.sb_hiwat; - stp->st_rcv_lowat = xpcb->xu_socket.so_rcv.sb_lowat; - stp->st_rcv_mbcnt = xpcb->xu_socket.so_rcv.sb_mbcnt; - stp->st_rcv_mbmax = xpcb->xu_socket.so_rcv.sb_mbmax; + stp->st_snd.sbt_cc = xpcb->xu_socket.so_snd.sb_cc; + stp->st_snd.sbt_mcnt = xpcb->xu_socket.so_snd.sb_mcnt; + stp->st_snd.sbt_ccnt = xpcb->xu_socket.so_snd.sb_ccnt; + stp->st_snd.sbt_hiwat = xpcb->xu_socket.so_snd.sb_hiwat; + stp->st_snd.sbt_lowat = xpcb->xu_socket.so_snd.sb_lowat; + stp->st_snd.sbt_mbcnt = xpcb->xu_socket.so_snd.sb_mbcnt; + stp->st_snd.sbt_mbmax = xpcb->xu_socket.so_snd.sb_mbmax; + stp->st_rcv.sbt_cc = xpcb->xu_socket.so_rcv.sb_cc; + stp->st_rcv.sbt_mcnt = xpcb->xu_socket.so_rcv.sb_mcnt; + stp->st_rcv.sbt_ccnt = xpcb->xu_socket.so_rcv.sb_ccnt; + stp->st_rcv.sbt_hiwat = xpcb->xu_socket.so_rcv.sb_hiwat; + stp->st_rcv.sbt_lowat = xpcb->xu_socket.so_rcv.sb_lowat; + stp->st_rcv.sbt_mbcnt = xpcb->xu_socket.so_rcv.sb_mbcnt; + stp->st_rcv.sbt_mbmax = xpcb->xu_socket.so_rcv.sb_mbmax; stp->st_pcb = (u_long)xpcb->xu_socket.so_pcb; stp->st_vnode = (u_long)xpcb->xu_unp.unp_vnode; stp->st_conn = (u_long)xpcb->xu_unp.unp_conn; @@ -627,20 +627,20 @@ stp->st_qlen = so->so_qlen; stp->st_incqlen = so->so_incqlen; stp->st_qlimit = so->so_qlimit; - stp->st_snd_cc = so->so_snd.sb_cc; - stp->st_snd_mcnt = so->so_snd.sb_mcnt; - stp->st_snd_ccnt = so->so_snd.sb_ccnt; - stp->st_snd_hiwat = so->so_snd.sb_hiwat; - stp->st_snd_lowat = so->so_snd.sb_lowat; - stp->st_snd_mbcnt = so->so_snd.sb_mbcnt; - stp->st_snd_mbmax = so->so_snd.sb_mbmax; - stp->st_rcv_cc = so->so_rcv.sb_cc; - stp->st_rcv_mcnt = so->so_rcv.sb_mcnt; - stp->st_rcv_ccnt = so->so_rcv.sb_ccnt; - stp->st_rcv_hiwat = so->so_rcv.sb_hiwat; - stp->st_rcv_lowat = so->so_rcv.sb_lowat; - stp->st_rcv_mbcnt = so->so_rcv.sb_mbcnt; - stp->st_rcv_mbmax = so->so_rcv.sb_mbmax; + stp->st_snd.sbt_cc = so->so_snd.sb_cc; + stp->st_snd.sbt_mcnt = so->so_snd.sb_mcnt; + stp->st_snd.sbt_ccnt = so->so_snd.sb_ccnt; + stp->st_snd.sbt_hiwat = so->so_snd.sb_hiwat; + stp->st_snd.sbt_lowat = so->so_snd.sb_lowat; + stp->st_snd.sbt_mbcnt = so->so_snd.sb_mbcnt; + stp->st_snd.sbt_mbmax = so->so_snd.sb_mbmax; + stp->st_rcv.sbt_cc = so->so_rcv.sb_cc; + stp->st_rcv.sbt_mcnt = so->so_rcv.sb_mcnt; + stp->st_rcv.sbt_ccnt = so->so_rcv.sb_ccnt; + stp->st_rcv.sbt_hiwat = so->so_rcv.sb_hiwat; + stp->st_rcv.sbt_lowat = so->so_rcv.sb_lowat; + stp->st_rcv.sbt_mbcnt = so->so_rcv.sb_mbcnt; + stp->st_rcv.sbt_mbmax = so->so_rcv.sb_mbmax; stp->st_pcb = (tp == NULL) ? (u_long)inp->inp_ppcb : (u_long)so->so_pcb; stp->st_vnode = (u_long)0; ==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#20 (text+ko) ==== @@ -62,21 +62,8 @@ int netstat_st_get_protocol(const struct socket_type *stp); const char *netstat_st_get_name(const struct socket_type *stp); const char *netstat_st_get_extname(const struct socket_type *stp); -/* XXX: move snd/rcv-related properties into a new abstract type? */ -u_int netstat_st_get_snd_cc(const struct socket_type *stp); -u_int netstat_st_get_snd_hiwat(const struct socket_type *stp); -u_int netstat_st_get_snd_lowat(const struct socket_type *stp); -u_int netstat_st_get_snd_mbcnt(const struct socket_type *stp); -u_int netstat_st_get_snd_mcnt(const struct socket_type *stp); -u_int netstat_st_get_snd_ccnt(const struct socket_type *stp); -u_int netstat_st_get_snd_mbmax(const struct socket_type *stp); -u_int netstat_st_get_rcv_cc(const struct socket_type *stp); -u_int netstat_st_get_rcv_hiwat(const struct socket_type *stp); -u_int netstat_st_get_rcv_lowat(const struct socket_type *stp); -u_int netstat_st_get_rcv_mbcnt(const struct socket_type *stp); -u_int netstat_st_get_rcv_mcnt(const struct socket_type *stp); -u_int netstat_st_get_rcv_ccnt(const struct socket_type *stp); -u_int netstat_st_get_rcv_mbmax(const struct socket_type *stp); +const struct sockbuf_type *netstat_st_get_snd(const struct socket_type *stp); +const struct sockbuf_type *netstat_st_get_rcv(const struct socket_type *stp); u_short netstat_st_get_qlen(const struct socket_type *stp); u_short netstat_st_get_incqlen(const struct socket_type *stp); u_short netstat_st_get_qlimit(const struct socket_type *stp); @@ -97,6 +84,14 @@ char *addr, int addr_len); u_short netstat_at_get_port(const struct addr_type *atp); const char *netstat_at_get_portname(struct addr_type *atp); +/* Socket buffers: */ +u_int netstat_sbt_get_cc(const struct sockbuf_type *sbtp); +u_int netstat_sbt_get_hiwat(const struct sockbuf_type *sbtp); +u_int netstat_sbt_get_lowat(const struct sockbuf_type *sbtp); +u_int netstat_sbt_get_mbcnt(const struct sockbuf_type *sbtp); +u_int netstat_sbt_get_mcnt(const struct sockbuf_type *sbtp); +u_int netstat_sbt_get_ccnt(const struct sockbuf_type *sbtp); +u_int netstat_sbt_get_mbmax(const struct sockbuf_type *sbtp); __END_DECLS #endif /* !_NETSTAT_H_ */ ==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#18 (text+ko) ==== @@ -32,6 +32,17 @@ char at_portname[32]; }; +/* Socket buffer type */ +struct sockbuf_type { + u_int sbt_cc; /* actual chars in the buffer */ + u_int sbt_mcnt; + u_int sbt_ccnt; + u_int sbt_hiwat; + u_int sbt_lowat; + u_int sbt_mbcnt; + u_int sbt_mbmax; +}; + /* internal defines for addr_type: */ #define ADDRTYPE_ANONPORT 0x01 #define ADDRTYPE_NAME_RESOLVED 0x02 @@ -58,20 +69,10 @@ struct addr_type *st_address[SOCKTYPE_MAXADDRCNT]; int st_addrcnt; /* address count */ - u_int st_snd_cc; /* actual chars in the send buffer */ - u_int st_snd_mcnt; - u_int st_snd_ccnt; - u_int st_snd_hiwat; - u_int st_snd_lowat; - u_int st_snd_mbcnt; - u_int st_snd_mbmax; - u_int st_rcv_cc; /* actual chars in the receive buffer */ - u_int st_rcv_mcnt; - u_int st_rcv_ccnt; - u_int st_rcv_hiwat; - u_int st_rcv_lowat; - u_int st_rcv_mbcnt; - u_int st_rcv_mbmax; + /* buffers */ + struct sockbuf_type st_snd; + struct sockbuf_type st_rcv; + u_short st_qlen; /* number of unaccepted connections */ u_short st_incqlen; /* number of unaccepted incomplete connections */ ==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#20 (text+ko) ==== @@ -350,88 +350,16 @@ return (stp->st_extname); } -u_int -netstat_st_get_rcv_cc(const struct socket_type *stp) +const struct sockbuf_type * +netstat_st_get_snd(const struct socket_type *stp) { - return (stp->st_rcv_cc); + return (&stp->st_snd); } -u_int -netstat_st_get_rcv_hiwat(const struct socket_type *stp) +const struct sockbuf_type * +netstat_st_get_rcv(const struct socket_type *stp) { - return (stp->st_rcv_hiwat); -} - -u_int -netstat_st_get_rcv_lowat(const struct socket_type *stp) -{ - return (stp->st_rcv_lowat); -} - -u_int -netstat_st_get_rcv_mbcnt(const struct socket_type *stp) -{ - return (stp->st_rcv_mbcnt); -} - -u_int -netstat_st_get_rcv_mcnt(const struct socket_type *stp) -{ - return (stp->st_rcv_mcnt); -} - -u_int -netstat_st_get_rcv_ccnt(const struct socket_type *stp) -{ - return (stp->st_rcv_ccnt); -} - -u_int -netstat_st_get_rcv_mbmax(const struct socket_type *stp) -{ - return (stp->st_rcv_mbmax); -} - -u_int -netstat_st_get_snd_cc(const struct socket_type *stp) -{ - return (stp->st_snd_cc); -} - -u_int -netstat_st_get_snd_hiwat(const struct socket_type *stp) -{ - return (stp->st_snd_hiwat); -} - -u_int -netstat_st_get_snd_lowat(const struct socket_type *stp) -{ - return (stp->st_snd_lowat); -} - -u_int -netstat_st_get_snd_mbcnt(const struct socket_type *stp) -{ - return (stp->st_snd_mbcnt); -} - -u_int -netstat_st_get_snd_mcnt(const struct socket_type *stp) -{ - return (stp->st_snd_mcnt); -} - -u_int -netstat_st_get_snd_ccnt(const struct socket_type *stp) -{ - return (stp->st_snd_ccnt); -} - -u_int -netstat_st_get_snd_mbmax(const struct socket_type *stp) -{ - return (stp->st_snd_mbmax); + return (&stp->st_rcv); } u_short @@ -547,3 +475,45 @@ } return (atp->at_portname); } + +u_int +netstat_sbt_get_cc(const struct sockbuf_type *sbtp) +{ + return (sbtp->sbt_cc); +} + +u_int +netstat_sbt_get_hiwat(const struct sockbuf_type *sbtp) +{ + return (sbtp->sbt_hiwat); +} + +u_int +netstat_sbt_get_lowat(const struct sockbuf_type *sbtp) +{ + return (sbtp->sbt_lowat); +} + +u_int +netstat_sbt_get_mbcnt(const struct sockbuf_type *sbtp) +{ + return (sbtp->sbt_mbcnt); +} + +u_int +netstat_sbt_get_mcnt(const struct sockbuf_type *sbtp) +{ + return (sbtp->sbt_mcnt); +} + +u_int +netstat_sbt_get_ccnt(const struct sockbuf_type *sbtp) +{ + return (sbtp->sbt_ccnt); +} + +u_int +netstat_sbt_get_mbmax(const struct sockbuf_type *sbtp) +{ + return (sbtp->sbt_mbmax); +} ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet.c#19 (text+ko) ==== @@ -203,8 +203,9 @@ netstat_st_get_incqlen(stp), netstat_st_get_qlimit(stp)); printf("%-14.14s", buf1); } else { - printf("%6u %6u ", netstat_st_get_rcv_cc(stp), - netstat_st_get_snd_cc(stp)); + printf("%6u %6u ", + netstat_sbt_get_cc(netstat_st_get_rcv(stp)), + netstat_sbt_get_cc(netstat_st_get_snd(stp))); } laddr = netstat_st_get_address(stp, 0); /* local */ faddr = netstat_st_get_address(stp, 1); /* foreign */ @@ -218,16 +219,18 @@ if (Lflag) printf("%21s", " "); printf("%6u %6u %6u %6u %6u %6u %6u %6u %6u %6u %6u %6u", - netstat_st_get_rcv_mcnt(stp), netstat_st_get_snd_mcnt(stp), - netstat_st_get_rcv_ccnt(stp), netstat_st_get_snd_ccnt(stp), - netstat_st_get_rcv_hiwat(stp), - netstat_st_get_snd_hiwat(stp), - netstat_st_get_rcv_lowat(stp), - netstat_st_get_snd_lowat(stp), - netstat_st_get_rcv_mbcnt(stp), - netstat_st_get_snd_mbcnt(stp), - netstat_st_get_rcv_mbmax(stp), - netstat_st_get_snd_mbmax(stp)); + netstat_sbt_get_mcnt(netstat_st_get_rcv(stp)), + netstat_sbt_get_mcnt(netstat_st_get_snd(stp)), + netstat_sbt_get_ccnt(netstat_st_get_rcv(stp)), + netstat_sbt_get_ccnt(netstat_st_get_snd(stp)), + netstat_sbt_get_hiwat(netstat_st_get_rcv(stp)), + netstat_sbt_get_hiwat(netstat_st_get_snd(stp)), + netstat_sbt_get_lowat(netstat_st_get_rcv(stp)), + netstat_sbt_get_lowat(netstat_st_get_snd(stp)), + netstat_sbt_get_mbcnt(netstat_st_get_rcv(stp)), + netstat_sbt_get_mbcnt(netstat_st_get_snd(stp)), + netstat_sbt_get_mbmax(netstat_st_get_rcv(stp)), + netstat_sbt_get_mbmax(netstat_st_get_snd(stp))); } if (!Lflag) { printf("%s", netstat_st_get_tcpstate(stp)); ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/unix.c#15 (text+ko) ==== @@ -136,7 +136,8 @@ } else { printf("%8lx %-6.6s %6u %6u %8lx %8lx %8lx %8lx", netstat_st_get_pcb(stp), netstat_st_get_name(stp), - netstat_st_get_rcv_cc(stp), netstat_st_get_snd_cc(stp), + netstat_sbt_get_cc(netstat_st_get_rcv(stp)), + netstat_sbt_get_cc(netstat_st_get_snd(stp)), netstat_st_get_vnode(stp), netstat_st_get_conn(stp), netstat_st_get_refs(stp), netstat_st_get_reflink(stp)); } ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/nettop/main.c#5 (text+ko) ==== @@ -78,7 +78,8 @@ mvprintw(row, 0, "%8lx %-6.6s %6u %6u %8lx %8lx %8lx %8lx", netstat_st_get_pcb(stp), netstat_st_get_name(stp), - netstat_st_get_rcv_cc(stp), netstat_st_get_snd_cc(stp), + netstat_sbt_get_cc(netstat_st_get_rcv(stp)), + netstat_sbt_get_cc(netstat_st_get_snd(stp)), netstat_st_get_vnode(stp), netstat_st_get_conn(stp), netstat_st_get_refs(stp), netstat_st_get_reflink(stp)); if (netstat_st_get_addrcnt(stp) > 0) { @@ -102,8 +103,9 @@ faddr = netstat_st_get_address(stp, 1); mvprintw(row, 0, "%-5.5s %6u %6u %-17.17s %-6.6s %-17.17s %-6.6s %s", - netstat_st_get_extname(stp), netstat_st_get_rcv_cc(stp), - netstat_st_get_snd_cc(stp), + netstat_st_get_extname(stp), + netstat_sbt_get_cc(netstat_st_get_rcv(stp)), + netstat_sbt_get_cc(netstat_st_get_snd(stp)), netstat_at_get_name(laddr), netstat_at_get_portname(laddr), netstat_at_get_name(faddr), From owner-p4-projects@FreeBSD.ORG Sun Jun 21 19:45:53 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EB8931065679; Sun, 21 Jun 2009 19:45:52 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 94A2B1065672 for ; Sun, 21 Jun 2009 19:45:52 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 781968FC1B for ; Sun, 21 Jun 2009 19:45:52 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LJjq6l060237 for ; Sun, 21 Jun 2009 19:45:52 GMT (envelope-from dforsyth@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LJjqU8060235 for perforce@freebsd.org; Sun, 21 Jun 2009 19:45:52 GMT (envelope-from dforsyth@FreeBSD.org) Date: Sun, 21 Jun 2009 19:45:52 GMT Message-Id: <200906211945.n5LJjqU8060235@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to dforsyth@FreeBSD.org using -f From: David Forsythe To: Perforce Change Reviews Cc: Subject: PERFORCE change 164825 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 19:45:53 -0000 http://perforce.freebsd.org/chv.cgi?CH=164825 Change 164825 by dforsyth@squirrel on 2009/06/21 19:45:10 Added a little sweet macro action. Affected files ... .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#22 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#21 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#14 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#11 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.c#17 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.h#11 edit .. //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#15 edit Differences ... ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#22 (text+ko) ==== @@ -226,6 +226,17 @@ return (pkg_plist_origin(&p->plist)); } +char * +pkg_mtree_file(struct pkg *p) +{ + if (p == NULL) + arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + if (pkg_parse_plist(p) != OK) + return (NULL); + return (pkg_plist_mtree_file(&p->plist)); +} + /* These need to be renamed. */ void ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#21 (text+ko) ==== @@ -113,6 +113,8 @@ char *pkg_display(struct pkg *p); +char *pkg_mtree_file(struct pkg *p); + int pkg_set_ident(struct pkg *p, const char *ident); int pkg_set_name(struct pkg *p, const char *name); @@ -133,6 +135,10 @@ int pkg_set_display(struct pkg *p, const char *display); +#if 0 +int pkg_set_mtree_file(struct pkg *p, const char *mtree_file); +#endif + int pkg_parse_plist(struct pkg *p); void pkg_pkg_file_list_init(struct pkg *p); @@ -151,6 +157,17 @@ void pkg_delete(struct pkg *p); +/* Check style. */ + +#define pkg_ent_list_init(t, p) \ + pkg_##t##_list_init(p) + +#define pkg_ent_list_next(t, p) \ + pkg_##t##_list_next(p) + +#define pkg_ent_list_add(t, p) \ + pkg_##t##_list_add(t, p) + /* pkgdb */ struct pkgdb; ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#14 (text+ko) ==== @@ -328,6 +328,15 @@ return (pl->origin); } +char * +pkg_plist_mtree_file(struct pkg_plist *pl) +{ + if (pl == NULL) + arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG); + + return (pl->mtree_file); +} + /* pkg_file list manipulation and access. */ /* I should really just write a set of generic routine to handle this ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#11 (text+ko) ==== @@ -101,6 +101,7 @@ char *pkg_plist_name(struct pkg_plist *pl); char *pkg_plist_cwd(struct pkg_plist *pl); char *pkg_plist_origin(struct pkg_plist *pl); +char *pkg_plist_mtree_file(struct pkg_plist *pl); void pkg_plist_pkg_file_list_init(struct pkg_plist *pl); struct pkg_file *pkg_plist_pkg_file_list_first(struct pkg_plist *pl); ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.c#17 (text+ko) ==== @@ -126,8 +126,26 @@ pkgdb_pkg_get(struct pkgdb *db, struct pkg *p, const char *ident) { /* TODO: Write this function. */ + int status; + + if (db == NULL) + arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_CLIENT); + if (p == NULL) + arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + status = PKG_OK; + pkg_reset(p); + return (OK); } + +/* Grab a specific sub out of the pkgdb_sub list. */ +struct pkgdb_sub * +pkgdb_pkgdb_sub_get(struct pkgdb *db, const char *ident) +{ + /* TODO: Write this function. */ + return (NULL); +} #endif void ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.h#11 (text+ko) ==== @@ -15,4 +15,5 @@ void pkgdb_pkgdb_sub_list_append(struct pkgdb *db, struct pkgdb_sub *sub); +struct pkgdb_sub *pkgdb_pkgdb_sub_get(struct pkgdb *db, const char *ident); #endif ==== //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#15 (text+ko) ==== @@ -125,6 +125,7 @@ const char *name; const char *cwd; const char *origin; + const char *mtree_file; const char *path; const char *md5; const char *owner; @@ -144,6 +145,7 @@ name = pkg_name(p); cwd = pkg_cwd(p); origin = pkg_origin(p); + mtree_file = pkg_mtree_file(p); printf("%s:\n", (name != NULL ? name : BAD_OR_UNKNOWN_VALUE)); @@ -151,9 +153,11 @@ (cwd != NULL ? name : BAD_OR_UNKNOWN_VALUE)); printf("\torigin: %s\n", (origin != NULL ? origin : BAD_OR_UNKNOWN_VALUE)); + printf("\tmtree file: %s\n", + (mtree_file != NULL ? mtree_file : BAD_OR_UNKNOWN_VALUE)); printf("\tfiles:\n"); - pkg_pkg_file_list_init(p); - while ((pf = pkg_pkg_file_list_next(p)) != NULL) { + pkg_ent_list_init(pkg_file, p); + while ((pf = pkg_ent_list_next(pkg_file, p)) != NULL) { path = pkg_file_path(pf); md5 = pkg_file_md5(pf); owner = pkg_file_owner(pf); @@ -169,8 +173,8 @@ } printf("\tdepends:\n"); - pkg_pkg_dep_list_init(p); - while ((pd = pkg_pkg_dep_list_next(p)) != NULL) { + pkg_ent_list_init(pkg_dep, p); + while ((pd = pkg_ent_list_next(pkg_dep, p)) != NULL) { name = pkg_dep_name(pd); origin = pkg_dep_origin(pd); printf("\t\t%s : %s\n", name, origin); From owner-p4-projects@FreeBSD.ORG Sun Jun 21 20:30:42 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id F10B81065687; Sun, 21 Jun 2009 20:30:41 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B09CB106566C for ; Sun, 21 Jun 2009 20:30:41 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 9DD508FC19 for ; Sun, 21 Jun 2009 20:30:41 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LKUf6D064890 for ; Sun, 21 Jun 2009 20:30:41 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LKUfjf064888 for perforce@freebsd.org; Sun, 21 Jun 2009 20:30:41 GMT (envelope-from trasz@freebsd.org) Date: Sun, 21 Jun 2009 20:30:41 GMT Message-Id: <200906212030.n5LKUfjf064888@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 164828 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 20:30:42 -0000 http://perforce.freebsd.org/chv.cgi?CH=164828 Change 164828 by trasz@trasz_victim on 2009/06/21 20:29:52 Trying to get hierarchical resource accounting to work. This still trips on KASSERTs horribly, for some reason. I'm running out of ideas. ;-/ Affected files ... .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_exec.c#4 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_exit.c#7 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_fork.c#5 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#14 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/hrl.h#10 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/ucred.h#5 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_exec.c#4 (text+ko) ==== @@ -705,7 +705,7 @@ */ change_svuid(newcred, newcred->cr_uid); change_svgid(newcred, newcred->cr_gid); - p->p_ucred = newcred; + change_cred(p, newcred); newcred = NULL; } else { if (oldcred->cr_uid == oldcred->cr_ruid && @@ -728,7 +728,7 @@ crcopy(newcred, oldcred); change_svuid(newcred, newcred->cr_uid); change_svgid(newcred, newcred->cr_gid); - p->p_ucred = newcred; + change_cred(p, newcred); newcred = NULL; } } ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_exit.c#7 (text+ko) ==== @@ -128,7 +128,7 @@ struct ucred *tracecred; #endif struct plimit *plim; - int locked, i; + int locked; mtx_assert(&Giant, MA_NOTOWNED); @@ -398,16 +398,6 @@ PROC_UNLOCK(p); lim_free(plim); - for (i = 0; i < HRL_RESOURCE_MAX; i++) { - if (p->p_accounting.ha_resources[i] != 0) -#ifdef notyet - printf("exit1: exiting process: resource %d = %lld\n", - i, p->p_accounting.ha_resources[i]); -#else - ; -#endif - } - /* * Remove proc from allproc queue and pidhash chain. * Place onto zombproc. Unlink from parent's child list. @@ -772,6 +762,8 @@ * Decrement the count of procs running with this uid. */ (void)chgproccnt(p->p_ucred->cr_ruidinfo, -1, 0); + hrl_free_proc(p->p_pptr, HRL_RESOURCE_MAXPROCESSES, 1); + hrl_proc_exiting(p); /* * Free credentials, arguments, and sigacts. @@ -934,6 +926,10 @@ if (child->p_pptr == parent) return; + hrl_free_proc(child->p_pptr, HRL_RESOURCE_MAXPROCESSES, 1); + /* XXX: What about return value? */ + hrl_alloc_proc(parent, HRL_RESOURCE_MAXPROCESSES, 1); + PROC_LOCK(child->p_pptr); sigqueue_take(child->p_ksi); PROC_UNLOCK(child->p_pptr); ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_fork.c#5 (text+ko) ==== @@ -570,6 +570,12 @@ PROC_UNLOCK(p1); PROC_UNLOCK(p2); + /* + * Initialize HRL accounting information. + * XXX: Handle failure? + */ + hrl_proc_fork(p1, p2); + /* Bump references to the text vnode (for procfs) */ if (p2->p_textvp) vref(p2->p_textvp); ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#14 (text+ko) ==== @@ -47,6 +47,11 @@ #include #include +#define HRF_DEFAULT 0 +#define HRF_DONT_INHERIT 1 +#define HRF_DONT_ACCUMULATE 2 + + struct hrl_node { struct hrl_rule hn_rule; RB_ENTRY(hrl_node) hn_next; @@ -93,14 +98,24 @@ RB_HEAD(hrl_tree, hrl_node) hrls = RB_INITIALIZER(hrls); RB_GENERATE_STATIC(hrl_tree, hrl_node, hn_next, hn_compare); +static const char * hrl_resource_name(int resource); static void hrl_init(void); -SYSINIT(hrl, SI_SUB_RUN_SCHEDULER, SI_ORDER_SECOND, hrl_init, NULL); +SYSINIT(hrl, SI_SUB_CPU, SI_ORDER_FIRST, hrl_init, NULL); static uma_zone_t hrl_zone; static struct mtx hrl_lock; MALLOC_DEFINE(M_HRL, "hrl", "Hierarchical Resource Limits"); +#define notyet +#if 0 +#undef KASSERT +#define KASSERT(exp,msg) do { \ + if (__predict_false(!(exp))) \ + printf msg; \ +} while (0) +#endif + #ifdef INVARIANTS /* * Go through the accounting info and verify that it makes sense. @@ -114,7 +129,7 @@ struct prison *pr; cred = p->p_ucred; - + mtx_assert(&hrl_lock, MA_OWNED); for (resource = 0; resource < HRL_RESOURCE_MAX; resource++) KASSERT(p->p_accounting.ha_resources[resource] >= 0, ("resource usage propagation meltdown")); KASSERT(cred->cr_ruidinfo->ui_accounting.ha_resources[resource] >= 0, ("resource usage propagation meltdown")); @@ -128,6 +143,88 @@ } #endif /* INVARIANTS */ +void +hrl_proc_exiting(struct proc *p) +{ + int i; + + mtx_lock(&hrl_lock); + for (i = 0; i < HRL_RESOURCE_MAX; i++) { + if (p->p_accounting.ha_resources[i] != 0) +#if 0 + KASSERT(p->p_accounting.ha_resources == 0, + ("dead process still holding resources")); +#else + printf("hrl_proc_exiting: %s = %lld\n", + hrl_resource_name(i), + p->p_accounting.ha_resources[i]); + if (p->p_accounting.ha_resources[i] > 0) + hrl_free_proc(p, i, p->p_accounting.ha_resources[i]); + else + p->p_accounting.ha_resources[i] = 0; +#endif + } + mtx_unlock(&hrl_lock); +} + +static int +hrl_resource_inheritable(int resource) +{ + + switch (resource) { + case HRL_RESOURCE_MAXPROCESSES: + return (0); + default: + return (1); + } +} + +static const char * +hrl_resource_name(int resource) +{ + switch (resource) { + case HRL_RESOURCE_CPUTIME: + return ("cputime"); + case HRL_RESOURCE_FILESIZE: + return ("filesize"); + case HRL_RESOURCE_DATASIZE: + return ("datasize"); + case HRL_RESOURCE_STACKSIZE: + return ("stacksize"); + case HRL_RESOURCE_COREDUMPSIZE: + return ("coredumpsize"); + case HRL_RESOURCE_MEMORYUSE: + return ("memoryuse"); + case HRL_RESOURCE_MEMORYLOCKED: + return ("memorylocked"); + case HRL_RESOURCE_MAXPROCESSES: + return ("maxprocesses"); + case HRL_RESOURCE_OPENFILES: + return ("openfiles"); + case HRL_RESOURCE_SBSIZE: + return ("sbsize"); + case HRL_RESOURCE_VMEMORYUSE: + return ("vmemoryuse"); + case HRL_RESOURCE_PTY: + return ("vmemoryuse"); + default: + panic("hrl_resource_name: unknown resource"); + } +} + +void +hrl_proc_fork(struct proc *parent, struct proc *child) +{ + int i; + + mtx_lock(&hrl_lock); + for (i = 0; i < HRL_RESOURCE_MAX; i++) { + if (parent->p_accounting.ha_resources[i] != 0 && hrl_resource_inheritable(i)) + hrl_allocated_proc(child, i, parent->p_accounting.ha_resources[i]); + } + mtx_unlock(&hrl_lock); +} + /* * Increase allocation of 'resource' by 'amount' for process 'p'. * Return 0 if it's below limits, or errno, if it's not. @@ -135,27 +232,43 @@ int hrl_alloc_proc(struct proc *p, int resource, uint64_t amount) { - int i; + int i, j; struct ucred *cred; struct prison *pr; - KASSERT(amount > 0, ("invalid amount")); + KASSERT(amount > 0, ("hrl_alloc_proc: invalid amount for %s: %lld", + hrl_resource_name(resource), amount)); + if (amount <= 0) + panic("bleh."); - /* - * XXX: Obviously wrong, fix later. - */ + mtx_lock(&hrl_lock); p->p_accounting.ha_resources[resource] += amount; cred = p->p_ucred; cred->cr_ruidinfo->ui_accounting.ha_resources[resource] += amount; - cred->cr_uidinfo->ui_accounting.ha_resources[resource] += amount; + if (cred->cr_ruidinfo != cred->cr_uidinfo) + cred->cr_uidinfo->ui_accounting.ha_resources[resource] += amount; for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) pr->pr_accounting.ha_resources[resource] += amount; - for (i = 0; i < cred->cr_ngroups; i++) + /* + * XXX: Slow. + */ + for (i = 0; i < cred->cr_ngroups; i++) { + /* + * Make sure we don't account a group more than once if it appears + * in cr_groups[] more than once. + */ + for (j = 0; j < i; j++) { + if (cred->cr_groups[i] == cred->cr_groups[j]) + goto skip_group; + } cred->cr_gidinfos[i]->gi_accounting.ha_resources[resource] += amount; - +skip_group: + continue; + } #ifdef INVARIANTS hrl_assert_proc(p); #endif + mtx_unlock(&hrl_lock); /* * XXX: When denying, return proper errno - EFSIZ, ENOMEM etc. @@ -174,24 +287,45 @@ int hrl_allocated_proc(struct proc *p, int resource, uint64_t amount) { - int i; + int i, j; int64_t diff; struct ucred *cred; struct prison *pr; + KASSERT(amount > 0, ("hrl_allocated_proc: invalid amount for %s: %lld", + hrl_resource_name(resource), amount)); + if (amount <= 0) + panic("bleh."); + + mtx_lock(&hrl_lock); diff = amount - p->p_accounting.ha_resources[resource]; - p->p_accounting.ha_resources[resource] += diff; + p->p_accounting.ha_resources[resource] = amount; cred = p->p_ucred; cred->cr_ruidinfo->ui_accounting.ha_resources[resource] += diff; - cred->cr_uidinfo->ui_accounting.ha_resources[resource] += diff; + if (cred->cr_ruidinfo != cred->cr_uidinfo) + cred->cr_uidinfo->ui_accounting.ha_resources[resource] += diff; for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) pr->pr_accounting.ha_resources[resource] += diff; - for (i = 0; i < cred->cr_ngroups; i++) + /* + * XXX: Slow. + */ + for (i = 0; i < cred->cr_ngroups; i++) { + /* + * Make sure we don't account a group more than once if it appears + * in cr_groups[] more than once. + */ + for (j = 0; j < i; j++) { + if (cred->cr_groups[i] == cred->cr_groups[j]) + goto skip_group; + } cred->cr_gidinfos[i]->gi_accounting.ha_resources[resource] += diff; - +skip_group: + continue; + } #ifdef INVARIANTS hrl_assert_proc(p); #endif + mtx_unlock(&hrl_lock); return (0); } @@ -202,27 +336,49 @@ void hrl_free_proc(struct proc *p, int resource, uint64_t amount) { - int i; + int i, j; struct ucred *cred; struct prison *pr; - KASSERT(amount > 0, ("invalid amount")); + KASSERT(amount > 0, ("hrl_free_proc: invalid amount for %s: %lld", + hrl_resource_name(resource), amount)); + if (amount <= 0) + panic("bleh."); + mtx_lock(&hrl_lock); p->p_accounting.ha_resources[resource] -= amount; #ifdef notyet - KASSERT(amount >= p->p_accounting.ha_resources[resource], ("freeing more than allocated")); + KASSERT(amount <= p->p_accounting.ha_resources[resource], + ("hrl_free_proc: freeing %lld, which is more than allocated %lld " + "for %s", amount, p->p_accounting.ha_resources[resource], + hrl_resource_name(resource))); #endif cred = p->p_ucred; cred->cr_ruidinfo->ui_accounting.ha_resources[resource] -= amount; - cred->cr_uidinfo->ui_accounting.ha_resources[resource] -= amount; + if (cred->cr_ruidinfo != cred->cr_uidinfo) + cred->cr_uidinfo->ui_accounting.ha_resources[resource] -= amount; for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) pr->pr_accounting.ha_resources[resource] -= amount; - for (i = 0; i < cred->cr_ngroups; i++) + /* + * XXX: Slow. + */ + for (i = 0; i < cred->cr_ngroups; i++) { + /* + * Make sure we don't account a group more than once if it appears + * in cr_groups[] more than once. + */ + for (j = 0; j < i; j++) { + if (cred->cr_groups[i] == cred->cr_groups[j]) + goto skip_group; + } cred->cr_gidinfos[i]->gi_accounting.ha_resources[resource] -= amount; - +skip_group: + continue; + } #ifdef INVARIANTS hrl_assert_proc(p); #endif + mtx_unlock(&hrl_lock); } /* @@ -263,7 +419,7 @@ node = RB_FIND(hrl_tree, &hrls, &searched); if (node != NULL) { node = RB_REMOVE(hrl_tree, &hrls, node); - KASSERT(node != NULL, ("node removal failed")); + KASSERT(node != NULL, ("hrl_adjust: node removal failed")); } mtx_unlock(&hrl_lock); if (node != NULL) @@ -292,16 +448,18 @@ { int i; + mtx_lock(&hrl_lock); for (i = 0; i < HRL_RESOURCE_MAX; i++) { #ifdef notyet KASSERT(dest->ha_resources[i] >= 0, ("resource usage propagation meltdown")); + KASSERT(src->ha_resources[i] >= 0, ("resource usage propagation meltdown")); #endif dest->ha_resources[i] += src->ha_resources[i]; #ifdef notyet - KASSERT(src->ha_resources[i] >= 0, ("resource usage propagation meltdown")); KASSERT(dest->ha_resources[i] >= 0, ("resource usage propagation meltdown")); #endif } + mtx_unlock(&hrl_lock); } void @@ -309,16 +467,19 @@ { int i; + mtx_lock(&hrl_lock); for (i = 0; i < HRL_RESOURCE_MAX; i++) { #ifdef notyet KASSERT(dest->ha_resources[i] >= 0, ("resource usage propagation meltdown")); + KASSERT(src->ha_resources[i] >= 0, ("resource usage propagation meltdown")); + KASSERT(src->ha_resources[i] <= dest->ha_resources[i], ("resource usage propagation meltdown")); #endif dest->ha_resources[i] -= src->ha_resources[i]; #ifdef notyet - KASSERT(src->ha_resources[i] >= 0, ("resource usage propagation meltdown")); KASSERT(dest->ha_resources[i] >= 0, ("resource usage propagation meltdown")); #endif } + mtx_unlock(&hrl_lock); } /* @@ -526,7 +687,7 @@ continue; node = RB_REMOVE(hrl_tree, &hrls, node); - KASSERT(node != NULL, ("node removal failed")); + KASSERT(node != NULL, ("hrl_proc_exit: node removal failed")); mtx_unlock(&hrl_lock); uma_zfree(hrl_zone, node); @@ -541,6 +702,6 @@ hrl_zone = uma_zcreate("hrl", sizeof(struct hrl_node), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); - mtx_init(&hrl_lock, "hrl lock", NULL, MTX_DEF); + mtx_init(&hrl_lock, "hrl lock", NULL, MTX_RECURSE); /* XXX: Make it non-recurseable later. */ EVENTHANDLER_REGISTER(process_exit, hrl_proc_exit, NULL, EVENTHANDLER_PRI_ANY); } ==== //depot/projects/soc2009/trasz_limits/sys/sys/hrl.h#10 (text+ko) ==== @@ -120,6 +120,8 @@ void hrl_adjust(int subject, id_t subject_id, int per, int resource, int action, int64_t amount); void hrl_acc_add(struct hrl_acc *dest, const struct hrl_acc *src); void hrl_acc_subtract(struct hrl_acc *dest, const struct hrl_acc *src); +void hrl_proc_exiting(struct proc *p); +void hrl_proc_fork(struct proc *parent, struct proc *child); #else /* !_KERNEL */ ==== //depot/projects/soc2009/trasz_limits/sys/sys/ucred.h#5 (text+ko) ==== @@ -84,7 +84,9 @@ #ifdef _KERNEL struct thread; +struct proc; +void change_cred(struct proc *p, struct ucred *newcred); void change_egid(struct ucred *newcred, struct gidinfo *egip); void change_euid(struct ucred *newcred, struct uidinfo *euip); void change_rgid(struct ucred *newcred, gid_t rgid); From owner-p4-projects@FreeBSD.ORG Sun Jun 21 20:31:43 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4B48C10656AD; Sun, 21 Jun 2009 20:31:43 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E613B10656A8 for ; Sun, 21 Jun 2009 20:31:42 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id D2E318FC1B for ; Sun, 21 Jun 2009 20:31:42 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LKVgBp064953 for ; Sun, 21 Jun 2009 20:31:42 GMT (envelope-from andre@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LKVgQA064951 for perforce@freebsd.org; Sun, 21 Jun 2009 20:31:42 GMT (envelope-from andre@freebsd.org) Date: Sun, 21 Jun 2009 20:31:42 GMT Message-Id: <200906212031.n5LKVgQA064951@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to andre@freebsd.org using -f From: Andre Oppermann To: Perforce Change Reviews Cc: Subject: PERFORCE change 164829 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 20:31:45 -0000 http://perforce.freebsd.org/chv.cgi?CH=164829 Change 164829 by andre@andre_t61 on 2009/06/21 20:31:09 Merge in some fixes to head after the branch point of tcp_new: svn r178862 jhb Always bump tcpstat.tcps_badrst if we get a RST for a connection in the syncache that has an invalid SEQ instead of only doing it when we suceed in mallocing space for the log message. svn r179832 ups Fix a check in SYN cache expansion (syncache_expand()) to accept packets that arrive in the receive window instead of just on the left edge of the receive window. This is needed for correct behavior when packets are lost or reordered. svn r179833 ups Change incorrect stale cookie detection in syncookie_lookup() that prematurely declared a cookie as expired. Affected files ... .. //depot/projects/tcp_new/netinet/tcp_syncache.c#2 edit Differences ... ==== //depot/projects/tcp_new/netinet/tcp_syncache.c#2 (text+ko) ==== @@ -567,10 +567,11 @@ "connection attempt aborted by remote endpoint\n", s, __func__); tcpstat.tcps_sc_reset++; - } else if ((s = tcp_log_addrs(inc, th, NULL, NULL))) { - log(LOG_DEBUG, "%s; %s: RST with invalid SEQ %u != IRS %u " - "(+WND %u), segment ignored\n", - s, __func__, th->th_seq, sc->sc_irs, sc->sc_wnd); + } else { + if ((s = tcp_log_addrs(inc, th, NULL, NULL))) { + log(LOG_DEBUG, "%s; %s: RST with invalid SEQ %u != " + "IRS %u (+WND %u), segment ignored\n", + s, __func__, th->th_seq, sc->sc_irs, sc->sc_wnd); tcpstat.tcps_badrst++; } @@ -902,12 +903,14 @@ "rejected\n", s, __func__, th->th_ack, sc->sc_iss); goto failed; } + /* - * The SEQ must match the received initial receive sequence - * number + 1 (the SYN) because we didn't ACK any data that - * may have come with the SYN. + * The SEQ must fall in the window starting at the received + * initial receive sequence number + 1 (the SYN). */ - if (th->th_seq != sc->sc_irs + 1 && !TOEPCB_ISSET(sc)) { + if ((SEQ_LEQ(th->th_seq, sc->sc_irs) || + SEQ_GT(th->th_seq, sc->sc_irs + sc->sc_wnd) && + !TOEPCB_ISSET(sc)) { if ((s = tcp_log_addrs(inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: SEQ %u != IRS+1 %u, segment " "rejected\n", s, __func__, th->th_seq, sc->sc_irs); @@ -1607,7 +1610,7 @@ * The secret wasn't updated for the lifetime of a syncookie, * so this SYN-ACK/ACK is either too old (replay) or totally bogus. */ - if (sch->sch_reseed < time_uptime) { + if (sch->sch_reseed + SYNCOOKIE_LIFETIME < time_uptime) { return (NULL); } From owner-p4-projects@FreeBSD.ORG Sun Jun 21 20:45:59 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C93C01065675; Sun, 21 Jun 2009 20:45:58 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 88C9E1065673 for ; Sun, 21 Jun 2009 20:45:58 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 775148FC18 for ; Sun, 21 Jun 2009 20:45:58 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LKjwmA066206 for ; Sun, 21 Jun 2009 20:45:58 GMT (envelope-from andre@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LKjw6H066204 for perforce@freebsd.org; Sun, 21 Jun 2009 20:45:58 GMT (envelope-from andre@freebsd.org) Date: Sun, 21 Jun 2009 20:45:58 GMT Message-Id: <200906212045.n5LKjw6H066204@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to andre@freebsd.org using -f From: Andre Oppermann To: Perforce Change Reviews Cc: Subject: PERFORCE change 164830 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 20:45:59 -0000 http://perforce.freebsd.org/chv.cgi?CH=164830 Change 164830 by andre@andre_t61 on 2009/06/21 20:45:25 Undo the following changes which happend before the branch point of tcp_new. The original version was correct based on a full reading of RFC1323 and the consesus of IETF TCPM. Eventually the problem this was supposed to solve had a different origin. See mainling list archives. svn r173771 silby Comment out the syncache's test which ensures that hosts which negotiate TCP timestamps in the initial SYN packet actually use them in the rest of the connection. Unfortunately, during the 7.0 testing cycle users have already found network devices that violate this constraint. RFC 1323 states 'and may send a TSopt in other segments' rather than 'and MUST send', so we must allow it. svn r174545 kmacy Remove spurious timestamp check. RFC 1323 explicitly states that timestamps MAY be transmitted if negotiated. Affected files ... .. //depot/projects/tcp_new/netinet/tcp_syncache.c#3 edit Differences ... ==== //depot/projects/tcp_new/netinet/tcp_syncache.c#3 (text+ko) ==== @@ -917,12 +917,24 @@ goto failed; } + /* + * If timestamps were present in the SYN and we accepted + * them in our SYN|ACK we require them to be present from + * now on. And vice versa. + */ + if ((sc->sc_flags & SCF_TIMESTAMP) && !(to->to_flags & TOF_TS)) { + if ((s = tcp_log_addrs(inc, th, NULL, NULL))) + log(LOG_DEBUG, "%s; %s: Timestamp missing, " + "segment rejected\n", s, __func__); + goto failed; + } if (!(sc->sc_flags & SCF_TIMESTAMP) && (to->to_flags & TOF_TS)) { if ((s = tcp_log_addrs(inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: Timestamp not expected, " "segment rejected\n", s, __func__); goto failed; } + /* * If timestamps were negotiated the reflected timestamp * must be equal to what we actually sent in the SYN|ACK. From owner-p4-projects@FreeBSD.ORG Sun Jun 21 21:05:20 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id ED6761065674; Sun, 21 Jun 2009 21:05:19 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AB0471065670 for ; Sun, 21 Jun 2009 21:05:19 +0000 (UTC) (envelope-from gabor@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 97FD58FC17 for ; Sun, 21 Jun 2009 21:05:19 +0000 (UTC) (envelope-from gabor@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LL5Jgd078759 for ; Sun, 21 Jun 2009 21:05:19 GMT (envelope-from gabor@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LL5Jh6078757 for perforce@freebsd.org; Sun, 21 Jun 2009 21:05:19 GMT (envelope-from gabor@freebsd.org) Date: Sun, 21 Jun 2009 21:05:19 GMT Message-Id: <200906212105.n5LL5Jh6078757@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gabor@freebsd.org using -f From: Gabor Kovesdan To: Perforce Change Reviews Cc: Subject: PERFORCE change 164831 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 21:05:20 -0000 http://perforce.freebsd.org/chv.cgi?CH=164831 Change 164831 by gabor@gabor_server on 2009/06/21 21:04:42 MFHg: - Clean up esdb and csmapper Makefile structures. Tied to generalize the building and made a mini-framework for these pieces of metadata. It seems like a misc item but actually conversion tables are very important and thus we need an easy way to add/modify conversion tables. - Fixed some issues showing up in the GNU regression tests by adding -INTERNAL and -SWAPPED encoding forms for UTF/UCS family. The former always means using the machine byte order, while the latter one is the swapped byte order. GNU regression tests use UCS-4-INTERNAL and by implementing it in a compatible way, lot of regressions went away in other encodings, as well. - Finally really fix BOM handling - Nits in the test suite Affected files ... .. //depot/projects/soc2009/gabor_iconv/extracted/TESTING-HOWTO#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/Makefile#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/check-stateful#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/check-stateless#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/table-from.c#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/table-to.c#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/test-shiftseq.c#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/UTF1632/citrus_utf1632.c#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/APPLE/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/APPLE/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/AST/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/AST/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/BIG5/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/BIG5/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/CNS/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/CNS/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/CP/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/CP/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/EBCDIC/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/EBCDIC/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/GB/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/GB/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/GEORGIAN/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/GEORGIAN/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/ISO-8859/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/ISO-8859/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/ISO646/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/ISO646/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/JIS/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/JIS/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/KAZAKH/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/KAZAKH/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/KOI/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/KOI/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/KS/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/KS/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/MISC/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/MISC/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/Makefile#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/Makefile.inc#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/Makefile.part#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/TCVN/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/TCVN/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/APPLE/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/APPLE/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/AST/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/AST/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/BIG5/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/BIG5/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/CP/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/CP/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/DEC/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/DEC/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/EBCDIC/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/EBCDIC/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/EUC/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/EUC/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/GB/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/GB/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/GEORGIAN/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/GEORGIAN/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/ISO-2022/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/ISO-2022/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/ISO-8859/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/ISO-8859/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/ISO646/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/ISO646/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/KAZAKH/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/KAZAKH/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/KOI/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/KOI/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/MISC/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/MISC/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/Makefile#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/Makefile.inc#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/Makefile.part#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/TCVN/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/TCVN/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/UTF/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/UTF/Makefile.inc#2 delete .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/UTF/UTF.alias#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/UTF/UTF.part#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/iconv/Makefile#2 edit Differences ... ==== //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/Makefile#2 (text+ko) ==== @@ -112,7 +112,7 @@ # -$(srcdir)/check-stateless $(srcdir) JIS_X0208 # redundant, see EUC-JP # -$(srcdir)/check-stateless $(srcdir) JIS_X0212 # redundant, see EUC-JP -$(srcdir)/check-stateless $(srcdir) ISO646-CN -# -$(srcdir)/check-stateless $(srcdir) GB_2312-80 # redundant, see EUC-CN + -$(srcdir)/check-stateless $(srcdir) GB_2312-80 # redundant, see EUC-CN -$(srcdir)/check-stateless $(srcdir) ISO-IR-165 # -$(srcdir)/check-stateless $(srcdir) KSC_5601 # redundant, see EUC-KR # /* CJK encodings */ @@ -129,7 +129,7 @@ { cat $(srcdir)/GB18030-BMP.TXT ; ./gengb18030z ; } | sort > GB18030.TXT && \ $(srcdir)/check-stateless . GB18030 && \ -$(RM) -r gengb18030z gengb18030z.dSYM GB18030.TXT - -$(srcdir)/check-stateful $(srcdir) ISO-2022-CN +# -$(srcdir)/check-stateful $(srcdir) ISO-2022-CN -$(srcdir)/check-stateful $(srcdir) ISO-2022-CN-EXT -$(srcdir)/check-stateful $(srcdir) HZ -$(srcdir)/check-stateless $(srcdir) EUC-TW ==== //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/check-stateful#2 (text+ko) ==== @@ -8,9 +8,8 @@ # charset, modified for use in filenames. charsetf=`echo "$charset" | sed -e 's,:,-,g'` -../../../../usr.bin/iconv/iconv -f "$charset" -t UTF-8 < "${srcdir}"/"$charsetf"-snippet > tmp-snippet -cmp "${srcdir}"/"$charsetf"-snippet.UTF-8 tmp-snippet -../../../../usr.bin/iconv/iconv -f UTF-8 -t "$charset" < "${srcdir}"/"$charsetf"-snippet.UTF-8 > tmp-snippet -cmp "${srcdir}"/"$charsetf"-snippet tmp-snippet -rm -f tmp-snippet +../../../../usr.bin/iconv/iconv -f "$charset" -t UTF-8 < "${srcdir}"/"$charsetf"-snippet > tmp-"$charsetf"-snippet.UTF-8 +cmp "${srcdir}"/"$charsetf"-snippet.UTF-8 tmp-"$charsetf"-snippet.UTF-8 +../../../../usr.bin/iconv/iconv -f UTF-8 -t "$charset" < "${srcdir}"/"$charsetf"-snippet.UTF-8 > tmp-"$charsetf"-snippet +cmp "${srcdir}"/"$charsetf"-snippet tmp-"$charsetf"-snippet exit 0 ==== //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/check-stateless#2 (text+ko) ==== @@ -26,7 +26,6 @@ fi cmp tmp-orig-"$charsetf".INVERSE.TXT tmp-"$charsetf".INVERSE.TXT 2> /dev/null -rm -f tmp-"$charsetf".TXT tmp-"$charsetf".INVERSE.TXT tmp-noprecomposed-"$charsetf".TXT tmp-orig-"$charsetf".INVERSE.TXT exit 0 # For a new encoding: # You can create the "$charsetf".TXT like this: ==== //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/table-from.c#2 (text+ko) ==== @@ -110,7 +110,7 @@ SET_BINARY(fileno(stdout)); #endif - cd = iconv_open("UCS-4",charset); + cd = iconv_open("UCS-4-INTERNAL",charset); if (cd == (iconv_t)(-1)) { perror("iconv_open"); exit(1); ==== //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/table-to.c#2 (text+ko) ==== @@ -25,8 +25,6 @@ #include "iconv.h" #include -//#include "binary-io.h" - #include "test.h" int main (int argc, char* argv[]) @@ -45,7 +43,7 @@ SET_BINARY(fileno(stdout)); #endif - cd = iconv_open(charset,"UCS-4"); + cd = iconv_open(charset,"UCS-4-INTERNAL"); if (cd == (iconv_t)(-1)) { perror("iconv_open"); exit(1); @@ -89,8 +87,8 @@ } else if (inbytesleft == 0 && i >= 0xe0000 && i < 0xe0080) { /* Language tags may silently be dropped. */ } else { - fprintf(stderr,"0x%02X: inbytes = %ld, outbytes = %ld\n",i,(long)(sizeof(unsigned int)-inbytesleft),(long)(sizeof(buf)-outbytesleft)); - exit(1); +// fprintf(stderr,"0x%02X: inbytes = %ld, outbytes = %ld\n",i,(long)(sizeof(unsigned int)-inbytesleft),(long)(sizeof(buf)-outbytesleft)); + exit(1); } } } ==== //depot/projects/soc2009/gabor_iconv/extracted/gnu/share/iconv/regression-test/test-shiftseq.c#2 (text+ko) ==== @@ -17,7 +17,7 @@ Fifth Floor, Boston, MA 02110-1301, USA. */ #include -#include +#include "iconv.h" #include #include "test.h" ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/UTF1632/citrus_utf1632.c#2 (text+ko) ==== @@ -61,9 +61,16 @@ typedef struct { int preffered_endian; unsigned int cur_max; -#define _ENDIAN_UNKNOWN 0 -#define _ENDIAN_BIG 1 -#define _ENDIAN_LITTLE 2 +#define _ENDIAN_UNKNOWN 0 +#define _ENDIAN_BIG 1 +#define _ENDIAN_LITTLE 2 +#if BYTE_ORDER == BIG_ENDIAN +#define _ENDIAN_INTERNAL _ENDIAN_BIG +#define _ENDIAN_SWAPPED _ENDIAN_LITTLE +#else +#define _ENDIAN_INTERNAL _ENDIAN_LITTLE +#define _ENDIAN_SWAPPED _ENDIAN_BIG +#endif u_int32_t mode; #define _MODE_UTF32 0x00000001U #define _MODE_FORCE_ENDIAN 0x00000002U @@ -361,6 +368,14 @@ case 'l': MATCH(little, ei->preffered_endian = _ENDIAN_LITTLE); break; + case 'i': + case 'I': + MATCH(internal, ei->preffered_endian = _ENDIAN_INTERNAL); + break; + case 's': + case 'S': + MATCH(swapped, ei->preffered_endian = _ENDIAN_SWAPPED); + break; case 'F': case 'f': MATCH(force, ei->mode |= _MODE_FORCE_ENDIAN); ==== //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/csmapper/Makefile#2 (text+ko) ==== @@ -1,48 +1,48 @@ # $NetBSD: Makefile,v 1.13 2007/03/13 16:34:37 tnozaki Exp $ -NOMAN= +FILESDIR= ${CSMAPPERDIR} -.include +SUBDIR= APPLE \ + AST \ + BIG5 \ + CNS \ + CP \ + EBCDIC \ + GB \ + GEORGIAN \ + ISO646 \ + ISO-8859 \ + JIS \ + KAZAKH \ + KOI \ + KS \ + MISC \ + TCVN -.SUFFIXES: .src .646 .mps - -BINDIR?= /usr/share/i18n/csmapper -SRCS_mapper.dir+= mapper.dir.src -SRCS_charset.pivot+= charset.pivot.src - -SUBDIR= APPLE AST BIG5 CNS CP EBCDIC GB GEORGIAN ISO646 ISO-8859 \ - JIS KAZAKH KOI KS MISC TCVN +mapper.dir: ${SUBDIR} + touch $@ .for i in ${SUBDIR} -.if exists(${.CURDIR}/$i/Makefile.inc) -.include "${.CURDIR}/$i/Makefile.inc" -.endif + cat ${i}/mapper.dir.${i} >> $@ .endfor - -# ---------------------------------------------------------------------- +mapper.dir.db: mapper.dir + ${MKCSMAPPER} -m -o $@ $> -mapper.dir: ${SRCS_mapper.dir} - ${_MKTARGET_CREATE} - cat $> > $@ -mapper.dir.db: mapper.dir - ${_MKTARGET_CREATE} - ${TOOL_MKCSMAPPER} -m -o $@ $> FILES+= mapper.dir mapper.dir.db CLEANFILES+= mapper.dir mapper.dir.db -charset.pivot: ${SRCS_charset.pivot} - ${_MKTARGET_CREATE} - cat $> > $@ +charset.pivot: ${SUBDIR} + touch $@ +.for i in ${SUBDIR} + cat ${i}/charset.pivot.${i} >> $@ +.endfor charset.pivot.pvdb: charset.pivot - ${_MKTARGET_CREATE} - ${TOOL_MKCSMAPPER} -p -o $@ $> + ${MKCSMAPPER} -p -o $@ $> + FILES+= charset.pivot charset.pivot.pvdb CLEANFILES+= charset.pivot charset.pivot.pvdb -.src.mps: - ${_MKTARGET_CREATE} - ${TOOL_MKCSMAPPER} -o $@ $> - all: ${FILES} realall: ${FILES} +.include "./Makefile.inc" .include ==== //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/Makefile#2 (text+ko) ==== @@ -1,7 +1,6 @@ # $NetBSD: Makefile,v 1.14 2007/04/01 18:52:30 tnozaki Exp $ -FILESDIR?= /usr/share/i18n/esdb -MKESDB?= ../../util/mkesdb/mkesdb +FILESDIR= ${ESDBDIR} SUBDIR= APPLE \ AST \ @@ -26,32 +25,26 @@ esdb.alias \ esdb.alias.db -CLEANFILES+= esdb.dir \ - esdb.dir.db \ - esdb.alias \ - esdb.alias.db +CLEANFILES= ${FILES} -.SUFFIXES: .src .esdb - -.src.esdb: - ${_MKTARGET_CREATE} - ${MKESDB} -o $@ $> - -esdb.dir: ${SRC_esdb.dir} - ${_MKTARGET_CREATE} - cat $> > $@ +esdb.dir: ${SUBDIR} + touch $@ +.for i in ${SUBDIR} + cat ${i}/esdb.dir.${i} >> $@ +.endfor esdb.dir.db: esdb.dir - ${_MKTARGET_CREATE} ${MKESDB} -m -o $@ $> -esdb.alias: ${SRC_esdb.alias} - ${_MKTARGET_CREATE} - cat $> > $@ +esdb.alias: ${SUBDIR} + touch $@ +.for i in ${SUBDIR} + cat ${i}/esdb.alias.${i} >> $@ +.endfor esdb.alias.db: esdb.alias - ${_MKTARGET_CREATE} ${MKESDB} -m -o $@ $> all: ${FILES} realall: ${FILES} +.include "./Makefile.inc" .include ==== //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/Makefile.part#2 (text+ko) ==== @@ -1,54 +1,82 @@ # $NetBSD: Makefile.part,v 1.6 2008/10/25 22:35:36 apb Exp $ -.for code in ${CODE} # XXX: immediately expand ${CODE} +PARTFILE?= ${CODE}.part +ALIASFILE?= ${CODE}.alias +.if !defined(NO_SEP) +SEP?= - +.endif +.if exists(${PARTFILE}) +PART!= sed '/^\#/d;/^ *$$/d' ${PARTFILE} +.endif +.if !defined(NO_EPREFIX) +CODESETS?= ${PART:C/^/${CODE}${SEP}/} +EPREFIX?= ${CODE}${SEP} +.else +CODESETS?= ${PART} +EPREFIX?= +.endif +ESUBDIR?= ${CODE} +ESDB?= ${CODESETS:C/$/.esdb/:S/:/@/} + +FILES+= ${ESDB} +FILESDIR= ${ESDBDIR}/${ESUBDIR} + +.SUFFIXES: .src .esdb -PARTFILE_${code}?= ${.CURDIR}/${code}/${code}.part -ALIASFILE_${code}?= ${.CURDIR}/${code}/${code}.alias -SEP_${code}?= - -SUBDIR_${code}?= ${code} -${code}_PART!= sed '/^\#/d;/^ *$$/d' ${PARTFILE_${code}} -CODESETS_${code}?= ${${code}_PART:C/^/${code}${SEP_${code}}/} -ESDB_${code}?= ${CODESETS_${code}:C/$/.esdb/:S/:/@/} +.src.esdb: + ${MKESDB} -o $@ $> -FILES+= ${ESDB_${code}} -CLEANFILES+= ${ESDB_${code}} -.for i in ${ESDB_${code}} -FILESDIR_$i?= ${BINDIR}/${SUBDIR_${code}} -.endfor +CLEANFILES+= ${ESDB} +CLEANFILES+= esdb.dir.${ESUBDIR} +CLEANFILES+= esdb.alias.${ESUBDIR} # ---------------------------------------------------------------------- # esdb.dir # -esdb.dir.${code}: ${PARTFILE_${code}} - ${_MKTARGET_CREATE} - echo "# ${code}" > $@ -.for i in ${${code}_PART} - printf "%-32s%s\n" "${code}${SEP_${code}}$i" \ - "${SUBDIR_${code}}/${code}${SEP_${code}}${i:S/:/@/}.esdb" >> $@ +esdb.dir.${ESUBDIR}: ${PARTFILE} + echo "# ${CODE}" > $@ +.for i in ${PART} + printf "%-32s%s\n" "${EPREFIX}$i" \ + "${ESUBDIR}/${EPREFIX}${i:S/:/@/}.esdb" >> $@ .endfor echo >> $@ -SRC_esdb.dir+= esdb.dir.${code} -CLEANFILES+= esdb.dir.${code} # ---------------------------------------------------------------------- # esdb.alias # -.for i in ${${code}_PART:S/:/@/} -${code}_$i_aliases!= echo \ +.for i in ${PART:S/:/@/} +${CODE}_$i_aliases!= echo \ `sed \ '/^\#/d;/^ *$$/d;/^${i:S/@/:/}[ ]/!d;s/^[^ ]*[ ]*//' \ - ${ALIASFILE_${code}}` + ${ALIASFILE}` .endfor -esdb.alias.${code}: ${PARTFILE_${code}} ${ALIASFILE_${code}} - ${_MKTARGET_CREATE} - echo "# ${code}" > $@ -.for i in ${${code}_PART:S/:/@/} -.for j in ${${code}_$i_aliases} - printf "%-32s%s\n" "$j" "${code}${SEP_${code}}${i:S/@/:/}" >> $@ +esdb.alias.${ESUBDIR}: ${PARTFILE} ${ALIASFILE} + echo "# ${CODE}" > $@ +.for i in ${PART:S/:/@/} +.for j in ${${CODE}_$i_aliases} + printf "%-32s%s\n" "$j" "${EPREFIX}${i:S/@/:/}" >> $@ .endfor .endfor echo >> $@ -SRC_esdb.alias+=esdb.alias.${code} -CLEANFILES+= esdb.alias.${code} + +all: realall +realall: esdb.dir.${ESUBDIR} esdb.alias.${ESUBDIR} codesets tmpclean +codesets: ${ESDB} + +.if !defined(NO_PREPROC) +.for i in ${PART} +.if !exists(${EPREFIX}${i:S/:/@/}.src) +TMPFILES+= ${EPREFIX}${i:S/:/@/}.src +${EPREFIX}${i:S/:/@/}.src: ${CODE}.src + sed ${SED_EXP:S@%%PART%%@${i}@} ${CODE}.src > ${EPREFIX}${i:S/:/@/}.src +.endif +.endfor +.endif + +tmpclean: +.for i in ${TMPFILES} + -/bin/rm ${i} >/dev/null 2>&1 +.endfor -.endfor # code +.include "./Makefile.inc" +.include ==== //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/UTF/UTF.alias#2 (text+ko) ==== @@ -4,7 +4,11 @@ 8 utf-8 utf8 16 utf-16 unicode 16LE utf-16le ucs-2le unicodelittle -16BE utf-16be ucs-2 ucs-2be unicodebig +16BE utf-16be iso-10646-ucs-2 ucs-2 ucs-2be unicodebig csunicode unicode-1-1 csunicode11 +16-INTERNAL ucs-2-internal +16-SWAPPED ucs-2-swapped 32 utf-32 32LE utf-32le ucs-4le -32BE utf-32be ucs-4 ucs-4-internal ucs-4be +32BE utf-32be ucs-4 ucs-4be +32-INTERNAL ucs-4-internal +32-SWAPPED ucs-4-swapped ==== //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/esdb/UTF/UTF.part#2 (text+ko) ==== @@ -5,6 +5,10 @@ 16 16BE 16LE +16-INTERNAL +16-SWAPPED 32 32BE 32LE +32-INTERNAL +32-SWAPPED ==== //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/iconv/Makefile#2 (text+ko) ==== @@ -1,8 +1,10 @@ # $NetBSD: Makefile,v 1.1 2003/06/27 08:40:59 tshiozak Exp $ -BINDIR?= /usr/share/i18n/iconv +FILESDIR= /usr/share/i18n/iconv +FILES+= iconv.dir -FILES+= iconv.dir -FILESDIR= ${BINDIR} +.if !target(beforeinstall) + mkdir -p ${FILESDIR} +.endif .include From owner-p4-projects@FreeBSD.ORG Sun Jun 21 22:19:07 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E64031065670; Sun, 21 Jun 2009 22:19:06 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A27581065672 for ; Sun, 21 Jun 2009 22:19:06 +0000 (UTC) (envelope-from antab@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 8EA208FC15 for ; Sun, 21 Jun 2009 22:19:06 +0000 (UTC) (envelope-from antab@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LMJ6uK085666 for ; Sun, 21 Jun 2009 22:19:06 GMT (envelope-from antab@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5LMIuEU085648 for perforce@freebsd.org; Sun, 21 Jun 2009 22:18:56 GMT (envelope-from antab@FreeBSD.org) Date: Sun, 21 Jun 2009 22:18:56 GMT Message-Id: <200906212218.n5LMIuEU085648@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to antab@FreeBSD.org using -f From: Arnar Mar Sig To: Perforce Change Reviews Cc: Subject: PERFORCE change 164835 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 22:19:08 -0000 http://perforce.freebsd.org/chv.cgi?CH=164835 Change 164835 by antab@antab_farm on 2009/06/21 22:18:49 IFC @ 164784 Affected files ... .. //depot/projects/avr32/src/Makefile.inc1#6 integrate .. //depot/projects/avr32/src/ObsoleteFiles.inc#8 integrate .. //depot/projects/avr32/src/UPDATING#10 integrate .. //depot/projects/avr32/src/bin/df/df.1#2 integrate .. //depot/projects/avr32/src/bin/df/df.c#2 integrate .. //depot/projects/avr32/src/bin/sh/alias.c#3 integrate .. //depot/projects/avr32/src/bin/sh/eval.c#3 integrate .. //depot/projects/avr32/src/bin/sh/eval.h#2 integrate .. //depot/projects/avr32/src/bin/sh/exec.c#2 integrate .. //depot/projects/avr32/src/bin/sh/histedit.c#2 integrate .. //depot/projects/avr32/src/bin/sh/input.c#2 integrate .. //depot/projects/avr32/src/bin/sh/input.h#2 integrate .. //depot/projects/avr32/src/bin/sh/main.c#2 integrate .. //depot/projects/avr32/src/bin/sh/memalloc.c#2 integrate .. //depot/projects/avr32/src/bin/sh/memalloc.h#2 integrate .. //depot/projects/avr32/src/bin/sh/miscbltin.c#3 integrate .. //depot/projects/avr32/src/bin/sh/mkinit.c#2 integrate .. //depot/projects/avr32/src/bin/sh/mksyntax.c#2 integrate .. //depot/projects/avr32/src/bin/sh/output.c#2 integrate .. //depot/projects/avr32/src/bin/sh/parser.c#3 integrate .. //depot/projects/avr32/src/bin/sh/redir.c#2 integrate .. //depot/projects/avr32/src/bin/sh/sh.1#2 integrate .. //depot/projects/avr32/src/bin/sh/trap.c#2 integrate .. //depot/projects/avr32/src/bin/sh/trap.h#2 integrate .. //depot/projects/avr32/src/bin/sh/var.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/CHANGES#3 integrate .. //depot/projects/avr32/src/contrib/bind9/COPYRIGHT#2 integrate .. //depot/projects/avr32/src/contrib/bind9/FAQ#2 integrate .. //depot/projects/avr32/src/contrib/bind9/FAQ.xml#2 integrate .. //depot/projects/avr32/src/contrib/bind9/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/NSEC3-NOTES#1 branch .. //depot/projects/avr32/src/contrib/bind9/README#2 integrate .. //depot/projects/avr32/src/contrib/bind9/README.idnkit#2 integrate .. //depot/projects/avr32/src/contrib/bind9/README.pkcs11#1 branch .. //depot/projects/avr32/src/contrib/bind9/acconfig.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/check-tool.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/check-tool.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/named-checkconf.8#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/named-checkconf.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/named-checkconf.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/named-checkconf.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/named-checkzone.8#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/named-checkzone.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/named-checkzone.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/check/named-checkzone.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/dig.1#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/dig.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/dig.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/dig.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/dighost.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/host.1#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/host.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/host.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/host.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/include/dig/dig.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/nslookup.1#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/nslookup.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/nslookup.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dig/nslookup.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-dsfromkey.8#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-dsfromkey.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-dsfromkey.docbook#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-dsfromkey.html#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.8#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.docbook#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.html#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-keygen.8#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-keygen.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-keygen.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-keygen.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-signzone.8#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-signzone.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-signzone.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssec-signzone.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssectool.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/dnssec/dnssectool.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/bind9.xsl#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/named/bind9.xsl.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/named/builtin.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/client.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/config.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/control.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/controlconf.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/convertxsl.pl#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/builtin.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/client.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/config.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/control.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/globals.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/interfacemgr.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/listenlist.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/log.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/logconf.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/lwaddr.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/lwdclient.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/lwresd.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/lwsearch.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/main.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/notify.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/ns_smf_globals.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/query.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/server.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/sortlist.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/statschannel.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/tkeyconf.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/tsigconf.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/types.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/update.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/xfrout.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/include/named/zoneconf.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/interfacemgr.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/listenlist.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/log.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/logconf.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwaddr.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwdclient.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwderror.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwdgabn.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwdgnba.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwdgrbn.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwdnoop.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwresd.8#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwresd.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwresd.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwresd.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/lwsearch.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/main.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/named.8#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/named.conf.5#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/named.conf.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/named.conf.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/named.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/named.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/notify.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/query.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/server.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/sortlist.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/statschannel.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/bin/named/tkeyconf.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/tsigconf.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/unix/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/unix/include/named/os.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/unix/os.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/update.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/xfrout.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/named/zoneconf.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/nsupdate/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/nsupdate/nsupdate.1#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/nsupdate/nsupdate.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/nsupdate/nsupdate.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/nsupdate/nsupdate.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/include/rndc/os.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc-confgen.8#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc-confgen.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc-confgen.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc-confgen.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc.8#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc.conf#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc.conf.5#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc.conf.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc.conf.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc.docbook#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/rndc.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/unix/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/unix/os.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/util.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/bin/rndc/util.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/config.guess#2 integrate .. //depot/projects/avr32/src/contrib/bind9/config.h.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/configure.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM-book.xml#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch01.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch02.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch03.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch04.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch05.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch06.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch07.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch08.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch09.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.ch10.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Bv9ARM.pdf#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.dig.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.dnssec-dsfromkey.html#1 branch .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.dnssec-keyfromlabel.html#1 branch .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.dnssec-keygen.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.dnssec-signzone.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.host.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.named-checkconf.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.named-checkzone.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.named.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.nsupdate.html#1 branch .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.rndc-confgen.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.rndc.conf.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/arm/man.rndc.html#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-baba-dnsext-acl-reqts-01.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-daigle-napstr-04.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-danisch-dns-rr-smtp-03.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-dnsext-opcode-discover-02.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-durand-dnsop-dynreverse-00.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-2929bis-01.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-axfr-clarify-05.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-dhcid-rr-12.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-dns-name-p-s-00.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-dnssec-2535typecode-change-06.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-dnssec-bis-updates-01.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-dnssec-experiments-01.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-dnssec-online-signing-02.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-dnssec-opt-in-07.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-dnssec-rsasha256-00.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-dnssec-trans-02.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-ds-sha256-05.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-ecc-key-07.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-interop3597-02.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-keyrr-key-signing-flag-12.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-mdns-43.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-nsec3-04.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-nsid-01.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-rfc2536bis-dsa-06.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-rfc2538bis-04.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-rfc2539bis-dhk-06.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-signed-nonexistence-requirements-01.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-tkey-renewal-mode-05.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-trustupdate-threshold-00.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-trustupdate-timers-02.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-tsig-sha-06.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsext-wcard-clarify-10.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsop-bad-dns-res-05.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsop-dnssec-operational-practices-08.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsop-inaddr-required-07.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsop-ipv6-dns-configuration-06.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsop-ipv6-dns-issues-11.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsop-ipv6-transport-guidelines-01.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsop-key-rollover-requirements-02.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsop-respsize-02.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-dnsop-serverid-06.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-enum-e164-gstn-np-05.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-ipv6-node-requirements-08.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ietf-secsh-dns-05.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-ihren-dnsext-threshold-validation-00.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-kato-dnsop-local-zones-00.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/draft-park-ipv6-extensions-dns-pnp-00.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/draft/update#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/misc/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/misc/format-options.pl#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/misc/ipv6#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/misc/migration#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/misc/options#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/misc/sort-options.pl#2 integrate .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/index#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1032.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1033.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1034.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1035.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1101.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1122.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1123.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1183.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1348.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1535.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1536.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1537.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1591.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1611.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1612.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1706.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1712.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1750.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1876.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1886.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1982.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1995.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc1996.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2052.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2104.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2119.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2133.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2136.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2137.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2163.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2168.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2181.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2230.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2308.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2317.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2373.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2374.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2375.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2418.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2535.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2536.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2537.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2538.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2539.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2540.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2541.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2553.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2671.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2672.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2673.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2782.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2825.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2826.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2845.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2874.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2915.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2929.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2930.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc2931.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3007.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3008.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3071.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3090.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3110.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3123.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3152.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3197.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3225.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3226.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3258.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3363.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3364.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3425.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3445.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3467.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3490.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3491.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3492.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3493.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3513.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3596.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3597.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3645.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3655.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3658.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3757.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3833.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3845.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc3901.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4025.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4033.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4034.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4035.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4074.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4159.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4193.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4255.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4343.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4367.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4398.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4408.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4431.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4470.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4634.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4641.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4648.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc4701.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc5155.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/doc/rfc/rfc952.txt#2 delete .. //depot/projects/avr32/src/contrib/bind9/isc-config.sh.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/README#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/aclocal.m4#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/api#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/daemon.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/ftruncate.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/gettimeofday.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/mktemp.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/putenv.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/readv.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/setenv.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/setitimer.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/strcasecmp.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/strdup.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/strerror.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/strpbrk.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/strsep.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/strtoul.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/utimes.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/bsd/writev.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/config.h.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/configure.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/dst/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/dst/dst_api.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/dst/dst_internal.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/dst/hmac_link.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/dst/md5.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/dst/md5_dgst.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/dst/md5_locl.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/dst/support.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/arpa/inet.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/arpa/nameser.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/arpa/nameser_compat.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/fd_setsize.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/hesiod.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/irp.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/irs.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/assertions.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/ctl.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/dst.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/eventlib.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/heap.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/irpmarshall.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/list.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/logging.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/memcluster.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/misc.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/platform.h.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/isc/tree.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/netdb.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/netgroup.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/res_update.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/resolv.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/include/resolv_mt.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_addr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_cidr_ntop.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_cidr_pton.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_data.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_lnaof.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_makeaddr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_net_ntop.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_net_pton.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_neta.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_netof.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_network.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_ntoa.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_ntop.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/inet_pton.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/inet/nsap_addr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/dns.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/dns_gr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/dns_ho.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/dns_nw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/dns_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/dns_pr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/dns_pw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/dns_sv.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gai_strerror.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gen.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gen_gr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gen_ho.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gen_ng.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gen_nw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gen_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gen_pr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gen_pw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gen_sv.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getaddrinfo.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getgrent.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getgrent_r.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gethostent.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/gethostent_r.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getnameinfo.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getnetent.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getnetent_r.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getnetgrent.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getnetgrent_r.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getprotoent.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getprotoent_r.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getpwent.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getpwent_r.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getservent.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/getservent_r.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/hesiod.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/hesiod_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irp.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irp_gr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irp_ho.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irp_ng.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irp_nw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irp_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irp_pr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irp_pw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irp_sv.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irpmarshall.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irs_data.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irs_data.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/irs_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/lcl.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/lcl_gr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/lcl_ho.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/lcl_ng.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/lcl_nw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/lcl_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/lcl_pr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/lcl_pw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/lcl_sv.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nis.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nis_gr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nis_ho.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nis_ng.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nis_nw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nis_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nis_pr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nis_pw.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nis_sv.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/nul_ng.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/pathnames.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/irs/util.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/assertions.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/assertions.mdoc#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/base64.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/bitncmp.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/bitncmp.mdoc#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/ctl_clnt.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/ctl_p.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/ctl_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/ctl_srvr.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/ev_connects.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/ev_files.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/ev_streams.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/ev_timers.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/ev_waits.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/eventlib.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/eventlib.mdoc#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/eventlib_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/heap.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/heap.mdoc#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/hex.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/logging.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/logging.mdoc#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/logging_p.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/memcluster.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/memcluster.mdoc#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/movefile.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/tree.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/isc/tree.mdoc#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/make/includes.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/make/mkdep.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/make/rules.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/mkinstalldirs#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/ns_date.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/ns_name.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/ns_netint.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/ns_parse.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/ns_print.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/ns_samedomain.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/ns_sign.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/ns_ttl.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/nameser/ns_verify.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/port/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/port/freebsd/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/port/freebsd/include/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/port/freebsd/include/sys/bitypes.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/port_after.h.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/port_before.h.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/Makefile.in#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/herror.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/mtctxres.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_comp.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_data.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_debug.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_debug.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_findzonecut.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_init.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_mkquery.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_mkupdate.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_mkupdate.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_private.h#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_query.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_send.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_sendsigned.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind/resolv/res_update.c#2 delete .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/api#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/check.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/getaddresses.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/include/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/include/bind9/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/include/bind9/check.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/include/bind9/getaddresses.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/include/bind9/version.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/bind9/version.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/acache.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/acl.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/adb.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/api#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/byaddr.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/cache.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/callbacks.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/compress.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/db.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dbiterator.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dbtable.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/diff.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dispatch.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dlz.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dnssec.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/ds.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dst_api.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dst_internal.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dst_lib.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dst_openssl.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dst_parse.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dst_parse.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/dst_result.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/forward.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/gen-unix.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/gen.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/gssapi_link.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/gssapictx.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/hmac_link.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/acache.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/acl.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/adb.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/bit.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/byaddr.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/cache.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/callbacks.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/cert.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/compress.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/db.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/dbiterator.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/dbtable.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/diff.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/dispatch.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/dlz.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/dnssec.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/ds.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/events.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/fixedname.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/forward.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/iptable.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/journal.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/keyflags.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/keytable.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/keyvalues.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/lib.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/log.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/lookup.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/master.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/masterdump.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/message.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/name.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/ncache.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/nsec.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/nsec3.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/opcode.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/order.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/peer.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/portlist.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rbt.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rcode.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rdata.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rdataclass.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rdatalist.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rdataset.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rdatasetiter.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rdataslab.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rdatatype.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/request.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/resolver.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/result.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/rootns.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/sdb.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/sdlz.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/secalg.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/secproto.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/soa.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/ssu.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/stats.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/tcpmsg.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/time.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/timer.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/tkey.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/tsig.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/ttl.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/types.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/validator.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/version.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/view.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/xfrin.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/zone.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/zonekey.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dns/zt.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dst/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dst/dst.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dst/gssapi.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dst/lib.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/include/dst/result.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/iptable.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/journal.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/key.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/keytable.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/lib.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/log.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/lookup.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/master.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/masterdump.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/message.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/name.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/ncache.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/nsec.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/nsec3.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/openssl_link.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/openssldh_link.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/openssldsa_link.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/opensslrsa_link.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/order.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/peer.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/portlist.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rbt.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rbtdb.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rbtdb.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rbtdb64.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rbtdb64.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rcode.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/any_255/tsig_250.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/any_255/tsig_250.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/ch_3/a_1.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/ch_3/a_1.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/afsdb_18.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/afsdb_18.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/cert_37.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/cert_37.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/cname_5.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/cname_5.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/dlv_32769.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/dlv_32769.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/dname_39.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/dname_39.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/dnskey_48.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/dnskey_48.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/ds_43.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/ds_43.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/gpos_27.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/gpos_27.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/hinfo_13.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/hinfo_13.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/ipseckey_45.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/ipseckey_45.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/isdn_20.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/isdn_20.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/key_25.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/key_25.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/loc_29.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/loc_29.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mb_7.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mb_7.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/md_3.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/md_3.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mf_4.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mf_4.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mg_8.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mg_8.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/minfo_14.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/minfo_14.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mr_9.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mr_9.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mx_15.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/mx_15.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/ns_2.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/ns_2.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/nsec3_50.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/nsec3_50.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/nsec3param_51.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/nsec3param_51.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/nsec_47.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/nsec_47.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/null_10.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/null_10.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/nxt_30.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/nxt_30.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/opt_41.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/opt_41.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/proforma.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/proforma.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/ptr_12.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/ptr_12.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/rp_17.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/rp_17.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/rrsig_46.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/rrsig_46.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/rt_21.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/rt_21.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/sig_24.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/sig_24.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/soa_6.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/soa_6.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/spf_99.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/spf_99.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/sshfp_44.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/sshfp_44.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/tkey_249.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/tkey_249.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/txt_16.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/txt_16.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/unspec_103.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/unspec_103.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/x25_19.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/generic/x25_19.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/hs_4/a_1.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/hs_4/a_1.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/a6_38.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/a6_38.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/a_1.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/a_1.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/aaaa_28.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/aaaa_28.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/apl_42.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/apl_42.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/dhcid_49.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/dhcid_49.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/kx_36.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/kx_36.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/naptr_35.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/naptr_35.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/nsap-ptr_23.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/nsap-ptr_23.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/nsap_22.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/nsap_22.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/px_26.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/px_26.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/srv_33.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/srv_33.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/wks_11.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/in_1/wks_11.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/rdatastructpre.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdata/rdatastructsuf.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdatalist.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdatalist_p.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdataset.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdatasetiter.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rdataslab.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/request.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/resolver.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/result.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/rootns.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/sdb.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/sdlz.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/soa.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/spnego.asn1#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/spnego.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/spnego.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/spnego_asn1.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/spnego_asn1.pl#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/dns/ssu.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/stats.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/tcpmsg.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/time.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/timer.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/tkey.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/tsig.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/ttl.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/validator.c#3 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/version.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/view.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/xfrin.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/zone.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/zonekey.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/dns/zt.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/alpha/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/alpha/include/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/alpha/include/isc/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/alpha/include/isc/atomic.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/api#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/assertions.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/base32.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/isc/base64.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/bitstring.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/buffer.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/bufferlist.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/commandline.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/entropy.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/error.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/event.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/fsaccess.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/hash.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/heap.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/hex.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/hmacmd5.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/hmacsha.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/httpd.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/isc/ia64/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/ia64/include/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/ia64/include/isc/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/ia64/include/isc/atomic.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/app.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/assertions.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/base32.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/base64.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/bitstring.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/boolean.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/buffer.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/bufferlist.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/commandline.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/entropy.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/error.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/event.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/eventclass.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/file.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/formatcheck.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/fsaccess.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/hash.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/heap.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/hex.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/hmacmd5.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/hmacsha.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/httpd.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/interfaceiter.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/ipv6.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/iterated_hash.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/lang.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/lex.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/lfsr.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/lib.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/list.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/log.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/magic.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/md5.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/mem.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/msgcat.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/msgs.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/mutexblock.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/netaddr.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/netscope.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/ondestroy.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/os.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/parseint.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/platform.h.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/portset.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/print.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/quota.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/radix.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/random.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/ratelimiter.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/refcount.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/region.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/resource.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/result.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/resultclass.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/rwlock.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/serial.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/sha1.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/sha2.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/sockaddr.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/socket.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/stats.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/stdio.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/stdlib.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/string.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/symtab.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/task.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/taskpool.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/timer.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/types.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/util.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/version.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/include/isc/xml.h#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/isc/inet_aton.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/inet_ntop.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/inet_pton.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/iterated_hash.c#1 branch .. //depot/projects/avr32/src/contrib/bind9/lib/isc/lex.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/lfsr.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/lib.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/log.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/md5.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/mem.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/mips/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/mips/include/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/mips/include/isc/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/mips/include/isc/atomic.h#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/mutexblock.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/netaddr.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/netscope.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/nls/Makefile.in#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/nls/msgcat.c#2 integrate .. //depot/projects/avr32/src/contrib/bind9/lib/isc/noatomic/Makefile.in#2 integrate >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Mon Jun 22 04:19:43 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 43DC01065675; Mon, 22 Jun 2009 04:19:43 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EFA1F1065672 for ; Mon, 22 Jun 2009 04:19:42 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id DC0FC8FC0A for ; Mon, 22 Jun 2009 04:19:42 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5M4JgJu028401 for ; Mon, 22 Jun 2009 04:19:42 GMT (envelope-from dforsyth@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5M4Jg4N028399 for perforce@freebsd.org; Mon, 22 Jun 2009 04:19:42 GMT (envelope-from dforsyth@FreeBSD.org) Date: Mon, 22 Jun 2009 04:19:42 GMT Message-Id: <200906220419.n5M4Jg4N028399@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to dforsyth@FreeBSD.org using -f From: David Forsythe To: Perforce Change Reviews Cc: Subject: PERFORCE change 164836 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2009 04:19:44 -0000 http://perforce.freebsd.org/chv.cgi?CH=164836 Change 164836 by dforsyth@squirrel on 2009/06/22 04:18:50 Added a few fields to pkg_plist. Affected files ... .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#23 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#22 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_file.c#5 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_file.h#4 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#15 edit .. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#12 edit .. //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#16 edit Differences ... ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#23 (text+ko) ==== @@ -237,6 +237,44 @@ return (pkg_plist_mtree_file(&p->plist)); } +/* Other properties. */ + +int +pkg_extract_in_place(struct pkg *p) +{ + if (p == NULL) + arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + if (pkg_parse_plist(p) != OK) + return (PKG_PARSE_NOT_OK); + + return (pkg_plist_extract_in_place(&p->plist)); +} + +int +pkg_preserve(struct pkg *p) +{ + if (p == NULL) + arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + if (pkg_parse_plist(p) != OK) + return (PKG_PARSE_NOT_OK); + + return (pkg_plist_preserve(&p->plist)); +} + +int +pkg_complete(struct pkg *p) +{ + if (p == NULL) + arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT); + + if (pkg_parse_plist(p) != OK) + return (PKG_PARSE_NOT_OK); + + return (pkg_plist_complete(&p->plist)); +} + /* These need to be renamed. */ void ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#22 (text+ko) ==== @@ -67,6 +67,8 @@ const char *pkg_file_group(struct pkg_file *pf); +const char *pkg_file_mode(struct pkg_file *pf); + int pkg_file_set_path(struct pkg_file *pf, const char *path); int pkg_file_set_md5(struct pkg_file *pf, const char *md5); @@ -75,6 +77,8 @@ int pkg_file_set_group(struct pkg_file *pf, const char *group); +int pkg_file_set_mode(struct pkg_file *pf, const char *mode); + /* pkg_dep */ struct pkg_dep; @@ -115,6 +119,12 @@ char *pkg_mtree_file(struct pkg *p); +int pkg_extract_in_place(struct pkg *p); + +int pkg_preserve(struct pkg *p); + +int pkg_complete(struct pkg *p); + int pkg_set_ident(struct pkg *p, const char *ident); int pkg_set_name(struct pkg *p, const char *name); ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_file.c#5 (text+ko) ==== @@ -4,6 +4,9 @@ #include "pkg_file.h" #include "pkg.h" +/* TODO: Evolve these functions to check for the actual existance of + * users, groups, mode validity. Add md5 comparison functions, etc... */ + struct pkg_file * pkg_file_new() { @@ -32,6 +35,15 @@ return (pf->md5); } +const char * +pkg_file_mode(struct pkg_file *pf) +{ + if (pf == NULL) + return (NULL); + + return (pf->mode); +} + /* If NULL is returned from pkg_file_owner or pkg_file_group, assume the * default owner and group. */ @@ -92,3 +104,13 @@ pf->group = group; return (OK); } + +int +pkg_file_set_mode(struct pkg_file *pf, const char *mode) +{ + if (pf == NULL) + return (NOT_OK); + + pf->mode = mode; + return (OK); +} ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_file.h#4 (text+ko) ==== @@ -10,6 +10,7 @@ const char *md5; const char *owner; const char *group; + const char *mode; TAILQ_ENTRY(pkg_file) next; }; ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#15 (text+ko) ==== @@ -16,10 +16,13 @@ #include "pkgdb.h" #include "pkg.h" +/* TODO: Create plist setter functions for building packages. */ + struct parse_state { enum plist_elem last_elem; char *owner; char *group; + char *mode; }; void @@ -31,6 +34,7 @@ st->last_elem = PLIST_UNKNOWN; st->owner = NULL; st->group = NULL; + st->mode = NULL; } struct pkg_plist * @@ -71,6 +75,10 @@ /* TODO: Write this. */ + pl->extract_in_place = 0; + pl->preserve = 0; + pl->complete = 0; + pl->parsed = 0; } @@ -101,6 +109,8 @@ if (pl == NULL) return (NOT_OK); + + pkg_plist_reset(pl); /* Not sure if this is how I still want to do this, but for now, hold * a copy of the text. */ @@ -109,8 +119,10 @@ return (MEMORY_ERR); pl->text = textp; - - /* XXX: Use fgets(), dummy. */ + + /* TODO: Use fgets(), and have the different lists have their own copy + * of information so that packages can be freely manipulated without + * worrying about ruining other instances of a package. */ pkg_plist_pkg_file_list_init(pl); pkg_plist_pkg_dep_list_init(pl); set_parse_state_default(&st); @@ -128,7 +140,7 @@ /* Consider a dirty flag for these lists? */ #if 0 - if (s != 0) { + if (s != PARSE_OK) { /* bad parse. */ /* free a bunch of stuff. */ return (NOT_OK); @@ -183,13 +195,24 @@ ent = pl_entry_new(PLIST_EXEC, argument, NULL); else if (strcmp(command, PLIST_CMD_UNEXEC) == 0) ent = pl_entry_new(PLIST_UNEXEC, argument, NULL); - else if (strcmp(command, PLIST_CMD_MODE) == 0) - ent = pl_entry_new(PLIST_MODE, argument, NULL); - else if (strcmp(command, PLIST_CMD_OPTION) == 0) - ent = pl_entry_new(PLIST_OPTION, argument, NULL); #endif - else if (strcmp(command, PLIST_CMD_OWNER) == 0) { - if (line_len == strlen(PLIST_CMD_OWNER) + 1) + else if (strcmp(command, PLIST_CMD_OPTION) == 0) { + if (strcmp(argument, PLIST_OPTION_EXTRACT_IN_PLACE) == 0) { + pl->extract_in_place = 1; + } else if (strcmp(argument, PLIST_OPTION_PRESERVE) == 0) { + pl->preserve = 1; + } else if (strcmp(argument, PLIST_OPTION_COMPLETE) == 0) { + pl->complete = 1; + } else + return (PARSE_FAIL); /* Strict. */ + st->last_elem = PLIST_OPTION; + } else if (strcmp(command, PLIST_CMD_MODE) == 0) { + if (line_len == strlen(PLIST_CMD_MODE) + 1) + st->mode = NULL; + else + st->mode = argument; + } else if (strcmp(command, PLIST_CMD_OWNER) == 0) { + if (line_len == strlen(PLIST_CMD_OWNER) + 1) /* Empty owner line, reset to NULL. */ st->owner = NULL; else @@ -208,8 +231,6 @@ /* Lots more stuff needs to go in here... what a terrible file * format... */ - /* mmm... should probably pull this out into a different - * function. */ if (line_len == strlen(PLIST_CMD_COMMENT) + 1) { /* Empty comment. */ } @@ -230,6 +251,8 @@ } else if (strcmp(argument, PLIST_COMMENT_ORIGIN) == 0) { pl->origin = sep + 1; } else if (strcmp(argument, PLIST_COMMENT_DEPORIGIN) == 0) { + /* NOTE: I'm going to have to adjust the parse so it can + * deal with package versioning in dependencies. */ if (st->last_elem != PLIST_PKGDEP) return (PARSE_FAIL); /* add the the dependency list. */ @@ -294,6 +317,7 @@ pkg_file_set_md5(pf, NULL); pkg_file_set_owner(pf, st->owner); pkg_file_set_group(pf, st->group); + pkg_file_set_mode(pf, st->mode); pkg_plist_pkg_file_list_append(pl, pf); st->last_elem = PLIST_FILE; } @@ -301,6 +325,8 @@ return (s); } +/* pkg_file list manipulation and access. */ + char * pkg_plist_name(struct pkg_plist *pl) { @@ -337,7 +363,32 @@ return (pl->mtree_file); } -/* pkg_file list manipulation and access. */ +int +pkg_plist_extract_in_place(struct pkg_plist *pl) +{ + if (pl == NULL) + arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG); + + return (pl->extract_in_place); +} + +int +pkg_plist_preserve(struct pkg_plist *pl) +{ + if (pl == NULL) + arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG); + + return (pl->preserve); +} + +int +pkg_plist_complete(struct pkg_plist *pl) +{ + if (pl == NULL) + arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG); + + return (pl->complete); +} /* I should really just write a set of generic routine to handle this * whole mess. */ ==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#12 (text+ko) ==== @@ -56,6 +56,13 @@ #define PLIST_COMMENT_DEPORIGIN "DEPORIGIN" #define PLIST_COMMENT_MD5 "MD5" +/* Options */ + +#define PLIST_OPTION_EXTRACT_IN_PLACE "extract-in-place" +#define PLIST_OPTION_PRESERVE "preserve" +/* For dependency inclusive packages. */ +#define PLIST_OPTION_COMPLETE "complete" + struct parse_state; struct pkg_plist { @@ -66,7 +73,10 @@ char *origin; char *display; char *mtree_file; - + short extract_in_place; + short preserve; + short complete; + char *text; /* The entire plist */ struct pkg_file *pf_curr; @@ -103,6 +113,10 @@ char *pkg_plist_origin(struct pkg_plist *pl); char *pkg_plist_mtree_file(struct pkg_plist *pl); +int pkg_plist_extract_in_place(struct pkg_plist *pl); +int pkg_plist_preserve(struct pkg_plist *pl); +int pkg_plist_complete(struct pkg_plist *pl); + void pkg_plist_pkg_file_list_init(struct pkg_plist *pl); struct pkg_file *pkg_plist_pkg_file_list_first(struct pkg_plist *pl); struct pkg_file *pkg_plist_pkg_file_list_last(struct pkg_plist *pl); @@ -124,4 +138,5 @@ void pkg_plist_pkg_dep_list_reset(struct pkg_plist *pl); struct pkg_dep *pkg_plist_pkg_dep_list_next(struct pkg_plist *pl); struct pkg_dep *pkg_plist_pkg_dep_list_first(struct pkg_plist *pl); + #endif ==== //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#16 (text+ko) ==== @@ -14,13 +14,11 @@ /* TODO: Write common error handling functions for pkg_tools. */ -#if 0 -static char opts[] = "a"; +static char opts[] = "abcdDe:EfgGhiIjkKl:LmoO:pPqQrRst:vVW:xX"; static struct option lopts[] = { - {"all", no_argument, NULL, 'a'}, - {NULL, 0, NULL, 0}, // <-- something that pkg_add in 7.2 forgot... + { "all", no_argument, NULL, 'a'}, + {NULL, 0, NULL, 0}, }; -#endif /* Mock pkg_info for testing, */ @@ -73,15 +71,17 @@ void parse_opts(int argc, char **argv) { - /* pointlessly set this. */ - opt_all = 1; - char **a; + int a; - if (argc == 1) + if (argc == 1) { + opt_all = 1; + opt_show_comment = 1; return; - - a = argv; /* give argv something to do. */ - opt_show_all_info = 1; + } + while ((a = getopt_long(argc, argv, opts, lopts, NULL)) != -1) { + /* ... */ + opt_show_all_info = 1; + } } void @@ -130,6 +130,7 @@ const char *md5; const char *owner; const char *group; + const char *mode; /* Just print the basic PKGNAME COMMENT scheme right now. Other * information isn't collected by the library yet. */ @@ -155,6 +156,12 @@ (origin != NULL ? origin : BAD_OR_UNKNOWN_VALUE)); printf("\tmtree file: %s\n", (mtree_file != NULL ? mtree_file : BAD_OR_UNKNOWN_VALUE)); + printf("\textract in place: %s\n", + (pkg_extract_in_place(p) ? "YES" : "NO")); + printf("\tpreserve: %s\n", + (pkg_preserve(p) ? "YES" : "NO")); + printf("\tcomplete: %s\n", + (pkg_complete(p) ? "YES" : "NO")); printf("\tfiles:\n"); pkg_ent_list_init(pkg_file, p); while ((pf = pkg_ent_list_next(pkg_file, p)) != NULL) { @@ -162,6 +169,7 @@ md5 = pkg_file_md5(pf); owner = pkg_file_owner(pf); group = pkg_file_group(pf); + mode = pkg_file_mode(pf); printf("\t\t%s\n", (path != NULL ? path : BAD_OR_UNKNOWN_VALUE)); printf("\t\t\tMD5: %s\n", @@ -170,6 +178,8 @@ (owner != NULL ? owner : BAD_OR_UNKNOWN_VALUE)); printf("\t\t\tGROUP: %s\n", (group != NULL ? group : BAD_OR_UNKNOWN_VALUE)); + printf("\t\t\tMODE: %s\n", + (mode != NULL ? mode : BAD_OR_UNKNOWN_VALUE)); } printf("\tdepends:\n"); From owner-p4-projects@FreeBSD.ORG Mon Jun 22 09:48:49 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5E9551065678; Mon, 22 Jun 2009 09:48:49 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1A4B21065673 for ; Mon, 22 Jun 2009 09:48:49 +0000 (UTC) (envelope-from marinosi@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0785E8FC0A for ; Mon, 22 Jun 2009 09:48:49 +0000 (UTC) (envelope-from marinosi@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5M9mmLa078719 for ; Mon, 22 Jun 2009 09:48:48 GMT (envelope-from marinosi@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5M9mmvg078717 for perforce@freebsd.org; Mon, 22 Jun 2009 09:48:48 GMT (envelope-from marinosi@FreeBSD.org) Date: Mon, 22 Jun 2009 09:48:48 GMT Message-Id: <200906220948.n5M9mmvg078717@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marinosi@FreeBSD.org using -f From: Ilias Marinos To: Perforce Change Reviews Cc: Subject: PERFORCE change 164840 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2009 09:48:50 -0000 http://perforce.freebsd.org/chv.cgi?CH=164840 Change 164840 by marinosi@marinosi_redrum on 2009/06/22 09:48:39 Special device node management added along with slice management (creation/initialization/removal etc). Affected files ... .. //depot/projects/soc2009/marinosi_appaudit/src/sys/conf/files#2 edit .. //depot/projects/soc2009/marinosi_appaudit/src/sys/security/audit/audit.c#6 edit .. //depot/projects/soc2009/marinosi_appaudit/src/sys/security/audit/audit_slice.c#2 edit .. //depot/projects/soc2009/marinosi_appaudit/src/sys/security/audit/audit_slice.h#4 edit Differences ... ==== //depot/projects/soc2009/marinosi_appaudit/src/sys/conf/files#2 (text+ko) ==== @@ -2537,6 +2537,7 @@ security/audit/audit_syscalls.c standard security/audit/audit_trigger.c optional audit security/audit/audit_worker.c optional audit +security/audit/audit_slice.c optional audit security/mac/mac_atalk.c optional mac netatalk security/mac/mac_audit.c optional mac audit security/mac/mac_cred.c optional mac ==== //depot/projects/soc2009/marinosi_appaudit/src/sys/security/audit/audit.c#6 (text) ==== @@ -89,6 +89,9 @@ */ struct audit_slice *audit_base_slice = NULL; +/* Audit slice ptr -helper */ +struct audit_slice *as_ptr = NULL; + /* Audit slices queue */ struct audit_slice_queue audit_slice_q; @@ -631,18 +634,22 @@ audit_slice_create(char *name) { struct audit_slice *as = NULL; - int ret; + int err; - ret = 0; + err = 0; as = malloc(sizeof(*as), M_AUDITSLICE, M_WAITOK | M_ZERO); if ( as == NULL ) - ret = 1; /* Failed to allocate slice */ + err = 1; /* Failed to allocate slice */ + as_ptr = as; TAILQ_INSERT_TAIL(&audit_slice_q, as, as_q); /* Initialize the base slice */ audit_slice_init(as, name); + /* Create the special device node */ + audit_slice_cdev_init(as); + /* Start audit worker thread. */ audit_worker_init(as); } @@ -675,6 +682,8 @@ as->audit_nae_mask.am_success = 0; as->audit_nae_mask.am_failure = 0; + as->as_dev = NULL; + TAILQ_INIT(&(as->audit_q)); as->audit_q_len = 0; as->audit_pre_q_len = 0; @@ -706,6 +715,7 @@ { if (as != NULL) { TAILQ_REMOVE(&audit_slice_q, as, as_q); + destroy_dev(as->as_dev); free(as, M_AUDITSLICE); } } ==== //depot/projects/soc2009/marinosi_appaudit/src/sys/security/audit/audit_slice.c#2 (text+ko) ==== @@ -47,9 +47,11 @@ #include -#include +#include + + + -#define AUDIT_SLICE_DEV_MINOR 0 #define AUDIT_SLICE_DEV_NAME "something" @@ -78,14 +80,11 @@ .d_name = "AUDIT_SLICE_DEV_NAME", /* to be changed */ }; -/* For use with make_dev(9)/destroy_dev(9). - */ -static struct cdev *audit_slice_dev; - /* * Special device methods. */ + /* * Audit slice's device open method. Explicit privilege check isn't used as * this allows file permissions on the special device to be used to grant @@ -93,10 +92,19 @@ */ static int audit_slice_dev_open(struct cdev *dev, int oflags, int devtype, - struct thread *td, struct audit_slice *as) + struct thread *td) { + struct audit_slice *as; int error; + /* + * XXX: Using as_ptr to pass the audit_slice that "owns" the device. + * Refine the implementation and check for better ways to achieve + * that. + */ + as = as_ptr; + dev->si_drv1 = as; + /* Only one process may open the device at a time. */ mtx_lock(&(as->as_dev_mtx)); if (!as->as_dev_isopen) { @@ -114,9 +122,11 @@ */ static int audit_slice_dev_close(struct cdev *dev, int fflag, int devtype, - struct thread *td, struct audit_slice *as) + struct thread *td) +{ + struct audit_slice *as; -{ + as = dev->si_drv1; mtx_lock(&(as->as_dev_mtx)); as->as_dev_isopen = 1; /* Do something here */ @@ -145,7 +155,6 @@ { /* Actual work here */ - int c, error = 0; void *audit_slice_dev_buf; @@ -157,7 +166,7 @@ error = uiomove(audit_slice_dev_buf, c, uio); if (error) break; - (*random_systat.write)(random_buf, c); + //(*random_systat.write)(random_buf, c); } free(audit_slice_dev_buf, M_TEMP); @@ -168,32 +177,36 @@ /* * Ioctl method */ -audit_slice_dev_ioctl(struct cdev *dev, int events, struct thread *td) +static int +audit_slice_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, + struct thread *td) { - /* Do we need ioctl ? */ + return (0); } /* - * poll method.(if needed) + * Poll method.(if needed) */ static int audit_slice_dev_poll(struct cdev *dev, int events, struct thread *td) { - + return (0); } /* Init the character device */ -static void +void audit_slice_cdev_init(struct audit_slice *as) { /* Create the special device file. */ - audit_dev = make_dev(&audit_cdevsw, 0, as->uid, as->gid, as->perms, - as->as_dev_name); + as->as_dev = make_dev(&audit_slice_cdevsw, as->unit, as->uid, as->gid, + as->perms, "%s", as->as_dev_name); } -/* Need to find a way to call the following with a new struct as arg every - * time */ -SYSINIT(audit_slice_cdev_init, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, - audit_slice_cdev_init, NULL); +/* + * Need to find a way to call the following with a new struct as arg every + * time + */ +//SYSINIT(audit_slice_cdev_init, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, +// audit_slice_cdev_init, NULL); ==== //depot/projects/soc2009/marinosi_appaudit/src/sys/security/audit/audit_slice.h#4 (text+ko) ==== @@ -35,6 +35,7 @@ #define AUDIT_SLICE_NAME_LEN 20 #define AUDIT_DEV_NAME_LEN 20 + struct kaudit_record; /* @@ -146,13 +147,16 @@ * Applications need their slice device to submit their audit records. * Device specific variables here. */ + struct cdev *as_dev; char as_dev_name[AUDIT_DEV_NAME_LEN]; - int as_dev_isopen; - struct mtx as_dev_mtx; + int unit; uid_t uid; gid_t gid; int perms; + struct mtx as_dev_mtx; + int as_dev_isopen; + /* * Keep the several audit slices in a list */ @@ -165,6 +169,9 @@ /* Static allocation of the base slice */ extern struct audit_slice *audit_base_slice; +/* Audit slice ptr - helper */ +extern struct audit_slice *as_ptr; + /* Audit slices queue */ extern struct audit_slice_queue audit_slice_q; @@ -178,3 +185,4 @@ void audit_slice_init(struct audit_slice *as, char *name); void audit_slice_create(char *name); void audit_slice_destroy(struct audit_slice *as); +void audit_slice_cdev_init(struct audit_slice *as); From owner-p4-projects@FreeBSD.ORG Mon Jun 22 09:54:56 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 28C2B1065677; Mon, 22 Jun 2009 09:54:56 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DAC711065675 for ; Mon, 22 Jun 2009 09:54:55 +0000 (UTC) (envelope-from tsel@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id C7D158FC17 for ; Mon, 22 Jun 2009 09:54:55 +0000 (UTC) (envelope-from tsel@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5M9stbg079131 for ; Mon, 22 Jun 2009 09:54:55 GMT (envelope-from tsel@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5M9stcs079129 for perforce@freebsd.org; Mon, 22 Jun 2009 09:54:55 GMT (envelope-from tsel@FreeBSD.org) Date: Mon, 22 Jun 2009 09:54:55 GMT Message-Id: <200906220954.n5M9stcs079129@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to tsel@FreeBSD.org using -f From: Tatsiana Elavaya To: Perforce Change Reviews Cc: Subject: PERFORCE change 164841 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2009 09:54:57 -0000 http://perforce.freebsd.org/chv.cgi?CH=164841 Change 164841 by tsel@tsel_mz on 2009/06/22 09:54:28 Work in progress on switching to per rule optimization instruction Introduce mergesort for linked lists algorithm Sort instructions before adding to rule, use listsort to sort groups Fix buffer release bug (noted by Fabio Checconi) Do not store alias as first action command, it's supposed to be log action Affected files ... .. //depot/projects/soc2009/tsel_ipfw/sbin/ipfw/ipfw2.c#7 edit .. //depot/projects/soc2009/tsel_ipfw/sbin/ipfw/listsort.h#1 add .. //depot/projects/soc2009/tsel_ipfw/sys/netinet/ip_fw2.c#4 edit Differences ... ==== //depot/projects/soc2009/tsel_ipfw/sbin/ipfw/ipfw2.c#7 (text+ko) ==== @@ -53,6 +53,8 @@ #include #include +#include "listsort.h" + struct cmdline_opts co; /* global options */ int resvd_set_number = RESVD_SET; @@ -2034,8 +2036,11 @@ #undef NEXT } +LIST_HEAD(insn_match_rule_head, insn_match); +LIST_HEAD(insn_match_group_head, insn_match_group); + struct insn_match_rule { - LIST_HEAD(_match_rule, insn_match) rule_head; + struct insn_match_rule_head rule_head; struct ip_fw *rule; }; @@ -2055,11 +2060,15 @@ int label; }; -LIST_HEAD(insn_match_group_head, insn_match_group); +static LIST_MERGESORT_GENERATE(insn_match_group_sort, insn_match_group_head, insn_match_group, group_entries); + +static LIST_MERGESORT_GENERATE(insn_match_rule_cmd_sort, insn_match_rule_head, insn_match, rule_entries); int insn_eq(ipfw_insn *a, ipfw_insn *b) { + if ((a->len | b->len) & (F_NOT | F_OR)) + return 0; if (F_LEN(a) != F_LEN(b) || a->arg1 != b->arg1 || a->opcode != b->opcode) return 0; switch (a->opcode) { @@ -2130,7 +2139,7 @@ int insn_match_insert(struct insn_match_group_head *group_head, ipfw_insn *cmd, - struct insn_match_rule *rule, int *group_count) + struct insn_match_rule *rule) { struct insn_match_group *g; struct insn_match *m, *new_m; @@ -2154,7 +2163,6 @@ new_m->group = g; LIST_INSERT_HEAD(&g->match_head, new_m, match_entries); LIST_INSERT_HEAD(group_head, g, group_entries); - (*group_count)++; return 0; } @@ -2168,13 +2176,10 @@ free(m); } -int -insn_match_group_cmp(const void *_a, const void *_b) +static int +insn_match_group_cmp(struct insn_match_group *_a, struct insn_match_group *_b) { - struct insn_match_group *a[2] = { - *((struct insn_match_group **) _a), - *((struct insn_match_group **) _b), - }; + struct insn_match_group *a[2] = { _a, _b }; int i; if (a[0] == NULL) @@ -2206,6 +2211,42 @@ } +static int +insn_match_rule_cmd_cmp(struct insn_match *a, struct insn_match *b) +{ + return b->group->rank - a->group->rank; +} + +static int +optimization_filter_groups(struct insn_match_group_head *head) +{ + struct insn_match_group *g, *g_tmp; + int labels_max, group_count; + + group_count = sizeof(labels_max); + if (sysctlbyname("net.inet.ip.fw.optimization_buf_max", + &labels_max, &group_count, NULL, 0) == -1) { + errx(EX_DATAERR, "optimization not supported"); + } + labels_max *= 8; + + group_count = 0; + LIST_FOREACH_SAFE(g, head, group_entries, g_tmp) { + if (group_count >= labels_max || !g->rank) { + while (!LIST_EMPTY(&g->match_head)) { + insn_match_remove(LIST_FIRST(&g->match_head)); + } + LIST_REMOVE(g, group_entries); + continue; + } + g->label = group_count++; + printf("sorted: %d; opcode %d; match_count %d; rank %d\n", + g->label, LIST_FIRST(&g->match_head)->cmd->opcode, + g->match_count, g->rank); + } + return group_count; +} + static void optimization_setup(int enable, int labels) { @@ -2221,33 +2262,33 @@ NULL, 0, &enable, sizeof(enable)) == -1) { errx(EX_DATAERR, "optimization not supported"); } - } void ipfw_optimize(int argc, char **argv) { - struct insn_match_group_head groups[O_LAST_OPCODE]; - struct insn_match_group **groups_sort; + struct insn_match_group_head groups_opcode[O_LAST_OPCODE]; + struct insn_match_group_head groups; struct insn_match_rule *match_rules; struct ip_fw **rules; struct ip_fw *orule; - int c, i, group_count, rules_count, labels_max; + int i, group_count, rules_count; if (co.test_only) { fprintf(stderr, "Testing only, optimization disabled\n"); return; } + LIST_INIT(&groups); for (i = 0; i < O_LAST_OPCODE; i++) { - LIST_INIT(&groups[i]); + LIST_INIT(&groups_opcode[i]); } rules = get_rules_cached(&rules_count); match_rules = safe_calloc(rules_count, sizeof(struct insn_match_rule)); - for (i = 0, group_count = 0; i < rules_count; i++) { + for (i = 0; i < rules_count; i++) { ipfw_insn *cmd; int l; @@ -2267,52 +2308,98 @@ rules[i]->act_ofs -= F_LEN(cmd); memcpy(cmd, cmd + F_LEN(cmd), l * 4); } else { - insn_match_insert(&groups[cmd->opcode], cmd, &match_rules[i], &group_count); + insn_match_insert(&groups_opcode[cmd->opcode], cmd, &match_rules[i]); cmd += F_LEN(cmd); } } } - groups_sort = (struct insn_match_group**) safe_calloc(group_count, sizeof(void*)); - for (i = 0, c = 0; i < O_LAST_OPCODE; i++) { - struct insn_match_group *g; + for (i = 0; i < O_LAST_OPCODE; i++) { + while(!LIST_EMPTY(&groups_opcode[i])) { + struct insn_match_group *g = LIST_FIRST(&groups_opcode[i]); - LIST_FOREACH(g, &groups[i], group_entries) { - groups_sort[c++] = g; + LIST_REMOVE(g, group_entries); + LIST_INSERT_HEAD(&groups, g, group_entries); } } - i = sizeof(labels_max); - if (sysctlbyname("net.inet.ip.fw.optimization_buf_max", - &labels_max, &i, NULL, 0) == -1) { - errx(EX_DATAERR, "optimization not supported"); - } - labels_max *= 8; + insn_match_group_sort(&groups, insn_match_group_cmp); + + group_count = optimization_filter_groups(&groups); + + optimization_setup(0, 0); + + orule = (struct ip_fw*)safe_calloc(1, sizeof(struct ip_fw) + 255*4); + for (i = 0; rules[i]; i++) { + ipfw_insn *cmd, *rcmd; + struct insn_match *m; + ipfw_insn_u32 *optimize_cmd; + int l; + + if (LIST_EMPTY(&match_rules[i].rule_head)) + continue; + + printf("rule %d; before sort: ", rules[i]->rulenum); + LIST_FOREACH(m, &match_rules[i].rule_head, rule_entries) { + printf("optimize %d:%d; ", m->cmd->opcode, m->group->rank); + } + printf("\n"); + insn_match_rule_cmd_sort(&match_rules[i].rule_head, insn_match_rule_cmd_cmp); + printf("rule %d; after sort: ", rules[i]->rulenum); + LIST_FOREACH(m, &match_rules[i].rule_head, rule_entries) { + printf("optimize %d:%d; ", m->cmd->opcode, m->group->rank); + } + printf("\n"); + + memcpy(orule, rules[i], sizeof(struct ip_fw) - 4); + cmd = orule->cmd; + rcmd = rules[i]->cmd; + l = rules[i]->cmd_len; - qsort(groups_sort, group_count, sizeof(void*), insn_match_group_cmp); - for (i = 0; i < group_count && i < labels_max && groups_sort[i]->rank; i++) { - struct insn_match *m = LIST_FIRST(&groups_sort[i]->match_head); - groups_sort[i]->label = i; - printf("sorted: %d; opcode %d; match_count %d; rank %d\n", - groups_sort[i]->label, - m->cmd->opcode, groups_sort[i]->match_count, groups_sort[i]->rank); - } - c = i; - for (; i < group_count; i++) { - while (!LIST_EMPTY(&groups_sort[i]->match_head)) { - insn_match_remove(LIST_FIRST(&groups_sort[i]->match_head)); + while ((rcmd->opcode == O_PROB || rcmd->opcode == O_PROBE_STATE) && l > 0) { + memcpy(cmd, rcmd, F_LEN(rcmd) * 4); + cmd += F_LEN(rcmd); + l -= F_LEN(rcmd); } - } - group_count = c; + + // FIXME + optimize_cmd = (ipfw_insn_u32 *) cmd; + optimize_cmd->o.len = F_INSN_SIZE(ipfw_insn_u32); + optimize_cmd->o.opcode = O_OPTIMIZE; + optimize_cmd->o.arg1 = 0; + optimize_cmd->d[0] = 0; + cmd += optimize_cmd->o.len; + orule->cmd_len += optimize_cmd->o.len; + orule->act_ofs += optimize_cmd->o.len; - optimization_setup(0, 0); + LIST_FOREACH(m, &match_rules[i].rule_head, rule_entries) { + memcpy(cmd, m->cmd, F_LEN(m->cmd) * 4); + cmd += F_LEN(m->cmd); + l -= F_LEN(m->cmd); + } - orule = (struct ip_fw*)safe_calloc(1, sizeof(struct ip_fw) + 255*4); - for (i = 0; rules[i]; i++) { - struct insn_match *m, *m_tmp; + while (l > 0) { + int skip = 0; - memcpy(orule, rules[i], RULESIZE(rules[i])); + LIST_FOREACH(m, &match_rules[i].rule_head, rule_entries) { + if (rcmd == m->cmd) { + skip = 1; + break; + } + } + if (!skip) { + memcpy(cmd, rcmd, F_LEN(rcmd) * 4); + cmd += F_LEN(rcmd); + l -= F_LEN(rcmd); + } + rcmd += F_LEN(rcmd); + } + printf(" insn original: "); + show_ipfw(rules[i], 0, 0); + printf("insn reordered: "); + show_ipfw(orule, 0, 0); + /* LIST_FOREACH_SAFE(m, &match_rules[i].rule_head, rule_entries, m_tmp) { ipfw_insn_u32 optimize_cmd; int cmd_offset = ((int32_t*) m->cmd) - ((int32_t*) rules[i]->cmd); @@ -2334,19 +2421,17 @@ orule->act_ofs += F_LEN(&optimize_cmd.o); // printf("rule %d; cmd %d; offset %d\n", orule->rulenum, m->cmd->opcode, cmd_offset); } - if (!LIST_EMPTY(&match_rules[i].rule_head)) { - int x; + */ - x = orule->rulenum & 0xffff; - if (do_cmd(IP_FW_DEL, &x, sizeof(x))) - errx(EX_DATAERR, "rule %u: setsockopt(IP_FW_DEL)", orule->rulenum); + l = orule->rulenum & 0xffff; + if (do_cmd(IP_FW_DEL, &l, sizeof(l))) + errx(EX_DATAERR, "rule %u: setsockopt(IP_FW_DEL)", orule->rulenum); - x = RULESIZE(orule); - if (do_cmd(IP_FW_ADD, orule, (uintptr_t)&x)) - errx(EX_DATAERR, "rule %u: setsockopt(IP_FW_ADD)", orule->rulenum); - if (co.verbose) - show_ipfw(orule, 0, 0); - } + l = RULESIZE(orule); + if (do_cmd(IP_FW_ADD, orule, (uintptr_t)&l)) + errx(EX_DATAERR, "rule %u: setsockopt(IP_FW_ADD)", orule->rulenum); + if (co.verbose) + show_ipfw(orule, 0, 0); } optimization_setup(1, group_count); @@ -2359,10 +2444,10 @@ if (!inet_aton(host, ipaddr)) { if ((he = gethostbyname(host)) == NULL) - return -1; + return(-1); *ipaddr = *(struct in_addr *)he->h_addr_list[0]; } - return 0; + return(0); } /* @@ -3020,8 +3105,9 @@ /* * various flags used to record that we entered some fields. */ + ipfw_insn_alias alias_cmd; ipfw_insn *have_state = NULL; /* check-state or keep-state */ - ipfw_insn *have_log = NULL, *have_altq = NULL, *have_tag = NULL; + ipfw_insn *have_log = NULL, *have_altq = NULL, *have_tag = NULL, *have_alias = NULL; size_t len; int i; @@ -3053,7 +3139,6 @@ /* [alias ALIAS] */ if (ac > 1 && _substrcmp(*av, "alias") == 0) { int alias_rule; - ipfw_insn_alias *alias_cmd = (ipfw_insn_alias *) action; NEED1("missing alias name"); for (i = 0; isdigit(av[1][i]) || av[1][i] == '+' || av[1][i] == '-'; i++) { ; } @@ -3062,11 +3147,11 @@ alias_rule = alias_lookup_rulenum(av[1]); if (alias_rule > 0) errx(EX_DATAERR, "rule %d already has alias %s", alias_rule, av[1]); - alias_cmd->o.opcode = O_ALIAS; - alias_cmd->o.len = F_INSN_SIZE(ipfw_insn_alias); - strlcpy(alias_cmd->alias, av[1], IPFW_ALIAS_NAME_SIZE); + alias_cmd.o.opcode = O_ALIAS; + alias_cmd.o.len = F_INSN_SIZE(ipfw_insn_alias); + strlcpy(alias_cmd.alias, av[1], IPFW_ALIAS_NAME_SIZE); av += 2; ac -= 2; - action = next_cmd(action); + have_alias = (ipfw_insn *) &alias_cmd; } /* [set N] -- set number (0..RESVD_SET), optional */ @@ -4024,6 +4109,11 @@ bcopy(have_tag, dst, i * sizeof(uint32_t)); dst += i; } + if (have_alias) { + i = F_LEN(have_alias); + bcopy(have_alias, dst, i * sizeof(uint32_t)); + dst += i; + } /* * copy all other actions */ ==== //depot/projects/soc2009/tsel_ipfw/sys/netinet/ip_fw2.c#4 (text+ko) ==== @@ -2216,7 +2216,7 @@ mask = 1 << (*ind - 1); do { use = atomic_load_acq_32(&V_optimization_buf_use); - } while (atomic_cmpset_32(&V_optimization_buf_use, use, use | mask) == 0); + } while (atomic_cmpset_32(&V_optimization_buf_use, use, use & ~mask) == 0); *ind = 0; } From owner-p4-projects@FreeBSD.ORG Mon Jun 22 11:28:40 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 53C9F1065672; Mon, 22 Jun 2009 11:28:39 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 13568106566C for ; Mon, 22 Jun 2009 11:28:39 +0000 (UTC) (envelope-from zec@fer.hr) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 009B78FC0C for ; Mon, 22 Jun 2009 11:28:39 +0000 (UTC) (envelope-from zec@fer.hr) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5MBSciG088238 for ; Mon, 22 Jun 2009 11:28:38 GMT (envelope-from zec@fer.hr) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5MBScIZ088236 for perforce@freebsd.org; Mon, 22 Jun 2009 11:28:38 GMT (envelope-from zec@fer.hr) Date: Mon, 22 Jun 2009 11:28:38 GMT Message-Id: <200906221128.n5MBScIZ088236@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zec@fer.hr using -f From: Marko Zec To: Perforce Change Reviews Cc: Subject: PERFORCE change 164847 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2009 11:28:40 -0000 http://perforce.freebsd.org/chv.cgi?CH=164847 Change 164847 by zec@zec_amdx4 on 2009/06/22 11:27:51 V_irtualize flowtable sysctl knobs and counters. Affected files ... .. //depot/projects/vimage-commit2/src/sys/net/flowtable.c#6 edit .. //depot/projects/vimage-commit2/src/sys/net/vnet.h#25 edit Differences ... ==== //depot/projects/vimage-commit2/src/sys/net/flowtable.c#6 (text+ko) ==== @@ -205,48 +205,55 @@ * - support explicit connection state (currently only ad-hoc for DSR) * - V_ flowtable sysctls and nmbflows */ +#ifdef VIMAGE_GLOBALS +int flowtable_enable; +static int flowtable_hits; +static int flowtable_lookups; +static int flowtable_misses; +static int flowtable_frees; +static int flowtable_free_checks; +static int flowtable_max_depth; +static int flowtable_collisions; +static int flowtable_syn_expire; +static int flowtable_udp_expire; +static int flowtable_fin_wait_expire; +static int flowtable_tcp_expire; +static int flowtable_nmbflows; +#endif SYSCTL_NODE(_net_inet, OID_AUTO, flowtable, CTLFLAG_RD, NULL, "flowtable"); -int flowtable_enable = 1; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, enable, CTLFLAG_RW, - &flowtable_enable, 0, "enable flowtable caching."); -static int flowtable_hits = 0; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, hits, CTLFLAG_RD, - &flowtable_hits, 0, "# flowtable hits."); -static int flowtable_lookups = 0; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, lookups, CTLFLAG_RD, - &flowtable_lookups, 0, "# flowtable lookups."); -static int flowtable_misses = 0; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, misses, CTLFLAG_RD, - &flowtable_misses, 0, "#flowtable misses."); -static int flowtable_frees = 0; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, frees, CTLFLAG_RD, - &flowtable_frees, 0, "#flows freed."); -static int flowtable_free_checks = 0; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, free_checks, CTLFLAG_RD, - &flowtable_free_checks, 0, "#flows free checks."); -static int flowtable_max_depth = 0; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, max_depth, CTLFLAG_RD, - &flowtable_max_depth, 0, "max collision list length."); -static int flowtable_collisions = 0; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, collisions, CTLFLAG_RD, - &flowtable_collisions, 0, "#flowtable collisions."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, enable, CTLFLAG_RW, + flowtable_enable, 0, "enable flowtable caching."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, hits, CTLFLAG_RD, + flowtable_hits, 0, "# flowtable hits."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, lookups, + CTLFLAG_RD, flowtable_lookups, 0, "# flowtable lookups."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, misses, CTLFLAG_RD, + flowtable_misses, 0, "#flowtable misses."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, frees, CTLFLAG_RD, + flowtable_frees, 0, "#flows freed."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, free_checks, + CTLFLAG_RD, flowtable_free_checks, 0, "#flows free checks."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, max_depth, + CTLFLAG_RD, flowtable_max_depth, 0, "max collision list length."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, collisions, + CTLFLAG_RD, flowtable_collisions, 0, "#flowtable collisions."); /* * XXX This does not end up updating timeouts at runtime * and only reflects the value for the last table added :-/ */ -static int flowtable_syn_expire = SYN_IDLE; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, syn_expire, CTLFLAG_RW, - &flowtable_syn_expire, 0, "seconds after which to remove syn allocated flow."); -static int flowtable_udp_expire = UDP_IDLE; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, udp_expire, CTLFLAG_RW, - &flowtable_udp_expire, 0, "seconds after which to remove flow allocated to UDP."); -static int flowtable_fin_wait_expire = FIN_WAIT_IDLE; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, fin_wait_expire, CTLFLAG_RW, - &flowtable_fin_wait_expire, 0, "seconds after which to remove a flow in FIN_WAIT."); -static int flowtable_tcp_expire = TCP_IDLE; -SYSCTL_INT(_net_inet_flowtable, OID_AUTO, tcp_expire, CTLFLAG_RW, - &flowtable_tcp_expire, 0, "seconds after which to remove flow allocated to a TCP connection."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, syn_expire, + CTLFLAG_RW, flowtable_syn_expire, 0, + "seconds after which to remove syn allocated flow."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, udp_expire, + CTLFLAG_RW, flowtable_udp_expire, 0, + "seconds after which to remove flow allocated to UDP."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, fin_wait_expire, + CTLFLAG_RW, flowtable_fin_wait_expire, 0, + "seconds after which to remove a flow in FIN_WAIT."); +SYSCTL_V_INT(V_NET, vnet_net, _net_inet_flowtable, OID_AUTO, tcp_expire, + CTLFLAG_RW, flowtable_tcp_expire, 0, + "seconds after which to remove flow allocated to a TCP connection."); /* @@ -256,28 +263,28 @@ * there is no reason why this could not be changed at runtime) * and thus (currently) needs to be set with a tunable. */ -static int nmbflows = 4096; - static int sysctl_nmbflows(SYSCTL_HANDLER_ARGS) { INIT_VNET_NET(curvnet); int error, newnmbflows; - newnmbflows = nmbflows; + newnmbflows = V_flowtable_nmbflows; error = sysctl_handle_int(oidp, &newnmbflow