From owner-freebsd-net Mon Aug 10 00:33:14 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id AAA24199 for freebsd-net-outgoing; Mon, 10 Aug 1998 00:33:14 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from gjp.erols.com (alex-va-n008c079.moon.jic.com [206.156.18.89]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id AAA24174 for ; Mon, 10 Aug 1998 00:33:08 -0700 (PDT) (envelope-from gjp@gjp.erols.com) Received: from gjp.erols.com (gjp@localhost.erols.com [127.0.0.1]) by gjp.erols.com (8.8.8/8.8.7) with ESMTP id DAA04831; Mon, 10 Aug 1998 03:32:41 -0400 (EDT) (envelope-from gjp@gjp.erols.com) X-Mailer: exmh version 2.0.1 12/23/97 To: Andre Oppermann cc: GVB , freebsd-net@FreeBSD.ORG From: "Gary Palmer" Subject: Re: Mail server... In-reply-to: Your message of "Wed, 05 Aug 1998 20:04:00 +0200." <35C89E8F.EB696A97@pipeline.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Mon, 10 Aug 1998 03:32:40 -0400 Message-ID: <4827.902734360@gjp.erols.com> Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Andre Oppermann wrote in message ID <35C89E8F.EB696A97@pipeline.ch>: > I would suggest something like this: > 1x NetApp Filer for maildir storage (does RAID5 and backup) Incorrect. It does RAID 4, and in software. That, coupled with the fact that NFS over 1500 byte ethernet is not the best of ideas makes me wonder why you recommended it. Yes, it will work. It may even scale a bit. But it is far from an optimal solution. (if you did NFS over CDDI or FDDI it would work a bit better as you wouldn't need to scale the NFS read/write sizes down to avoid fragmentation) There are a number of other solutions, varying in technical skill required, which use unix machines as message stores and then use lower-powered machines infront of the message stores to direct inbound traffic. This way you can have multiple pop servers, and the users are directed transparently to the one which holds their mail without their changing anything. You can either do this simply (a POP3 proxy isn't that difficult), or you can go wild and write your own communications protocol to fetch & store messages on the stores, and have the customer-facing machines do more work. This scenario works ... we currently have 400k+ users in the proxied pop environment, with over 30k of them being online at any one time and checking their mail. We see (typically) 600-700 concurrent POP3 sessions. However, it does require a programmer to set up this way ... the NFS version works for anyone, but I (personally) wouldn't like to scale it up. > > also appriciated. Also, does FreeBSD take advantage of dual processers? Is > FreeBSD won't take advantage of two processors until release 3.0 which > due in october. And I wouldn't recommend SMP for a production environment unless you know what you are doing... Heavily I/O bound machines will not benefit because of the way the kernel is using locks. Gary -- Gary Palmer FreeBSD Core Team Member FreeBSD: Turning PC's into workstations. See http://www.FreeBSD.ORG/ for info To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Mon Aug 10 00:46:51 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id AAA25383 for freebsd-net-outgoing; Mon, 10 Aug 1998 00:46:51 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from news1.gtn.com (news1.gtn.com [192.109.159.3]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id AAA25378 for ; Mon, 10 Aug 1998 00:46:48 -0700 (PDT) (envelope-from andreas@klemm.gtn.com) Received: (from uucp@localhost) by news1.gtn.com (8.8.6/8.8.6) with UUCP id JAA20853; Mon, 10 Aug 1998 09:45:08 +0200 (MET DST) Received: (from andreas@localhost) by klemm.gtn.com (8.9.1/8.9.1) id JAA11506; Mon, 10 Aug 1998 09:31:30 +0200 (CEST) (envelope-from andreas) Message-ID: <19980810093129.A10340@klemm.gtn.com> Date: Mon, 10 Aug 1998 09:31:29 +0200 From: Andreas Klemm To: =?iso-8859-1?Q?Dag-Erling_Coidan_Sm=F8rgrav?= , net@FreeBSD.ORG Subject: Re: FreeBSD vs. Cisco References: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Mailer: Mutt 0.93.1i In-Reply-To: =?iso-8859-1?Q?=3Cxzpogu1atwe=2Efsf=40hrotti=2Eifi=2Euio=2Eno=3E=3B_from?= =?iso-8859-1?Q?_Dag-Erling_Coidan_Sm=F8rgrav__on_Tue=2C_Aug_04=2C_1998_a?= =?iso-8859-1?Q?t_01:06:09PM_+0200?= X-Disclaimer: A free society is one where it is safe to be unpopular X-Operating-System: FreeBSD 3.0-CURRENT SMP Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Tue, Aug 04, 1998 at 01:06:09PM +0200, Dag-Erling Coidan Smørgrav wrote: > ISTR several reports of FreeBSD machines having seemingly > unexplainable trouble talking to the outside world through a Cisco > router, but can't seem to find anything of relevance in the list > archives. Am I remembering correctly? The background for this question > is that I have a FreeBSD box which seems to never respond to IGMP. IGMP is a Cisco propriarity protocol and used for dynamic routing between Cisco Routers. The advantage of using IGMP or EIGMP is, that you can route IP, IPX and appletalk using this routing protocol. I think you only have to set a static route on the FreeBSD client to the next hop router or you would need to run RIPv2 (which FreeBSD and Cisco can speak) or OSPF¸ then you would need gated on your FreeBSD machine as routing daemon. Avoid RIPv1, it can't handle things like variable length subnet masks ... You should make sure running RIP V2. OSPF is probably best as interior routing protocol, but is a bit trickier to setup. BTW, you could use IGRP or EIGRP (which is better as IGRP) in the Cisco backbone and redistribute RIPv2 routing information. Cisco is able to handle multiple routing protocols, so you should be able to get FreeBSD boxes running without static routes and such. But you then have a little overhead by running 2 routing protocols. -- Andreas Klemm http://www.FreeBSD.ORG/~andreas What gives you 90% more speed, for example, in kernel compilation ? http://www.FreeBSD.ORG/~fsmp/SMP/akgraph-a/graph1.html "NT = Not Today" (Maggie Biggs) ``powered by FreeBSD SMP'' To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Mon Aug 10 03:02:45 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id DAA13638 for freebsd-net-outgoing; Mon, 10 Aug 1998 03:02:45 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from news1.gtn.com (news1.gtn.com [192.109.159.3]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id DAA13619; Mon, 10 Aug 1998 03:02:35 -0700 (PDT) (envelope-from andreas@klemm.gtn.com) Received: (from uucp@localhost) by news1.gtn.com (8.8.6/8.8.6) with UUCP id LAA29077; Mon, 10 Aug 1998 11:45:12 +0200 (MET DST) Received: (from andreas@localhost) by klemm.gtn.com (8.9.1/8.9.1) id LAA05932; Mon, 10 Aug 1998 11:35:05 +0200 (CEST) (envelope-from andreas) Message-ID: <19980810113505.A4032@klemm.gtn.com> Date: Mon, 10 Aug 1998 11:35:05 +0200 From: Andreas Klemm To: Kenjiro Cho , net@FreeBSD.ORG Cc: isdn@FreeBSD.ORG Subject: problems with i4b and altq on FreeBSD-current (was Re: altq-1.1.1 release) References: <199808081853.DAA18600@hotaka.csl.sony.co.jp> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=2oS5YaxWCcQjTEyO X-Mailer: Mutt 0.93.1i In-Reply-To: <199808081853.DAA18600@hotaka.csl.sony.co.jp>; from Kenjiro Cho on Sun, Aug 09, 1998 at 03:53:45AM +0900 X-Disclaimer: A free society is one where it is safe to be unpopular X-Operating-System: FreeBSD 3.0-CURRENT SMP Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org --2oS5YaxWCcQjTEyO Content-Type: text/plain; charset=us-ascii On Sun, Aug 09, 1998 at 03:53:45AM +0900, Kenjiro Cho wrote: > > A new release of ALTQ (version 1.1.1) is now available from > http://www.csl.sony.co.jp/person/kjc/software.html > > This version merges Julian's port to FreeBSD-current and works for > both 2.2.x and -current. I haven't tested it much on -current, though. Hi ! I wanted to give altq a try on my FreeBSD-current machine, where I run the kernel with SMP, CAM, softupdates and i4b (isdn "4" bsd). The machine is my home internet gateway using a passive Teles ISDN card (64 KBit), which connects to the Cisco Router of my ISP. Authentication is PAP. After installing the new altq kernel I can't connect to my ISP anymore, the connection will be established and disconnected very rapidly. It's the first time, I install altq. So I have no major number problem or such. I followed the installation instructions and used the update kit for FreeBSD-current. I copied the additional files in net and netinet into the kernel subdir. At this time I have no altq serverice daemon up and running. I only wanted to boot with the fresh altq kernel. I compared the debugging output of a kernel with and without altq patches. I see that there is an authentication problem, but I'm not that experienced in debugging a PPP connection at startup. Maybe you or the isdn developer see what happens more quickly. In the attachement I send my kernel config file and the kernel messages ... I turned on debugging in i4b ... I send a copy to freebsd-isdn as well to reach the i4b hackers. -- Andreas Klemm http://www.FreeBSD.ORG/~andreas What gives you 90% more speed, for example, in kernel compilation ? http://www.FreeBSD.ORG/~fsmp/SMP/akgraph-a/graph1.html "NT = Not Today" (Maggie Biggs) ``powered by FreeBSD SMP'' --2oS5YaxWCcQjTEyO Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="i4b.normal" normal i4b kernel ================= Aug 10 10:51:15 titan /kernel: Copyright (c) 1992-1998 FreeBSD Inc. Aug 10 10:51:15 titan /kernel: Copyright (c) 1982, 1986, 1989, 1991, 1993 Aug 10 10:51:15 titan /kernel: The Regents of the University of California. All rights reserved. Aug 10 10:51:15 titan /kernel: FreeBSD 3.0-CURRENT #0: Sun Aug 9 11:47:20 CEST 1998 Aug 10 10:51:15 titan /kernel: root@titan.klemm.gtn.com:/home/src/sys/compile/ISDNSMPCAM Aug 10 10:51:15 titan /kernel: Timecounter "i8254" frequency 1193182 Hz cost 3614 ns Aug 10 10:51:15 titan /kernel: CPU: Pentium Pro (686-class CPU) Aug 10 10:51:15 titan /kernel: Origin = "GenuineIntel" Id = 0x619 Stepping=9 Aug 10 10:51:15 titan /kernel: Features=0xfbff Aug 10 10:51:15 titan /kernel: real memory = 83886080 (81920K bytes) Aug 10 10:51:15 titan /kernel: avail memory = 78381056 (76544K bytes) Aug 10 10:51:15 titan /kernel: FreeBSD/SMP: Multiprocessor motherboard Aug 10 10:51:15 titan /kernel: cpu0 (BSP): apic id: 1, version: 0x00040011, at 0xfee00000 Aug 10 10:51:15 titan /kernel: cpu1 (AP): apic id: 0, version: 0x00040011, at 0xfee00000 Aug 10 10:51:15 titan /kernel: io0 (APIC): apic id: 2, version: 0x00170011, at 0xfec00000 Aug 10 10:51:15 titan /kernel: DEVFS: ready for devices Aug 10 10:51:15 titan /kernel: Probing for devices on PCI bus 0: Aug 10 10:51:15 titan /kernel: chip0: rev 0x02 on pci0.0.0 Aug 10 10:51:15 titan /kernel: chip1: rev 0x01 on pci0.7.0 Aug 10 10:51:15 titan /kernel: vga0: rev 0x01 int a irq 19 on pci0.11.0 Aug 10 10:51:15 titan /kernel: vx0: <3COM 3C900 Etherlink XL PCI> rev 0x00 int a irq 18 on pci0.12.0 Aug 10 10:51:15 titan /kernel: utp/aui/bnc[*utp*] address 00:60:97:aa:3a:db Aug 10 10:51:15 titan /kernel: ahc0: rev 0x00 int a irq 17 on pci0.13.0 Aug 10 10:51:15 titan /kernel: ahc0: aic7880 Single Channel A, SCSI Id=7, 16/255 SCBs Aug 10 10:51:15 titan /kernel: ahc1: rev 0x03 int a irq 16 on pci0.14.0 Aug 10 10:51:15 titan /kernel: ahc1: aic7870 Single Channel A, SCSI Id=7, 16/255 SCBs Aug 10 10:51:15 titan /kernel: Probing for devices on the ISA bus: Aug 10 10:51:15 titan /kernel: sc0 at 0x60-0x6f irq 1 on motherboard Aug 10 10:51:15 titan /kernel: sc0: VGA color <4 virtual consoles, flags=0x0> Aug 10 10:51:15 titan /kernel: sio0 at 0x3f8-0x3ff irq 4 flags 0x20 on isa Aug 10 10:51:15 titan /kernel: sio0: type 16550A Aug 10 10:51:15 titan /kernel: sio1 at 0x2f8-0x2ff irq 3 on isa Aug 10 10:51:15 titan /kernel: sio1: type 16550A Aug 10 10:51:15 titan /kernel: lpt0 at 0x378-0x37f irq 7 on isa Aug 10 10:51:15 titan /kernel: lpt0: Interrupt-driven port Aug 10 10:51:15 titan /kernel: lp0: TCP/IP capable interface Aug 10 10:51:15 titan /kernel: psm0 at 0x60-0x64 irq 12 on motherboard Aug 10 10:51:15 titan /kernel: psm0: model Generic PS/2 mouse, device ID 0 Aug 10 10:51:15 titan /kernel: pcm0 at 0x220 irq 5 drq 1 flags 0x15 on isa Aug 10 10:51:15 titan /kernel: fdc0 at 0x3f0-0x3f7 irq 6 drq 2 on isa Aug 10 10:51:15 titan /kernel: fdc0: FIFO enabled, 8 bytes threshold Aug 10 10:51:15 titan /kernel: fd0: 1.44MB 3.5in Aug 10 10:51:15 titan /kernel: isic0 at 0xd80 irq 9 flags 0x4 on isa Aug 10 10:51:15 titan /kernel: isic0: Teles S0/16.3 Aug 10 10:51:15 titan /kernel: isic0 Aug 10 10:51:15 titan /kernel: : ISAC 2085 Version A1/A2 or 2086/2186 Version 1.1 (IOM-2) (Addr=0x960) Aug 10 10:51:15 titan /kernel: isic0: HSCX 82525 or 21525 Version 2.1 (AddrA=0x160, AddrB=0x560) Aug 10 10:51:15 titan /kernel: npx0 flags 0x1 on motherboard Aug 10 10:51:15 titan /kernel: npx0: INT 16 interface Aug 10 10:51:15 titan /kernel: DEVFS: ready to run Aug 10 10:51:15 titan /kernel: APIC_IO: Testing 8254 interrupt delivery Aug 10 10:51:15 titan /kernel: APIC_IO: routing 8254 via pin 2 Aug 10 10:51:15 titan /kernel: ccd0-3: Concatenated disk drivers Aug 10 10:51:15 titan /kernel: i4b: ISDN call control device attached Aug 10 10:51:15 titan /kernel: i4bisppp: 4 ISDN SyncPPP device(s) attached Aug 10 10:51:15 titan /kernel: i4bctl: ISDN system control port attached Aug 10 10:51:15 titan /kernel: i4bipr: 4 IP over raw HDLC ISDN device(s) attached Aug 10 10:51:15 titan /kernel: i4btel: 2 ISDN telephony interface device(s) attached Aug 10 10:51:15 titan /kernel: i4brbch: 4 raw B channel access device(s) attached Aug 10 10:51:15 titan /kernel: i4btrc: 4 ISDN trace device(s) attached Aug 10 10:51:15 titan /kernel: IP packet filtering initialized, divert enabled, rule-based forwarding disabled, logging limited to 500 packets/entry Aug 10 10:51:15 titan /kernel: IP Filter: initialized. Default = pass all, Logging = enabled Aug 10 10:51:15 titan /kernel: SMP: AP CPU #1 Launched! Aug 10 10:51:15 titan /kernel: sa0 at ahc0 bus 0 target 4 lun 0 Aug 10 10:51:15 titan /kernel: sa0: Removable Sequential Access SCSI2 device Aug 10 10:51:15 titan /kernel: sa0: 4.807MB/s transfers (4.807MHz, offset 8) Aug 10 10:51:15 titan /kernel: changing root device to da0 Aug 10 10:51:15 titan /kernel: s2a Aug 10 10:51:15 titan /kernel: da1 at ahc1 bus 0 target 1 lun 0 Aug 10 10:51:15 titan /kernel: da1: Fixed Direct Access SCSI2 device Aug 10 10:51:15 titan /kernel: da1: 10.0MB/s transfers (10.0MHz, offset 15), Tagged Queueing Enabled Aug 10 10:51:15 titan /kernel: da1: 2063MB (4226725 512 byte sectors: 255H 63S/T 263C) Aug 10 10:51:15 titan /kernel: da2 at ahc1 bus 0 target 2 lun 0 Aug 10 10:51:15 titan /kernel: da2: Fixed Direct Access SCSI2 device Aug 10 10:51:15 titan /kernel: da2: 10.0MB/s transfers (10.0MHz, offset 15), Tagged Queueing Enabled Aug 10 10:51:15 titan /kernel: da2: 2063MB (4226725 512 byte sectors: 255H 63S/T 263C) Aug 10 10:51:15 titan /kernel: da0 at ahc0 bus 0 target 0 lun 0 Aug 10 10:51:15 titan /kernel: da0: Fixed Direct Access SCSI2 device Aug 10 10:51:15 titan /kernel: da0: 20.0MB/s transfers (20.0MHz, offset 15), Tagged Queueing Enabled Aug 10 10:51:15 titan /kernel: da0: 2063MB (4226725 512 byte sectors: 255H 63S/T 263C) Aug 10 10:51:15 titan /kernel: cd0 at ahc0 bus 0 target 6 lun 0 Aug 10 10:51:16 titan /kernel: cd0: Removable CD-ROM SCSI2 device Aug 10 10:51:16 titan /kernel: cd0: 10.0MB/s transfers (10.0MHz, offset 8) Aug 10 10:51:16 titan /kernel: cd0: cd present [228675 x 2048 byte records] Aug 10 10:51:16 titan /kernel: ffs_mountfs: superblock updated Aug 10 10:51:16 titan last message repeated 4 times Aug 10 10:51:16 titan /kernel: vx0: sele Aug 10 10:51:16 titan /kernel: cted bnc. (link1) Aug 10 10:51:16 titan /kernel: isppp0: lcp close(initial) Aug 10 10:51:16 titan /kernel: isppp0: lcp close(initial) Aug 10 10:51:16 titan savecore: no core dump Aug 10 10:51:16 titan named[140]: starting. named 8.1.2 Sun Aug 9 05:32:06 CEST 1998 root@titan.klemm.gtn.com:/obj/home/src/usr.sbin/named Aug 10 10:51:16 titan xntpd[146]: xntpd version=3.4e (beta multicast); Sun Aug 9 05:34:40 CEST 1998 (1) Aug 10 10:51:17 titan xntpd[146]: tickadj = 5, tick = 10000, tvu_maxslew = 495 Aug 10 10:51:17 titan xntpd[146]: using xntpd phase-lock loop Aug 10 10:51:17 titan named[159]: Ready to answer queries. Aug 10 10:51:17 titan /kernel: isppp0: lcp open(initial) Aug 10 10:51:17 titan /kernel: isppp0: phase establish Aug 10 10:51:17 titan /kernel: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:51:18 titan /kernel: (da0:ahc0:0:0:0): tagged openings now 32 Aug 10 10:51:19 titan amd[178]: NIS domain name is not set. NIS ignored. Aug 10 10:51:19 titan /kernel: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:51:19 titan /kernel: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:51:19 titan /kernel: i4b-L2-i4b_tei_rx_frame: TEI ID Assign - TEI = 104 Aug 10 10:51:20 titan lpd[206]: restarted Aug 10 10:51:20 titan /kernel: isppp0: Up event Aug 10 10:51:20 titan /kernel: isppp0: lcp up(starting) Aug 10 10:51:20 titan /kernel: isppp0: lcp output Aug 10 10:51:20 titan /kernel: isppp0: lcp input(req-sent): Aug 10 10:51:20 titan /kernel: isppp0: lcp parse opts: auth-proto magic 0x11 [rej] 0x13 [rej] send conf-rej Aug 10 10:51:20 titan /kernel: isppp0: lcp output Aug 10 10:51:20 titan /kernel: isppp0: lcp input(req-sent): Aug 10 10:51:20 titan /kernel: isppp0: lcp input(ack-rcvd): Aug 10 10:51:20 titan /kernel: isppp0: lcp parse opts: auth-proto magic Aug 10 10:51:20 titan /kernel: isppp0: lcp parse opt values: auth-proto [mine 0x0 != his chap] magic 0x7960f3e0 send conf-nak Aug 10 10:51:20 titan /kernel: isppp0: lcp output Aug 10 10:51:20 titan /kernel: isppp0: lcp input(ack-rcvd): Aug 10 10:51:21 titan /kernel: isppp0: lcp parse opts: auth-proto magic Aug 10 10:51:21 titan /kernel: isppp0: lcp parse opt values: auth-proto magic 0x7960f3e0 send conf-ack Aug 10 10:51:21 titan /kernel: isppp0: lcp output Aug 10 10:51:21 titan /kernel: isppp0: lcp tlu Aug 10 10:51:21 titan /kernel: isppp0: phase authenticate Aug 10 10:51:21 titan /kernel: isppp0: pap output Aug 10 10:51:21 titan /kernel: isppp0: pap success Aug 10 10:51:21 titan /kernel: isppp0: phase network Aug 10 10:51:21 titan /kernel: isppp0: ipcp open(initial) Aug 10 10:51:21 titan /kernel: isppp0: ipcp up(starting) Aug 10 10:51:21 titan /kernel: isppp0: ipcp output Aug 10 10:51:21 titan /kernel: isppp0: ipcp input(req-sent): Aug 10 10:51:21 titan /kernel: isppp0: ipcp parse opts: address Aug 10 10:51:21 titan /kernel: isppp0: ipcp parse opt values: address 194.231.123.161 [ack] send conf-ack Aug 10 10:51:21 titan /kernel: isppp0: ipcp output Aug 10 10:51:21 titan /kernel: isppp0: ipcp input(ack-sent): Aug 10 10:51:21 titan /kernel: isppp0: ipcp tlu Aug 10 10:52:46 titan /kernel: isppp0: lcp down(opened) Aug 10 10:52:46 titan /kernel: isppp0: phase terminate Aug 10 10:52:46 titan /kernel: isppp0: ipcp down(opened) Aug 10 10:52:46 titan /kernel: isppp0: ipcp close(starting) Aug 10 10:52:46 titan /kernel: isppp0: Down event (carrier loss) Aug 10 10:52:46 titan /kernel: isppp0: lcp close(starting) Aug 10 10:52:46 titan /kernel: isppp0: phase dead --2oS5YaxWCcQjTEyO Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="i4b.altq" i4b kernel with altq ==================== Aug 10 10:48:28 titan /kernel.altq: Copyright (c) 1992-1998 FreeBSD Inc. Aug 10 10:48:28 titan /kernel.altq: Copyright (c) 1982, 1986, 1989, 1991, 1993 Aug 10 10:48:28 titan /kernel.altq: The Regents of the University of California. All rights reserved. Aug 10 10:48:28 titan /kernel.altq: FreeBSD 3.0-CURRENT #0: Mon Aug 10 10:12:15 CEST 1998 Aug 10 10:48:28 titan /kernel.altq: root@titan.klemm.gtn.com:/home/src/sys-altq/compile/ALTQISDNSMPCAM Aug 10 10:48:28 titan /kernel.altq: Timecounter "i8254" frequency 1193182 Hz cost 3614 ns Aug 10 10:48:28 titan /kernel.altq: CPU: Pentium Pro (686-class CPU) Aug 10 10:48:28 titan /kernel.altq: Origin = "GenuineIntel" Id = 0x619 Stepping=9 Aug 10 10:48:28 titan /kernel.altq: Features=0xfbff Aug 10 10:48:28 titan /kernel.altq: real memory = 83886080 (81920K bytes) Aug 10 10:48:28 titan /kernel.altq: avail memory = 78352384 (76516K bytes) Aug 10 10:48:28 titan /kernel.altq: FreeBSD/SMP: Multiprocessor motherboard Aug 10 10:48:28 titan /kernel.altq: cpu0 (BSP): apic id: 1, version: 0x00040011, at 0xfee00000 Aug 10 10:48:28 titan /kernel.altq: cpu1 (AP): apic id: 0, version: 0x00040011, at 0xfee00000 Aug 10 10:48:28 titan /kernel.altq: io0 (APIC): apic id: 2, version: 0x00170011, at 0xfec00000 Aug 10 10:48:28 titan /kernel.altq: DEVFS: ready for devices Aug 10 10:48:28 titan /kernel.altq: altq: major number is 96 Aug 10 10:48:28 titan /kernel.altq: Probing for devices on PCI bus 0: Aug 10 10:48:28 titan /kernel.altq: chip0: rev 0x02 on pci0.0.0 Aug 10 10:48:28 titan /kernel.altq: chip1: rev 0x01 on pci0.7.0 Aug 10 10:48:28 titan /kernel.altq: vga0: Aug 10 10:48:28 titan /kernel.altq: rev 0x01 int a irq 19 on pci0.11.0 Aug 10 10:48:28 titan /kernel.altq: vx0: <3COM 3C900 Etherlink XL PCI> rev 0x00 int a irq 18 on pci0.12.0 Aug 10 10:48:28 titan /kernel.altq: utp/aui/bnc[*utp*] address 00:60:97:aa:3a:db Aug 10 10:48:28 titan /kernel.altq: ahc0: rev 0x00 int a irq 17 on pci0.13.0 Aug 10 10:48:28 titan /kernel.altq: ahc0: aic7880 Single Channel A, SCSI Id=7, 16/255 SCBs Aug 10 10:48:28 titan /kernel.altq: ahc1: rev 0x03 int a irq 16 on pci0.14.0 Aug 10 10:48:28 titan /kernel.altq: ahc1: aic7870 Single Channel A, SCSI Id=7, 16/255 SCBs Aug 10 10:48:28 titan /kernel.altq: Probing for devices on the ISA bus: Aug 10 10:48:28 titan /kernel.altq: sc0 at 0x60-0x6f irq 1 on motherboard Aug 10 10:48:28 titan /kernel.altq: sc0: VGA color <4 virtual consoles, flags=0x0> Aug 10 10:48:28 titan /kernel.altq: sio0 at 0x3f8-0x3ff irq 4 flags 0x20 on isa Aug 10 10:48:28 titan /kernel.altq: sio0: type 16550A Aug 10 10:48:28 titan /kernel.altq: sio1 at 0x2f8-0x2ff irq 3 on isa Aug 10 10:48:28 titan /kernel.altq: sio1: type 16550A Aug 10 10:48:28 titan /kernel.altq: lpt0 at 0x378-0x37f irq 7 on isa Aug 10 10:48:28 titan /kernel.altq: lpt0: Interrupt-driven port Aug 10 10:48:28 titan /kernel.altq: lp0: TCP/IP capable interface Aug 10 10:48:28 titan /kernel.altq: psm0 at 0x60-0x64 irq 12 on motherboard Aug 10 10:48:28 titan /kernel.altq: psm0: model Generic PS/2 mouse, device ID 0 Aug 10 10:48:28 titan /kernel.altq: pcm0 at 0x220 irq 5 drq 1 flags 0x15 on isa Aug 10 10:48:28 titan /kernel.altq: fdc0 at 0x3f0-0x3f7 irq 6 drq 2 on isa Aug 10 10:48:28 titan /kernel.altq: fdc0: FIFO enabled, 8 bytes threshold Aug 10 10:48:28 titan /kernel.altq: fd0: 1.44MB 3.5in Aug 10 10:48:28 titan /kernel.altq: isic0 at 0xd80 irq 9 flags 0x4 Aug 10 10:48:28 titan /kernel.altq: on isa Aug 10 10:48:28 titan /kernel.altq: isic0: Teles S0/16.3 Aug 10 10:48:28 titan /kernel.altq: isic0: ISAC 2085 Version A1/A2 or 2086/2186 Version 1.1 (IOM-2) (Addr=0x960) Aug 10 10:48:28 titan /kernel.altq: isic0: HSCX 82525 or 21525 Version 2.1 (AddrA=0x160, AddrB=0x560) Aug 10 10:48:28 titan /kernel.altq: npx0 flags 0x1 on motherboard Aug 10 10:48:28 titan /kernel.altq: npx0: INT 16 interface Aug 10 10:48:28 titan /kernel.altq: DEVFS: ready to run Aug 10 10:48:28 titan /kernel.altq: APIC_IO: Testing 8254 interrupt delivery Aug 10 10:48:28 titan /kernel.altq: APIC_IO: routing 8254 via pin 2 Aug 10 10:48:28 titan /kernel.altq: ccd0-3: Concatenated disk drivers Aug 10 10:48:28 titan /kernel.altq: i4b: ISDN call control device attached Aug 10 10:48:28 titan /kernel.altq: i4bisppp: 4 ISDN SyncPPP device(s) attached Aug 10 10:48:28 titan /kernel.altq: i4bctl: ISDN system control port attached Aug 10 10:48:28 titan /kernel.altq: i4bipr: 4 IP over raw HDLC ISDN device(s) attached Aug 10 10:48:28 titan /kernel.altq: i4btel: 2 ISDN telephony interface device(s) attached Aug 10 10:48:28 titan /kernel.altq: i4brbch: 4 raw B channel access device(s) attached Aug 10 10:48:28 titan /kernel.altq: i4btrc: 4 ISDN trace device(s) attached Aug 10 10:48:28 titan /kernel.altq: IP packet filtering initialized, divert enabled, rule-based forwarding disabled, logging limited to 500 packets/entry Aug 10 10:48:28 titan /kernel.altq: IP Filter: initialized. Default = pass all, Logging = enabled Aug 10 10:48:28 titan /kernel.altq: SMP: AP CPU #1 Launched! Aug 10 10:48:28 titan /kernel.altq: sa0 at ahc0 bus 0 target 4 lun 0 Aug 10 10:48:28 titan /kernel.altq: sa0: Removable Sequential Access SCSI2 device Aug 10 10:48:28 titan /kernel.altq: sa0: 4.807MB/s transfers (4.807MHz, off Aug 10 10:48:28 titan /kernel.altq: set 8) Aug 10 10:48:28 titan /kernel.altq: changing root device to da0s2a Aug 10 10:48:28 titan /kernel.altq: da1 at ahc1 bus 0 target 1 lun 0 Aug 10 10:48:28 titan /kernel.altq: da1: Fixed Direct Access SCSI2 device Aug 10 10:48:28 titan /kernel.altq: da1: 10.0MB/s transfers (10.0MHz, offset 15), Tagged Queueing Enabled Aug 10 10:48:28 titan /kernel.altq: da1: 2063MB (4226725 512 byte sectors: 255H 63S/T 263C) Aug 10 10:48:28 titan /kernel.altq: da2 at ahc1 bus 0 target 2 lun 0 Aug 10 10:48:28 titan /kernel.altq: da2: Fixed Direct Access SCSI2 device Aug 10 10:48:28 titan /kernel.altq: da2: 10.0MB/s transfers (10.0MHz, offset 15), Tagged Queueing Enabled Aug 10 10:48:28 titan /kernel.altq: da2: 2063MB (4226725 512 byte sectors: 255H 63S/T 263C) Aug 10 10:48:29 titan /kernel.altq: da0 at ahc0 bus 0 target 0 lun 0 Aug 10 10:48:29 titan /kernel.altq: da0: Fixed Direct Access SCSI2 device Aug 10 10:48:29 titan /kernel.altq: da0: 20.0MB/s transfers (20.0MHz, offset 15), Tagged Queueing Enabled Aug 10 10:48:29 titan /kernel.altq: da0: 2063MB (4226725 512 byte sectors: 255H 63S/T 263C) Aug 10 10:48:29 titan /kernel.altq: ffs_mountfs: superblock updated Aug 10 10:48:29 titan last message repeated 2 times Aug 10 10:48:29 titan /kernel.altq: cd0 at ahc0 bus 0 target 6 lun 0 Aug 10 10:48:29 titan /kernel.altq: cd0: Removable CD-ROM SCSI2 device Aug 10 10:48:29 titan /kernel.altq: cd0: 10.0MB/s transfers (10.0MHz, offset 8) Aug 10 10:48:29 titan /kernel.altq: cd0: cd present [228675 x 2048 byte records] Aug 10 10:48:29 titan /kernel.altq: ffs_mountfs: superblock updated Aug 10 10:48:29 titan /kernel.altq: ffs_mou Aug 10 10:48:29 titan /kernel.altq: ntfs: superblock updated Aug 10 10:48:29 titan /kernel.altq: (da0:ahc0:0:0:0): tagged openings now 32 Aug 10 10:48:29 titan /kernel.altq: vx0: selected bnc. (link1) Aug 10 10:48:29 titan /kernel.altq: isppp0: lcp close(initial) Aug 10 10:48:29 titan /kernel.altq: isppp0: lcp close(initial) Aug 10 10:48:29 titan savecore: no core dump Aug 10 10:48:29 titan named[140]: starting. named 8.1.2 Sun Aug 9 05:32:06 CEST 1998 root@titan.klemm.gtn.com:/obj/home/src/usr.sbin/named Aug 10 10:48:29 titan xntpd[146]: xntpd version=3.4e (beta multicast); Sun Aug 9 05:34:40 CEST 1998 (1) Aug 10 10:48:30 titan xntpd[146]: tickadj = 5, tick = 10000, tvu_maxslew = 495 Aug 10 10:48:30 titan xntpd[146]: using xntpd phase-lock loop Aug 10 10:48:30 titan named[159]: Ready to answer queries. Aug 10 10:48:30 titan /kernel.altq: isppp0: lcp open(initial) Aug 10 10:48:30 titan /kernel.altq: isppp0: phase establish Aug 10 10:48:30 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:48:32 titan amd[178]: NIS domain name is not set. NIS ignored. Aug 10 10:48:32 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:48:32 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:48:32 titan /kernel.altq: i4b-L2-i4b_tei_rx_frame: TEI ID Assign - TEI = 103 Aug 10 10:48:33 titan /kernel.altq: isppp0: Up event Aug 10 10:48:33 titan /kernel.altq: isppp0: lcp up(starting) Aug 10 10:48:33 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:33 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:33 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic 0x11 [rej] 0x13 [rej] send conf-rej Aug 10 10:48:33 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp send terminate-ack Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:34 titan /kernel.altq: Aug 10 10:48:34 titan /kernel.altq: 7>isppp0: lcp input(req-sent): Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp down(req-sent) Aug 10 10:48:34 titan /kernel.altq: isppp0: Down event (carrier loss) Aug 10 10:48:34 titan /kernel.altq: isppp0: lcp close(starting) Aug 10 10:48:34 titan /kernel.altq: isppp0: phase dead Aug 10 10:48:34 titan lpd[206]: restarted Aug 10 10:48:35 titan /kernel.altq: isppp0: lcp open(initial) Aug 10 10:48:35 titan /kernel.altq: isppp0: phase establish Aug 10 10:48:36 titan /kernel.altq: isppp0: Up event Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp up(starting) Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic 0x11 [rej] 0x13 [rej] send conf-rej Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp send terminate-ack Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp down(req-sent) Aug 10 10:48:36 titan /kernel.altq: isppp0: Down event (carrier loss) Aug 10 10:48:36 titan /kernel.altq: isppp0: lcp close(starting) Aug 10 10:48:36 titan /kernel.altq: isppp0: phase dead Aug 10 10:48:38 titan /kernel.altq: isppp0: lcp open(initial) Aug 10 10:48:38 titan /kernel.altq: isppp0: phase establish Aug 10 10:48:39 titan /kernel.altq: isppp0: Up event Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp up(starting) Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic 0x11 [rej] 0x13 [rej] send conf-rej Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp send terminate-ack Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp down(req-sent) Aug 10 10:48:39 titan /kernel.altq: isppp0: Down event (carrier loss) Aug 10 10:48:39 titan /kernel.altq: isppp0: lcp close(starting) Aug 10 10:48:39 titan /kernel.altq: isppp0: phase dead Aug 10 10:48:40 titan /kernel.altq: isppp0: lcp open(initial) Aug 10 10:48:40 titan /kernel.altq: isppp0: phase establish Aug 10 10:48:41 titan /kernel.altq: isppp0: Up event Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp up(starting) Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic 0x11 [rej] 0x13 [rej] send conf-rej Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp input(ack-rcvd): Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp send terminate-ack Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp parse opts: auth-proto [not configured] magic send conf-rej Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp output Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp input(req-sent): Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp down(req-sent) Aug 10 10:48:41 titan /kernel.altq: isppp0: Down event (carrier loss) Aug 10 10:48:41 titan /kernel.altq: isppp0: lcp close(starting) Aug 10 10:48:41 titan /kernel.altq: isppp0: phase dead Aug 10 10:48:42 titan /kernel.altq: isppp0: lcp open(initial) Aug 10 10:48:42 titan /kernel.altq: isppp0: phase establish Aug 10 10:48:46 titan /kernel.altq: i4b-L3-T303_timeout: SETUP not answered, cr = 15 Aug 10 10:48:46 titan /kernel.altq: i4b-L1-ph_data_req: still in state F3! Aug 10 10:48:48 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:48:48 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:48:48 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:48:48 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:48:48 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:48:48 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:48:48 titan /kernel.altq: i4b-L1-ph_data_req: still in state F3! Aug 10 10:48:48 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:48:49 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:48:50 titan /kernel.altq: i4b-L3-T303_timeout: SETUP not answered, cr = 15 Aug 10 10:48:50 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:48:50 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:48:50 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:48:50 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:48:50 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:48:50 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:48:50 titan /kernel.altq: i4b-L2-i4b_mdl_error_ind: unit = 0, location = F_TR11 Aug 10 10:48:50 titan /kernel.altq: i4b-L2-i4b_mdl_error_ind: error = MDL_ERR_I: unsuccessful transmission N200times - Status ENQ Aug 10 10:48:50 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:48:51 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:48:52 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:48:52 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:48:52 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:48:52 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:48:52 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:48:52 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:48:52 titan /kernel.altq: i4b-L1-ph_data_req: still in state F3! Aug 10 10:48:52 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:48:53 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:48:54 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:48:54 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:48:54 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:48:54 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:48:54 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:48:54 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:48:54 titan /kernel.altq: i4b-L2-i4b_mdl_error_ind: unit = 0, location = F_AE11 Aug 10 10:48:54 titan /kernel.altq: i4b-L2-i4b_mdl_error_ind: error = MDL_ERR_G: unsuccessful transmission N200times - SABME Aug 10 10:48:54 titan /kernel.altq: i4b-L2-i4b_tei_verify: tx TEI ID_Verify Aug 10 10:48:54 titan /kernel.altq: i4b-L1-ph_data_req: still in state F3! Aug 10 10:48:54 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:48:55 titan /kernel.altq: SoundBlaster 16 4.5>0 open: device busy Aug 10 10:48:56 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:48:56 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:48:56 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:48:56 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:48:56 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:48:56 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:48:56 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:48:56 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:48:56 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:48:57 titan squid[356]: Starting Squid Cache version 1.2.beta23 for i386-unknown-freebsd3.0... Aug 10 10:48:57 titan squid[356]: Process ID 356 Aug 10 10:48:58 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:48:58 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:48:58 titan /kernel.altq: i4b-L1-ph_data_req: still in state F3! Aug 10 10:48:58 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:48:59 titan squid[356]: Unlinkd pipe opened on FD 11 Aug 10 10:49:00 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:49:00 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:49:00 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:00 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:49:00 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:49:00 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:49:00 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:49:00 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:49:00 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:49:00 titan squid[356]: Ready to serve requests. Aug 10 10:49:02 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:49:02 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:49:02 titan /kernel.altq: i4b-L1-ph_data_req: still in state F3! Aug 10 10:49:02 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:04 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:49:04 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:49:04 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:04 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:49:04 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:49:04 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:49:04 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:49:04 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:49:04 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:49:06 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:49:06 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:49:06 titan /kernel.altq: i4b-L1-ph_data_req: still in state F3! Aug 10 10:49:06 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:08 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:49:08 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:49:08 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:08 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:49:08 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:49:08 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:49:08 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:49:08 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:49:08 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:49:08 titan login: ROOT LOGIN (root) ON ttyv0 Aug 10 10:49:08 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:09 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:10 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:49:10 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:49:10 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:10 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:49:10 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:49:10 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:49:10 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:49:10 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:49:10 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:49:10 titan /kernel.altq: i4b-L1-ph_data_req: still in state F3! Aug 10 10:49:10 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:11 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:12 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:49:12 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:49:12 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:12 titan /kernel.altq: i4b-L3-T303_timeout: SETUP not answered, cr = 122 Aug 10 10:49:12 titan /kernel.altq: i4b-L3-next_l3state: FSM illegal state, state = ST_OW - Out Wait EST, event = EV_T303EXP - T303 timeout! Aug 10 10:49:12 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:49:12 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:49:12 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:49:12 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:49:12 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:49:12 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:49:12 titan /kernel.altq: i4b-L2-i4b_mdl_error_ind: unit = 0, location = F_AE11 Aug 10 10:49:12 titan /kernel.altq: i4b-L2-i4b_mdl_error_ind: error = MDL_ERR_G: unsuccessful transmission N200times - SABME Aug 10 10:49:12 titan /kernel.altq: i4b-L2-i4b_tei_verify: tx TEI ID_Verify Aug 10 10:49:12 titan /kernel.altq: i4b-L1-ph_data_req: still in state F3! Aug 10 10:49:12 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:14 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:49:14 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:49:14 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:14 titan /kernel.altq: i4b-L2-i4b_T202_timeout: unit 0, N202 = 3 Aug 10 10:49:14 titan /kernel.altq: i4b-L2-i4b_tei_assign: tx TEI ID_Request Aug 10 10:49:14 titan /kernel.altq: i4b-L1-ph_data_req: No Space in TX FIFO, state = F4 Awaiting Signal Aug 10 10:49:14 titan /kernel.altq: i4b-L1-timer3_expired: state = F4 Awaiting Signal Aug 10 10:49:14 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: ISTA = 0x0 Aug 10 10:49:14 titan /kernel.altq: i4b-L1-isic_recover: ISAC: ISTA = 0x0 Aug 10 10:49:14 titan /kernel.altq: i4b-L1-isic_recover: HSCX B: IMASK = 0xff Aug 10 10:49:14 titan /kernel.altq: i4b-L1-isic_recover: HSCX A: IMASK = 0xf8 Aug 10 10:49:14 titan /kernel.altq: i4b-L1-isic_recover: ISAC: IMASK = 0x2a Aug 10 10:49:14 titan halt: halted by root Aug 10 10:49:14 titan syslogd: exiting on signal 15 --2oS5YaxWCcQjTEyO Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=ALTQISDNSMPCAM # # ALTQ ISDN kernel # machine "i386" cpu "I686_CPU" ident ALTQISDNSMPCAM # ALTQ options options ALTQ #alternate queueing options CBQ #class based queueing options WFQ #weighted fair queueing #options AFMAP #atm flow mapping #options FIFOQ #fifo queueing options RED #random early detection options CBQ_RED #red for cbq (needs (CBQ and RED) #options RIO #twin red for diffserv (needs RED) #options CBQ_RIO #rio for cbq (needs CBQ, RIO, CBQ_RED) #options LOCALQ #local use options ALTQ_ACCOUNT #altq accounting #options ALTQ_ECN #ecn extention to tcp (needs RED) #options ALTQ_IPSEC #check ipsec in IPv4 #options ALTQ_PPP #sio modification for userland ppp # rse's recommendations for heavily users apache servers maxusers 256 #options SOMAXCONN="256" #options "NMBCLUSTER=4096" #options "CHILD_MAX=512" #options "OPEN_MAX=512" # Options for the VM subsystem #options PQ_NOOPT # No coloring #options PQ_LARGECACHE # color for 512k/16k cache options PQ_HUGECACHE # color for 1024k/16k cache options SMP # Symmetric MultiProcessor Kernel options APIC_IO # Symmetric (APIC) I/O options INCLUDE_CONFIG_FILE # Include this file in kernel #options USERCONFIG #boot -c editor #options VISUAL_USERCONFIG #visual boot -c editor options DDB options KTRACE #kernel tracing options SHOW_BUSYBUFS # busy buffers on shutdown ? options INET #InterNETworking options IPFIREWALL #firewall options IPFIREWALL_VERBOSE #print information about dropped packets options "IPFIREWALL_VERBOSE_LIMIT=500" #limit verbosity options IPDIVERT #divert sockets options IPFILTER #kernel ipfilter support options IPFILTER_LOG #ipfilter logging options "P1003_1B" options "_KPOSIX_PRIORITY_SCHEDULING" options "_KPOSIX_VERSION=199309L" options FFS #Berkeley Fast Filesystem #options NFS #Network File System options MFS #Memory File System #options UNION #Union filesystem options "CD9660" #ISO 9660 filesystem options MSDOSFS #MS DOS File System options PROCFS #Process filesystem options NSWAPDEV=3 #Allow this many swap-devices. #options QUOTA #enable disk quotas options SOFTUPDATES #Kirk McKusick's code # DEVFS and SLICE are experimental but work. # SLICE disables too much old code so enabling it in LINT would be bad options DEVFS #devices filesystem #options SLICE #devfs based disk handling # misc options options "COMPAT_43" #Compatible with BSD 4.3 [KEEP THIS!] options UCONSOLE #Allow users to grab the console options SYSVSHM,SYSVSEM,SYSVMSG #shared memory (X11) options COMPAT_LINUX # Linux Binary compatibility #options USER_LDT # for Wine options "MD5" #options "VM86" config kernel root on da1 # ISA and PCI BUS support controller isa0 controller pci0 # Floppy Disk Controller controller fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr disk fd0 at fdc0 drive 0 # SCSI Devices # AHA 2940U controller ahc0 controller scbus0 at ahc0 disk da0 at scbus0 target 0 unit 0 disk da3 at scbus0 target 1 unit 0 tape sa0 at scbus0 target 4 #device worm0 at scbus0 target 5 device cd0 at scbus0 target 6 # AHA 2940 controller ahc1 controller scbus1 at ahc1 disk da1 at scbus1 target 1 unit 0 disk da2 at scbus1 target 2 unit 0 options SCSI_DELAY=4 # Be pessimistic about Joe SCSI device options "CD9660_ROOTDELAY=8" options AHC_ALLOW_MEMIO #options AHC_TAGENABLE # tagged command queueing #options AHC_SCBPAGING_ENABLE options SCSI_REPORT_GEOMETRY # SCO compatible system console device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr options MAXCONS=4 # number of virtual consoles options SC_HISTORY_SIZE=200 # number of history buffer lines # The pcvt console driver (vt220 compatible). #device vt0 at isa? port "IO_KBD" tty irq 1 vector pcrint #options XSERVER # support for running an X server. #options FAT_CURSOR # start with block cursor # floating point unit device npx0 at isa? port "IO_NPX" flags 0x1 irq 13 vector npxintr # serial devices on mainboard # `flags' for serial drivers that support consoles (only for sio now): # 0x10 enable console support for this unit. The other console flags # are ignored unless this is set. Enabling console support does # not make the unit the preferred console - boot with -h or set # the 0x20 flag for that. Currently, at most one unit can have # console support; the first one (in config file order) with # this flag set is preferred. Setting this flag for sio0 gives # the old behaviour. # 0x20 force this unit to be the console (unless there is another # higher priority console). This replaces the COMCONSOLE option. # 0x40 reserve this unit for low level console operations. Do not # device sio0 at isa? port "IO_COM1" tty irq 4 flags 0x20 vector siointr device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr options BREAK_TO_DEBUGGER #a BREAK on a comconsole goes to DDB, #if available. options CONSPEED=38400 #default speed for serial console #(default 9600) # parallel device on mainboard device lpt0 at isa? port? tty irq 7 vector lptintr # PS/2 mouse on mainboard device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr options "PSM_ACCEL=1" # PS/2 mouse acceleration # Joystick #device joy0 at isa? port "IO_GAME" # Network 3COM PCI device vx0 #device ed0 at isa? port 0x280 net irq 10 iomem 0xd0000 vector edintr # Soundblaster 16 # SoundBlaster DSP driver - for SB, SB Pro, SB16, PAS(emulating SB) # SoundBlaster 16 DSP driver - for SB16 - requires sb0 device # SoundBlaster 16 MIDI - for SB16 - requires sb0 device # Yamaha OPL-2/OPL-3 FM - for SB, SB Pro, SB16, PAS # controller snd0 # device sb0 at isa? port 0x220 irq 5 conflicts drq 1 vector sbintr # device sbxvi0 at isa? port? irq? drq 5 conflicts # device sbmidi0 at isa? port 0x330 irq? conflicts # device opl0 at isa? port 0x388 conflicts # pcm: PCM audio through various sound cards. # New Sound code device pcm0 at isa? port ? tty irq 5 drq 1 flags 0x15 vector pcmintr # Pseudo devices pseudo-device loop #Network loopback device pseudo-device ether #Generic Ethernet pseudo-device vn 1 #Vnode driver (turns a file into a dev.) pseudo-device snp 3 #Snoop device - to look at pty/vty/etc.. pseudo-device disc #Discard device pseudo-device bpfilter 4 #Berkeley packet filter pseudo-device pty 16 #Pseudo ttys - can go as high as 256 pseudo-device gzip # Exec gzipped a.out's pseudo-device ccd 4 #Concatenated disk driver pseudo-device tun 1 #Tunnel driver (user process ppp(8)) #pseudo-device ppp 1 #Point-to-point protocol options PPP_BSDCOMP #PPP BSD-compress support options PPP_DEFLATE #PPP zlib/deflate/gzip support options PPP_FILTER #enable bpf filtering (needs bpfilter) # Size of the kernel message buffer. Should be N * pagesize. #options "MSGBUF_SIZE=40960" ## BISDN #options IPI_VJ # Van Jacobsen header compression support ##options "IPI_DIPA=3" # send ip accounting packets every 3 seconds #options TELES_HAS_MEMCPYB # bisdn 0.97 # ## Teles S0/16.3 ################################################### IRQ 9 ## #controller tel0 at isa? port 0xd80 net irq 9 vector telintr #pseudo-device disdn #pseudo-device isdn #pseudo-device ipi 4 #pseudo-device ispy 4 #pseudo-device itel 1 options "I4B_SMP_WORKAROUND" # i4b passive ISDN cards support (isic - I4b Siemens Isdn Chipset driver) # Teles S0/16.3 options "TEL_S0_16_3" device isic0 at isa? port 0xd80 net irq 9 flags 0x04 vector isicintr # i4b passive cards D channel handling # Q.921 pseudo-device "i4bq921" # Q.931 pseudo-device "i4bq931" # common passive and active layer 4 # layer 4 pseudo-device "i4b" # userland driver to do ISDN tracing (for passive cards oly) pseudo-device "i4btrc" 4 # userland driver to control the whole thing pseudo-device "i4bctl" # userland driver for access to raw B channel pseudo-device "i4brbch" 4 # userland driver for telephony pseudo-device "i4btel" 2 # network driver for IP over raw HDLC ISDN pseudo-device "i4bipr" 4 # enable VJ header compression detection for ipr i/f options IPR_VJ # network driver for sync PPP over ISDN pseudo-device "i4bisppp" 4 pseudo-device sppp 4 --2oS5YaxWCcQjTEyO-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Mon Aug 10 06:33:18 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id GAA11411 for freebsd-net-outgoing; Mon, 10 Aug 1998 06:33:18 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from whizzo.transsys.com (whizzo.TransSys.COM [144.202.42.10]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id GAA11406 for ; Mon, 10 Aug 1998 06:33:17 -0700 (PDT) (envelope-from louie@whizzo.transsys.com) Received: from whizzo.transsys.com (localhost.transsys.com [127.0.0.1]) by whizzo.transsys.com (8.9.1/8.9.1) with ESMTP id JAA02414; Mon, 10 Aug 1998 09:32:34 -0400 (EDT) (envelope-from louie@whizzo.transsys.com) Message-Id: <199808101332.JAA02414@whizzo.transsys.com> X-Mailer: exmh version 2.0.2 2/24/98 To: Andreas Klemm cc: =?iso-8859-1?Q?Dag-Erling_Coidan_Sm=F8rgrav?= , net@FreeBSD.ORG From: "Louis A. Mamakos" Subject: Re: FreeBSD vs. Cisco References: <19980810093129.A10340@klemm.gtn.com> In-reply-to: Your message of "Mon, 10 Aug 1998 09:31:29 +0200." <19980810093129.A10340@klemm.gtn.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Date: Mon, 10 Aug 1998 09:32:33 -0400 Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by hub.freebsd.org id GAA11407 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org > On Tue, Aug 04, 1998 at 01:06:09PM +0200, Dag-Erling Coidan Smørgrav wrote: > > ISTR several reports of FreeBSD machines having seemingly > > unexplainable trouble talking to the outside world through a Cisco > > router, but can't seem to find anything of relevance in the list > > archives. Am I remembering correctly? The background for this question > > is that I have a FreeBSD box which seems to never respond to IGMP. > > IGMP is a Cisco propriarity protocol and used for dynamic > routing between Cisco Routers. The advantage of using IGMP > or EIGMP is, that you can route IP, IPX and appletalk using > this routing protocol. I thought that the original question was in the context of multicast traffic. That's consistant with the problem statement: IGMP is the Internet Group Management Protocol, which is hardly Cisco specific. I think that you're thinking of IGRP, which is a Cisco-proprietary distance-vector interior routing protocol. I don't have any problems with my FreeBSD box and a neighboring Cisco router managing group membership with IGMP. louie To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Mon Aug 10 07:08:33 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id HAA14000 for freebsd-net-outgoing; Mon, 10 Aug 1998 07:08:33 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from news1.gtn.com (news1.gtn.com [192.109.159.3]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id HAA13953 for ; Mon, 10 Aug 1998 07:08:17 -0700 (PDT) (envelope-from andreas@klemm.gtn.com) Received: (from uucp@localhost) by news1.gtn.com (8.8.6/8.8.6) with UUCP id QAA21507; Mon, 10 Aug 1998 16:00:19 +0200 (MET DST) Received: (from andreas@localhost) by klemm.gtn.com (8.9.1/8.9.1) id PAA06153; Mon, 10 Aug 1998 15:52:33 +0200 (CEST) (envelope-from andreas) Message-ID: <19980810155233.A6146@klemm.gtn.com> Date: Mon, 10 Aug 1998 15:52:33 +0200 From: Andreas Klemm To: "Louis A. Mamakos" Cc: =?iso-8859-1?Q?Dag-Erling_Coidan_Sm=F8rgrav?= , net@FreeBSD.ORG Subject: Re: FreeBSD vs. Cisco References: <19980810093129.A10340@klemm.gtn.com> <199808101332.JAA02414@whizzo.transsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.93.1i In-Reply-To: <199808101332.JAA02414@whizzo.transsys.com>; from Louis A. Mamakos on Mon, Aug 10, 1998 at 09:32:33AM -0400 X-Disclaimer: A free society is one where it is safe to be unpopular X-Operating-System: FreeBSD 3.0-CURRENT SMP Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Mon, Aug 10, 1998 at 09:32:33AM -0400, Louis A. Mamakos wrote: > > I thought that the original question was in the context of multicast > traffic. That's consistant with the problem statement: IGMP is > the Internet Group Management Protocol, which is hardly Cisco > specific. > > I think that you're thinking of IGRP, which is a Cisco-proprietary > distance-vector interior routing protocol. You're right, I already wrote it to him ;-) Was a bit tired this morning, I really mixed those things, sorry ;-) -- Andreas Klemm http://www.FreeBSD.ORG/~andreas What gives you 90% more speed, for example, in kernel compilation ? http://www.FreeBSD.ORG/~fsmp/SMP/akgraph-a/graph1.html "NT = Not Today" (Maggie Biggs) ``powered by FreeBSD SMP'' To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Mon Aug 10 17:13:38 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id RAA27059 for freebsd-net-outgoing; Mon, 10 Aug 1998 17:13:38 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from wiz.plymouth.edu (wiz.plymouth.edu [158.136.154.100]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id RAA27054 for ; Mon, 10 Aug 1998 17:13:36 -0700 (PDT) (envelope-from ted@wiz.plymouth.edu) Received: (from ted@localhost) by wiz.plymouth.edu (8.9.0/8.9.0) id UAA05718 for freebsd-net@freebsd.org; Mon, 10 Aug 1998 20:13:14 -0400 (EDT) From: Ted Wisniewski Message-Id: <199808110013.UAA05718@wiz.plymouth.edu> Subject: Odd problem with NFS? To: freebsd-net@FreeBSD.ORG Date: Mon, 10 Aug 1998 20:13:14 -0400 (EDT) X-Mailer: ELM [version 2.4ME+ PL22 (25)] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org A bit of background: We have a NetApp filer for disk storage and FreeBSD based server of the following general configuration. bsd: 384MB ram (FreeBSD 2.2.6 + SEC Patches) P233 4 G internal SCSI wide drive Intel EtherExpress Pro 10/100B Ethernet The Netapp filer and the FreeBSD box are on a 100Mbit switch and are the only machines directly connected to the switch. The problem, we are getting seemingly random corruptions (mostly in mail spool files), the corruptions are a bunch of NULL characters written to the file in place of real data. I cannot seem to pin it down, I am making the assumption that it has to do with the NFS interaction between the NetApp and my FreeBSD Box. I have tried to duplicate the problem but cannot, however, the users are definitely experiencing it (as I have had to fix 10 or so mail spool files). I have eliminated the mail client/server applications as a possible culprit(s) by seeing what the users do and do not have in common. Any advice anyone can offer will be appreciated.... I am nearly out of options. Thanks... -- | Ted Wisniewski INET: ted@oz.plymouth.edu | | Computer Services ted@wiz.plymouth.edu | | Plymouth State College tedw@psc.plymouth.edu | | Plymouth NH, 03264 HTTP: http://oz.plymouth.edu/~ted/ | To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Tue Aug 11 02:22:35 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id CAA05686 for freebsd-net-outgoing; Tue, 11 Aug 1998 02:22:35 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from freefall.pipeline.ch (intranet.pipeline.ch [195.134.128.66]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id CAA05658; Tue, 11 Aug 1998 02:22:15 -0700 (PDT) (envelope-from andre@pipeline.ch) Received: from pipeline.ch ([195.134.128.41]) by freefall.pipeline.ch (Netscape Mail Server v2.02) with ESMTP id AAA223; Tue, 11 Aug 1998 11:20:23 +0200 Message-ID: <35D00CEC.235D6171@pipeline.ch> Date: Tue, 11 Aug 1998 11:20:44 +0200 From: Andre Oppermann X-Mailer: Mozilla 4.03 [en] (WinNT; U) MIME-Version: 1.0 To: Gary Palmer CC: GVB , freebsd-net@FreeBSD.ORG Subject: Re: Mail server... References: <4827.902734360@gjp.erols.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Gary Palmer wrote: > > Andre Oppermann wrote in message ID > <35C89E8F.EB696A97@pipeline.ch>: > > I would suggest something like this: > > > 1x NetApp Filer for maildir storage (does RAID5 and backup) > > Incorrect. It does RAID 4, and in software. That, coupled with the fact that > NFS over 1500 byte ethernet is not the best of ideas makes me wonder why you > recommended it. Yes, it will work. It may even scale a bit. But it is far from I recommend it because it is an available 'off the shelf solution'. > an optimal solution. (if you did NFS over CDDI or FDDI it would work a bit > better as you wouldn't need to scale the NFS read/write sizes down to avoid > fragmentation) > > There are a number of other solutions, varying in technical skill required, > which use unix machines as message stores and then use lower-powered machines > infront of the message stores to direct inbound traffic. This way you can have > multiple pop servers, and the users are directed transparently to the one > which holds their mail without their changing anything. > > You can either do this simply (a POP3 proxy isn't that difficult), or you can > go wild and write your own communications protocol to fetch & store messages > on the stores, and have the customer-facing machines do more work. Shure, just write your own communication protocol. I thought the questioner is not so high skilled to write his own comm protocol. > This scenario works ... we currently have 400k+ users in the proxied pop > environment, with over 30k of them being online at any one time and checking > their mail. We see (typically) 600-700 concurrent POP3 sessions. However, it > does require a programmer to set up this way ... the NFS version works for > anyone, but I (personally) wouldn't like to scale it up. I depends on how far you have to scale up and what you have to scale up, number of users or size of storage? BTW: Can you give me a little bit more information on your mail server setup and the protocol you wrote? > > > also appriciated. Also, does FreeBSD take advantage of dual processers? Is > > > FreeBSD won't take advantage of two processors until release 3.0 which > > due in october. > > And I wouldn't recommend SMP for a production environment unless you know what > you are doing... Heavily I/O bound machines will not benefit because of the > way the kernel is using locks. Yup. -- Andre Oppermann CEO / Geschaeftsfuehrer Internet Business Solutions Ltd. (AG) Hardstrasse 235, 8005 Zurich, Switzerland Fon +41 1 277 75 75 / Fax +41 1 277 75 77 http://www.pipeline.ch ibs@pipeline.ch To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Tue Aug 11 08:39:31 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id IAA22021 for freebsd-net-outgoing; Tue, 11 Aug 1998 08:39:31 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from pau-amma.whistle.com (s205m64.whistle.com [207.76.205.64]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id IAA22013 for ; Tue, 11 Aug 1998 08:39:29 -0700 (PDT) (envelope-from dhw@whistle.com) Received: (from dhw@localhost) by pau-amma.whistle.com (8.8.8/8.8.7) id IAA16112; Tue, 11 Aug 1998 08:37:22 -0700 (PDT) (envelope-from dhw) Date: Tue, 11 Aug 1998 08:37:22 -0700 (PDT) From: David Wolfskill Message-Id: <199808111537.IAA16112@pau-amma.whistle.com> To: freebsd-net@FreeBSD.ORG, ted@wiz.plymouth.edu Subject: Re: Odd problem with NFS? In-Reply-To: <199808110013.UAA05718@wiz.plymouth.edu> Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >From: Ted Wisniewski >Date: Mon, 10 Aug 1998 20:13:14 -0400 (EDT) >The problem, we are getting seemingly random corruptions (mostly in mail spool >files), the corruptions are a bunch of NULL characters written to the file >in place of real data. I cannot seem to pin it down, I am making the >assumption that it has to do with the NFS interaction between the NetApp >and my FreeBSD Box. I have tried to duplicate the problem but cannot, >however, the users are definitely experiencing it (as I have had to >fix 10 or so mail spool files). I have eliminated the mail client/server >applications as a possible culprit(s) by seeing what the users do and do not >have in common. > Any advice anyone can offer will be appreciated.... I am nearly >out of options. Thanks... If you're allowing NFS V3, you *might* want to try forcing NFS V2. (I've heard various unpleasant things about V3 on FreeBSD, and in fact, I did what I could to force the use of V2 here, which seems to have made things quite a lot more stable, until I can get the time to look for the real problem(s)....) david -- David Wolfskill UNIX System Administrator dhw@whistle.com voice: (650) 577-7158 pager: (650) 371-4621 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Tue Aug 11 09:25:55 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id JAA29142 for freebsd-net-outgoing; Tue, 11 Aug 1998 09:25:55 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from coleridge.kublai.com (coleridge.kublai.com [207.96.1.116]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id JAA29034; Tue, 11 Aug 1998 09:25:32 -0700 (PDT) (envelope-from shmit@natasya.kublai.com) Received: from natasya.kublai.com (natasya.kublai.com [207.172.25.236]) by coleridge.kublai.com (8.8.8/8.8.8) with ESMTP id MAA02890; Tue, 11 Aug 1998 12:24:58 -0400 (EDT) (envelope-from shmit@natasya.kublai.com) Received: (from shmit@localhost) by natasya.kublai.com (8.8.8/8.8.8) id MAA06089; Tue, 11 Aug 1998 12:24:56 -0400 (EDT) Message-ID: <19980811122456.16956@kublai.com> Date: Tue, 11 Aug 1998 12:24:56 -0400 From: Brian Cully To: Andre Oppermann , Gary Palmer Cc: GVB , freebsd-net@FreeBSD.ORG Subject: Re: Mail server... Reply-To: shmit@kublai.com Mail-Followup-To: Andre Oppermann , Gary Palmer , GVB , freebsd-net@FreeBSD.ORG References: <4827.902734360@gjp.erols.com> <35D00CEC.235D6171@pipeline.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.89i In-Reply-To: <35D00CEC.235D6171@pipeline.ch>; from Andre Oppermann on Tue, Aug 11, 1998 at 11:20:44AM +0200 X-Sender: If your mailer pays attention to this, it's broken. X-PGP-Info: finger shmit@kublai.com for my public key. Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Tue, Aug 11, 1998 at 11:20:44AM +0200, Andre Oppermann wrote: > > go wild and write your own communications protocol to fetch & store messages > > on the stores, and have the customer-facing machines do more work. > > Shure, just write your own communication protocol. I thought the > questioner is not so high skilled to write his own comm protocol. I think you missed the point. :-) The idea that I think he's trying to push is that using a single big NFS server for your backend mailstore isn't even close to ideal, and that you can accomplish the same thing by using: 1) multiple smaller mail stores, which do not use NFS for message transfer, 2) POP/IMAP as a frontend for message retrieval, and 3) MX boxen that act as an incoming mail gateway that do the `local' delivery onto the mail stores. The trick to having customers not know on which mail store they live is to use a POP/IMAP proxy that knows where they live and connects to the proper machine when the username is supplied. On the MX side of things you can just use sendmail's aliasing rules to have messages stored on the right mailstore. This tends to be more scalable than an NFS solution. > BTW: Can you give me a little bit more information on your mail server > setup and the protocol you wrote? Not that I want to speak for Gary, but I think the above should clarify things a little more (I doubt he wrote a delivery/transfer protocol for his mail system). -bjc To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Tue Aug 11 12:15:08 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id MAA19485 for freebsd-net-outgoing; Tue, 11 Aug 1998 12:15:08 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from khavrinen.lcs.mit.edu (khavrinen.lcs.mit.edu [18.24.4.193]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id MAA19454 for ; Tue, 11 Aug 1998 12:14:41 -0700 (PDT) (envelope-from wollman@khavrinen.lcs.mit.edu) Received: (from wollman@localhost) by khavrinen.lcs.mit.edu (8.8.8/8.8.8) id PAA15085; Tue, 11 Aug 1998 15:14:10 -0400 (EDT) (envelope-from wollman) Date: Tue, 11 Aug 1998 15:14:10 -0400 (EDT) From: Garrett Wollman Message-Id: <199808111914.PAA15085@khavrinen.lcs.mit.edu> To: net@FreeBSD.ORG Subject: socket option patch, mk. II Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org I have updated my socket option patch to include all of the necessary changes to allow LINT to compile. This includes IPX, IPFW (ewww), BOOTP, KRPC, multicast routing, and RSVP. If I hear no screams, and experience no problems on my own machine (which uses none of these), then I will be committing it this weekend. Index: kern/uipc_socket.c =================================================================== RCS file: /home/cvs/src/sys/kern/uipc_socket.c,v retrieving revision 1.42 diff -u -r1.42 uipc_socket.c --- uipc_socket.c 1998/07/18 18:48:45 1.42 +++ uipc_socket.c 1998/08/11 18:46:35 @@ -898,31 +898,69 @@ sbrelease(&asb); } +/* + * Perhaps this routine, and sooptcopyout(), below, ought to come in + * an additional variant to handle the case where the option value needs + * to be some kind of integer, but not a specific size. + * In addition to their use here, these functions are also called by the + * protocol-level pr_ctloutput() routines. + */ int -sosetopt(so, level, optname, m0, p) - register struct socket *so; - int level, optname; - struct mbuf *m0; - struct proc *p; +sooptcopyin(sopt, buf, len, minlen) + struct sockopt *sopt; + void *buf; + size_t len; + size_t minlen; { - int error = 0; - register struct mbuf *m = m0; + size_t valsize; - if (level != SOL_SOCKET) { + /* + * If the user gives us more than we wanted, we ignore it, + * but if we don't get the minimum length the caller + * wants, we return EINVAL. On success, sopt->sopt_valsize + * is set to however much we actually retrieved. + */ + if ((valsize = sopt->sopt_valsize) < minlen) + return EINVAL; + if (valsize > len) + sopt->sopt_valsize = valsize = len; + + if (sopt->sopt_p != 0) + return (copyin(sopt->sopt_val, buf, valsize)); + + bcopy(sopt->sopt_val, buf, valsize); + return 0; +} + +int +sosetopt(so, sopt) + struct socket *so; + struct sockopt *sopt; +{ + int error, optval; + struct linger l; + struct timeval tv; + short val; + + error = 0; + if (sopt->sopt_level != SOL_SOCKET) { if (so->so_proto && so->so_proto->pr_ctloutput) return ((*so->so_proto->pr_ctloutput) - (PRCO_SETOPT, so, level, optname, &m0, p)); + (so, sopt)); error = ENOPROTOOPT; } else { - switch (optname) { - + switch (sopt->sopt_name) { case SO_LINGER: - if (m == NULL || m->m_len != sizeof (struct linger)) { - error = EINVAL; + error = sooptcopyin(sopt, &l, sizeof l, sizeof l); + if (error) goto bad; - } - so->so_linger = mtod(m, struct linger *)->l_linger; - /* fall thru... */ + + so->so_linger = l.l_linger; + if (l.l_onoff) + so->so_options |= SO_LINGER; + else + so->so_options &= ~SO_LINGER; + break; case SO_DEBUG: case SO_KEEPALIVE: @@ -933,45 +971,40 @@ case SO_REUSEPORT: case SO_OOBINLINE: case SO_TIMESTAMP: - if (m == NULL || m->m_len < sizeof (int)) { - error = EINVAL; + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) goto bad; - } - if (*mtod(m, int *)) - so->so_options |= optname; + if (optval) + so->so_options |= sopt->sopt_name; else - so->so_options &= ~optname; + so->so_options &= ~sopt->sopt_name; break; case SO_SNDBUF: case SO_RCVBUF: case SO_SNDLOWAT: case SO_RCVLOWAT: - { - int optval; - - if (m == NULL || m->m_len < sizeof (int)) { - error = EINVAL; + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) goto bad; - } /* * Values < 1 make no sense for any of these * options, so disallow them. */ - optval = *mtod(m, int *); if (optval < 1) { error = EINVAL; goto bad; } - switch (optname) { - + switch (sopt->sopt_name) { case SO_SNDBUF: case SO_RCVBUF: - if (sbreserve(optname == SO_SNDBUF ? - &so->so_snd : &so->so_rcv, - (u_long) optval) == 0) { + if (sbreserve(sopt->sopt_name == SO_SNDBUF ? + &so->so_snd : &so->so_rcv, + (u_long) optval) == 0) { error = ENOBUFS; goto bad; } @@ -993,27 +1026,21 @@ break; } break; - } case SO_SNDTIMEO: case SO_RCVTIMEO: - { - struct timeval *tv; - short val; - - if (m == NULL || m->m_len < sizeof (*tv)) { - error = EINVAL; + error = sooptcopyin(sopt, &tv, sizeof tv, + sizeof tv); + if (error) goto bad; - } - tv = mtod(m, struct timeval *); - if (tv->tv_sec > SHRT_MAX / hz - hz) { + + if (tv.tv_sec > SHRT_MAX / hz - hz) { error = EDOM; goto bad; } - val = tv->tv_sec * hz + tv->tv_usec / tick; - - switch (optname) { + val = tv.tv_sec * hz + tv.tv_usec / tick; + switch (sopt->sopt_name) { case SO_SNDTIMEO: so->so_snd.sb_timeo = val; break; @@ -1022,7 +1049,6 @@ break; } break; - } default: error = ENOPROTOOPT; @@ -1030,42 +1056,69 @@ } if (error == 0 && so->so_proto && so->so_proto->pr_ctloutput) { (void) ((*so->so_proto->pr_ctloutput) - (PRCO_SETOPT, so, level, optname, &m0, p)); - m = NULL; /* freed by protocol */ + (so, sopt)); } } bad: - if (m) - (void) m_free(m); return (error); } +/* Helper routine for getsockopt */ int -sogetopt(so, level, optname, mp, p) - register struct socket *so; - int level, optname; - struct mbuf **mp; - struct proc *p; +sooptcopyout(sopt, buf, len) + struct sockopt *sopt; + void *buf; + size_t len; { - register struct mbuf *m; + int error; + size_t valsize; + + error = 0; + + /* + * Documented get behavior is that we always return a value, + * possibly truncated to fit in the user's buffer. + * We leave the correct length in sopt->sopt_valsize, + * to be copied out in getsockopt(). Note that this + * interface is not idempotent; the entire answer must + * generated ahead of time. + */ + valsize = len; + if (sopt->sopt_valsize < valsize) { + valsize = sopt->sopt_valsize; + sopt->sopt_valsize = len; + } + if (sopt->sopt_val != 0) { + if (sopt->sopt_p != 0) + error = copyout(buf, sopt->sopt_val, valsize); + else + bcopy(buf, sopt->sopt_val, valsize); + } + return error; +} - if (level != SOL_SOCKET) { +int +sogetopt(so, sopt) + struct socket *so; + struct sockopt *sopt; +{ + int error, optval; + struct linger l; + struct timeval tv; + + error = 0; + if (sopt->sopt_level != SOL_SOCKET) { if (so->so_proto && so->so_proto->pr_ctloutput) { return ((*so->so_proto->pr_ctloutput) - (PRCO_GETOPT, so, level, optname, mp, p)); + (so, sopt)); } else return (ENOPROTOOPT); } else { - m = m_get(M_WAIT, MT_SOOPTS); - m->m_len = sizeof (int); - - switch (optname) { - + switch (sopt->sopt_name) { case SO_LINGER: - m->m_len = sizeof (struct linger); - mtod(m, struct linger *)->l_onoff = - so->so_options & SO_LINGER; - mtod(m, struct linger *)->l_linger = so->so_linger; + l.l_onoff = so->so_options & SO_LINGER; + l.l_linger = so->so_linger; + error = sooptcopyout(sopt, &l, sizeof l); break; case SO_USELOOPBACK: @@ -1077,53 +1130,51 @@ case SO_BROADCAST: case SO_OOBINLINE: case SO_TIMESTAMP: - *mtod(m, int *) = so->so_options & optname; + optval = so->so_options & sopt->sopt_name; +integer: + error = sooptcopyout(sopt, &optval, sizeof optval); break; case SO_TYPE: - *mtod(m, int *) = so->so_type; - break; + optval = so->so_type; + goto integer; case SO_ERROR: - *mtod(m, int *) = so->so_error; + optval = so->so_error; so->so_error = 0; - break; + goto integer; case SO_SNDBUF: - *mtod(m, int *) = so->so_snd.sb_hiwat; - break; + optval = so->so_snd.sb_hiwat; + goto integer; case SO_RCVBUF: - *mtod(m, int *) = so->so_rcv.sb_hiwat; - break; + optval = so->so_rcv.sb_hiwat; + goto integer; case SO_SNDLOWAT: - *mtod(m, int *) = so->so_snd.sb_lowat; - break; + optval = so->so_snd.sb_lowat; + goto integer; case SO_RCVLOWAT: - *mtod(m, int *) = so->so_rcv.sb_lowat; - break; + optval = so->so_rcv.sb_lowat; + goto integer; case SO_SNDTIMEO: case SO_RCVTIMEO: - { - int val = (optname == SO_SNDTIMEO ? - so->so_snd.sb_timeo : so->so_rcv.sb_timeo); - - m->m_len = sizeof(struct timeval); - mtod(m, struct timeval *)->tv_sec = val / hz; - mtod(m, struct timeval *)->tv_usec = - (val % hz) * tick; - break; - } + optval = (sopt->sopt_name == SO_SNDTIMEO ? + so->so_snd.sb_timeo : so->so_rcv.sb_timeo); + + tv.tv_sec = optval / hz; + tv.tv_usec = (optval % hz) * tick; + error = sooptcopyout(sopt, &tv, sizeof tv); + break; default: - (void)m_free(m); - return (ENOPROTOOPT); + error = ENOPROTOOPT; + break; } - *mp = m; - return (0); + return (error); } } Index: kern/uipc_syscalls.c =================================================================== RCS file: /home/cvs/src/sys/kern/uipc_syscalls.c,v retrieving revision 1.40 diff -u -r1.40 uipc_syscalls.c --- uipc_syscalls.c 1998/06/10 10:30:23 1.40 +++ uipc_syscalls.c 1998/08/11 18:46:36 @@ -981,34 +981,26 @@ } */ *uap; { struct file *fp; - struct mbuf *m = NULL; + struct sockopt sopt; int error; + if (uap->val == 0 && uap->valsize != 0) + return (EFAULT); + if (uap->valsize < 0) + return (EINVAL); + error = getsock(p->p_fd, uap->s, &fp); if (error) return (error); - if (uap->valsize > MCLBYTES) - return (EINVAL); - if (uap->val) { - m = m_get(M_WAIT, MT_SOOPTS); - if (m == NULL) - return (ENOBUFS); - if (uap->valsize > MLEN) { - MCLGET(m, M_WAIT); - if(!(m->m_flags & M_EXT)) { - m_free(m); - return (ENOBUFS); - } - } - error = copyin(uap->val, mtod(m, caddr_t), (u_int)uap->valsize); - if (error) { - (void) m_free(m); - return (error); - } - m->m_len = uap->valsize; - } - return (sosetopt((struct socket *)fp->f_data, uap->level, - uap->name, m, p)); + + sopt.sopt_dir = SOPT_SET; + sopt.sopt_level = uap->level; + sopt.sopt_name = uap->name; + sopt.sopt_val = uap->val; + sopt.sopt_valsize = uap->valsize; + sopt.sopt_p = p; + + return (sosetopt((struct socket *)fp->f_data, &sopt)); } /* ARGSUSED */ @@ -1023,9 +1015,9 @@ int *avalsize; } */ *uap; { - struct file *fp; - struct mbuf *m = NULL, *m0; - int op, i, valsize, error; + int valsize, error; + struct file *fp; + struct sockopt sopt; error = getsock(p->p_fd, uap->s, &fp); if (error) @@ -1035,26 +1027,24 @@ sizeof (valsize)); if (error) return (error); + if (valsize < 0) + return (EINVAL); } else valsize = 0; - if ((error = sogetopt((struct socket *)fp->f_data, uap->level, - uap->name, &m, p)) == 0 && uap->val && valsize && m != NULL) { - op = 0; - while (m && !error && op < valsize) { - i = min(m->m_len, (valsize - op)); - error = copyout(mtod(m, caddr_t), uap->val, (u_int)i); - op += i; - uap->val += i; - m0 = m; - MFREE(m0,m); - } - valsize = op; - if (error == 0) - error = copyout((caddr_t)&valsize, - (caddr_t)uap->avalsize, sizeof (valsize)); + + sopt.sopt_dir = SOPT_GET; + sopt.sopt_level = uap->level; + sopt.sopt_name = uap->name; + sopt.sopt_val = uap->val; + sopt.sopt_valsize = (size_t)valsize; /* checked non-negative above */ + sopt.sopt_p = p; + + error = sogetopt((struct socket *)fp->f_data, &sopt); + if (error == 0) { + valsize = sopt.sopt_valsize; + error = copyout((caddr_t)&valsize, + (caddr_t)uap->avalsize, sizeof (valsize)); } - if (m != NULL) - (void) m_free(m); return (error); } Index: net/if_vlan.c =================================================================== RCS file: /home/cvs/src/sys/net/if_vlan.c,v retrieving revision 1.2 diff -u -r1.2 if_vlan.c --- if_vlan.c 1998/05/15 20:02:47 1.2 +++ if_vlan.c 1998/08/11 18:46:40 @@ -80,7 +80,7 @@ static void vlan_start(struct ifnet *ifp); static void vlan_ifinit(void *foo); -static int vlan_ioctl(struct ifnet *ifp, int cmd, caddr_t addr); +static int vlan_ioctl(struct ifnet *ifp, u_long cmd, caddr_t addr); static void vlaninit(void *dummy) @@ -262,7 +262,7 @@ } static int -vlan_ioctl(struct ifnet *ifp, int cmd, caddr_t data) +vlan_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) { struct ifaddr *ifa; struct ifnet *p; Index: netinet/in.h =================================================================== RCS file: /home/cvs/src/sys/netinet/in.h,v retrieving revision 1.36 diff -u -r1.36 in.h --- in.h 1998/07/06 03:20:12 1.36 +++ in.h 1998/08/11 18:46:41 @@ -429,21 +429,6 @@ int in_localaddr __P((struct in_addr)); char *inet_ntoa __P((struct in_addr)); /* in libkern */ -/* Firewall hooks */ -struct ip; -typedef int ip_fw_chk_t __P((struct ip**, int, struct ifnet*, u_int16_t*, struct mbuf**, struct sockaddr_in**)); -typedef int ip_fw_ctl_t __P((int, struct mbuf**)); -extern ip_fw_chk_t *ip_fw_chk_ptr; -extern ip_fw_ctl_t *ip_fw_ctl_ptr; - -/* IP NAT hooks */ -typedef int ip_nat_t __P((struct ip**, struct mbuf**, struct ifnet*, int)); -typedef int ip_nat_ctl_t __P((int, struct mbuf**)); -extern ip_nat_t *ip_nat_ptr; -extern ip_nat_ctl_t *ip_nat_ctl_ptr; -#define IP_NAT_IN 0x00000001 -#define IP_NAT_OUT 0x00000002 - #endif /* KERNEL */ #endif Index: netinet/in_proto.c =================================================================== RCS file: /home/cvs/src/sys/netinet/in_proto.c,v retrieving revision 1.46 diff -u -r1.46 in_proto.c --- in_proto.c 1998/03/21 11:33:57 1.46 +++ in_proto.c 1998/08/11 18:46:41 @@ -71,15 +71,6 @@ #include #endif -#ifdef TPIP -void tpip_input(), tpip_ctlinput(), tp_init(), tp_slowtimo(), tp_drain(); -int tp_ctloutput(), tp_usrreq(); -#endif - -#ifdef EON -void eoninput(), eonctlinput(), eonprotoinit(); -#endif /* EON */ - extern struct domain inetdomain; static struct pr_usrreqs nousrreqs; Index: netinet/ip_fw.c =================================================================== RCS file: /home/cvs/src/sys/netinet/ip_fw.c,v retrieving revision 1.94 diff -u -r1.94 ip_fw.c --- ip_fw.c 1998/08/03 17:23:37 1.94 +++ ip_fw.c 1998/08/11 18:46:41 @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -60,6 +61,8 @@ static int fw_verbose_limit = 0; #endif +#define IPFW_DEFAULT_RULE ((u_int)(u_short)~0) + static LIST_HEAD (ip_fw_head, ip_fw_chain) ip_fw_chain; static MALLOC_DEFINE(M_IPFW, "IpFw/IpAcct", "IpFw/IpAcct chain's"); @@ -82,9 +85,8 @@ static int add_entry __P((struct ip_fw_head *chainptr, struct ip_fw *frwl)); static int del_entry __P((struct ip_fw_head *chainptr, u_short number)); -static int zero_entry __P((struct mbuf *m)); -static struct ip_fw *check_ipfw_struct __P((struct ip_fw *m)); -static struct ip_fw *check_ipfw_mbuf __P((struct mbuf *fw)); +static int zero_entry __P((struct ip_fw *)); +static int check_ipfw_struct __P((struct ip_fw *m)); static __inline int iface_match __P((struct ifnet *ifp, union ip_fw_if *ifu, int byname)); @@ -105,7 +107,7 @@ static int ip_fw_chk __P((struct ip **pip, int hlen, struct ifnet *oif, u_int16_t *cookie, struct mbuf **m, struct sockaddr_in **next_hop)); -static int ip_fw_ctl __P((int stage, struct mbuf **mm)); +static int ip_fw_ctl __P((struct sockopt *sopt)); static char err_prefix[] = "ip_fw_ctl:"; @@ -423,7 +425,7 @@ */ chain = LIST_FIRST(&ip_fw_chain); if ( skipto ) { - if (skipto >= 65535) + if (skipto >= IPFW_DEFAULT_RULE) goto dropit; while (chain && (chain->rule->fw_number <= skipto)) { chain = LIST_NEXT(chain, chain); @@ -644,7 +646,7 @@ } #ifdef DIAGNOSTIC - /* Rule 65535 should always be there and should always match */ + /* Rule IPFW_DEFAULT_RULE should always be there and should always match */ if (!chain) panic("ip_fw: chain"); #endif @@ -733,16 +735,10 @@ s = splnet(); - if (!LIST_FIRST(chainptr)) { + if (chainptr->lh_first == 0) { LIST_INSERT_HEAD(chainptr, fwc, chain); splx(s); return(0); - } else if (ftmp->fw_number == (u_short)-1) { - if (fwc) free(fwc, M_IPFW); - if (ftmp) free(ftmp, M_IPFW); - splx(s); - dprintf(("%s bad rule number\n", err_prefix)); - return (EINVAL); } /* If entry number is 0, find highest numbered rule and add 100 */ @@ -753,7 +749,7 @@ else break; } - if (nbr < (u_short)-1 - 100) + if (nbr < IPFW_DEFAULT_RULE - 100) nbr += 100; ftmp->fw_number = nbr; } @@ -808,21 +804,12 @@ } static int -zero_entry(struct mbuf *m) +zero_entry(struct ip_fw *frwl) { - struct ip_fw *frwl; struct ip_fw_chain *fcp; - int s; - - if (m) { - if (m->m_len != sizeof(struct ip_fw)) - return(EINVAL); - frwl = mtod(m, struct ip_fw *); - } - else - frwl = NULL; + int s, cleared; - if (!frwl) { + if (frwl == 0) { s = splnet(); for (fcp = LIST_FIRST(&ip_fw_chain); fcp; fcp = LIST_NEXT(fcp, chain)) { fcp->rule->fw_bcnt = fcp->rule->fw_pcnt = 0; @@ -831,7 +818,7 @@ splx(s); } else { - int cleared = 0; + cleared = 0; /* * It's possible to insert multiple chain entries with the @@ -850,8 +837,8 @@ cleared = 1; break; } - if (!cleared) - return(EINVAL); /* we didn't find any matching rules */ + if (!cleared) /* we didn't find any matching rules */ + return (EINVAL); } if (fw_verbose) { @@ -861,34 +848,22 @@ printf("ipfw: Accounting cleared.\n"); } - return(0); -} - -static struct ip_fw * -check_ipfw_mbuf(struct mbuf *m) -{ - /* Check length */ - if (m->m_len != sizeof(struct ip_fw)) { - dprintf(("%s len=%d, want %d\n", err_prefix, m->m_len, - sizeof(struct ip_fw))); - return (NULL); - } - return(check_ipfw_struct(mtod(m, struct ip_fw *))); + return (0); } -static struct ip_fw * +static int check_ipfw_struct(struct ip_fw *frwl) { /* Check for invalid flag bits */ if ((frwl->fw_flg & ~IP_FW_F_MASK) != 0) { dprintf(("%s undefined flag bits set (flags=%x)\n", err_prefix, frwl->fw_flg)); - return (NULL); + return (EINVAL); } /* Must apply to incoming or outgoing (or both) */ if (!(frwl->fw_flg & (IP_FW_F_IN | IP_FW_F_OUT))) { dprintf(("%s neither in nor out\n", err_prefix)); - return (NULL); + return (EINVAL); } /* Empty interface name is no good */ if (((frwl->fw_flg & IP_FW_F_IIFNAME) @@ -896,7 +871,7 @@ || ((frwl->fw_flg & IP_FW_F_OIFNAME) && !*frwl->fw_out_if.fu_via_if.name)) { dprintf(("%s empty interface name\n", err_prefix)); - return (NULL); + return (EINVAL); } /* Sanity check interface matching */ if ((frwl->fw_flg & IF_FW_F_VIAHACK) == IF_FW_F_VIAHACK) { @@ -905,23 +880,23 @@ && (frwl->fw_flg & IP_FW_F_OIFACE)) { dprintf(("%s outgoing interface check on incoming\n", err_prefix)); - return (NULL); + return (EINVAL); } /* Sanity check port ranges */ if ((frwl->fw_flg & IP_FW_F_SRNG) && IP_FW_GETNSRCP(frwl) < 2) { dprintf(("%s src range set but n_src_p=%d\n", err_prefix, IP_FW_GETNSRCP(frwl))); - return (NULL); + return (EINVAL); } if ((frwl->fw_flg & IP_FW_F_DRNG) && IP_FW_GETNDSTP(frwl) < 2) { dprintf(("%s dst range set but n_dst_p=%d\n", err_prefix, IP_FW_GETNDSTP(frwl))); - return (NULL); + return (EINVAL); } if (IP_FW_GETNSRCP(frwl) + IP_FW_GETNDSTP(frwl) > IP_FW_MAX_PORTS) { dprintf(("%s too many ports (%d+%d)\n", err_prefix, IP_FW_GETNSRCP(frwl), IP_FW_GETNDSTP(frwl))); - return (NULL); + return (EINVAL); } /* * Protocols other than TCP/UDP don't use port range @@ -931,7 +906,7 @@ (IP_FW_GETNSRCP(frwl) || IP_FW_GETNDSTP(frwl))) { dprintf(("%s port(s) specified for non TCP/UDP rule\n", err_prefix)); - return(NULL); + return (EINVAL); } /* @@ -942,19 +917,19 @@ if ((frwl->fw_src.s_addr & (~frwl->fw_smsk.s_addr)) || (frwl->fw_dst.s_addr & (~frwl->fw_dmsk.s_addr))) { dprintf(("%s rule never matches\n", err_prefix)); - return(NULL); + return (EINVAL); } if ((frwl->fw_flg & IP_FW_F_FRAG) && (frwl->fw_prot == IPPROTO_UDP || frwl->fw_prot == IPPROTO_TCP)) { if (frwl->fw_nports) { dprintf(("%s cannot mix 'frag' and ports\n", err_prefix)); - return(NULL); + return (EINVAL); } if (frwl->fw_prot == IPPROTO_TCP && frwl->fw_tcpf != frwl->fw_tcpnf) { dprintf(("%s cannot mix 'frag' and TCP flags\n", err_prefix)); - return(NULL); + return (EINVAL); } } @@ -966,14 +941,14 @@ && !(frwl->fw_prot == IPPROTO_TCP && frwl->fw_reject_code == IP_FW_REJECT_RST)) { dprintf(("%s unknown reject code\n", err_prefix)); - return(NULL); + return (EINVAL); } break; case IP_FW_F_DIVERT: /* Diverting to port zero is invalid */ case IP_FW_F_TEE: if (frwl->fw_divert_port == 0) { dprintf(("%s can't divert to port 0\n", err_prefix)); - return (NULL); + return (EINVAL); } break; case IP_FW_F_DENY: @@ -986,117 +961,102 @@ break; default: dprintf(("%s invalid command\n", err_prefix)); - return(NULL); + return (EINVAL); } - return frwl; + return 0; } static int -ip_fw_ctl(int stage, struct mbuf **mm) +ip_fw_ctl(struct sockopt *sopt) { - int error; - /* - * If we have any number of rules, then it's worth while - * using clusters for this. The smaller case is rare. - * Note that using clusters for setsockopt is only in 3.0 at this time. - */ - struct mbuf *m; + int error, s; + size_t size; + char *buf, *bp; + struct ip_fw_chain *fcp; + struct ip_fw frwl; - if (stage == IP_FW_GET) { - /* - * If we have any number of rules, then it's worth while - * using clusters for this. The smaller case is rare. - * Note that using clusters for setsockopt is only in - * 3.0 at this time. - */ - struct ip_fw_chain *fcp = LIST_FIRST(&ip_fw_chain); - *mm = m = m_get(M_WAIT, MT_SOOPTS); - if (m == NULL) - return (ENOBUFS); - MCLGET(m, M_WAIT); - if (!(m->m_flags & M_EXT)) { -abort: m_freem(*mm); - *mm = NULL; - return (ENOBUFS); + /* Disallow sets in really-really secure mode. */ + if (sopt->sopt_dir == SOPT_SET && securelevel >= 3) + return (EPERM); + error = 0; + + switch (sopt->sopt_name) { + case IP_FW_GET: + for (fcp = LIST_FIRST(&ip_fw_chain), size = 0; fcp; + fcp = LIST_NEXT(fcp, chain)) + size += sizeof *fcp->rule; + buf = malloc(size, M_TEMP, M_WAITOK); + if (buf == 0) { + error = ENOBUFS; + break; } - m->m_len = 0; - for (; fcp; fcp = LIST_NEXT(fcp, chain)) { - /* Will we need a new cluster? */ - if ((m->m_len + sizeof *(fcp->rule)) > MCLBYTES) { - m = m->m_next = m_get(M_WAIT, MT_SOOPTS); - if (m == NULL) { - goto abort; - } - MCLGET(m, M_WAIT); - if (!(m->m_flags & M_EXT)) { - goto abort; - } - m->m_len = 0; - } - memcpy(m->m_data + m->m_len, fcp->rule, - sizeof *(fcp->rule)); - m->m_len += sizeof *(fcp->rule); - } - return (0); - } - m = *mm; - /* only allow get calls if secure mode > 2 */ - if (securelevel > 2) { - if (m) (void)m_free(m); - return(EPERM); - } - if (stage == IP_FW_FLUSH) { - while (LIST_FIRST(&ip_fw_chain) != NULL && - LIST_FIRST(&ip_fw_chain)->rule->fw_number != (u_short)-1) { - struct ip_fw_chain *fcp = LIST_FIRST(&ip_fw_chain); - int s = splnet(); - LIST_REMOVE(LIST_FIRST(&ip_fw_chain), chain); + + for (fcp = LIST_FIRST(&ip_fw_chain), bp = buf; fcp; + fcp = LIST_NEXT(fcp, chain)) { + bcopy(fcp->rule, bp, sizeof *fcp->rule); + bp += sizeof *fcp->rule; + } + error = sooptcopyout(sopt, buf, size); + FREE(buf, M_TEMP); + break; + + case IP_FW_FLUSH: + for (fcp = ip_fw_chain.lh_first; + fcp != 0 && fcp->rule->fw_number != IPFW_DEFAULT_RULE; + fcp = ip_fw_chain.lh_first) { + s = splnet(); + LIST_REMOVE(fcp, chain); + FREE(fcp->rule, M_IPFW); + FREE(fcp, M_IPFW); splx(s); - free(fcp->rule, M_IPFW); - free(fcp, M_IPFW); } - if (m) (void)m_free(m); - return (0); - } - if (stage == IP_FW_ZERO) { - error = zero_entry(m); - if (m) (void)m_free(m); - return (error); - } - if (m == NULL) { - printf("%s NULL mbuf ptr\n", err_prefix); - return (EINVAL); - } + break; + + case IP_FW_ZERO: + if (sopt->sopt_val != 0) { + error = sooptcopyin(sopt, &frwl, sizeof frwl, + sizeof frwl); + if (error || (error = zero_entry(&frwl))) + break; + } else { + error = zero_entry(0); + } + break; - if (stage == IP_FW_ADD) { - struct ip_fw *frwl = check_ipfw_mbuf(m); + case IP_FW_ADD: + error = sooptcopyin(sopt, &frwl, sizeof frwl, sizeof frwl); + if (error || (error = check_ipfw_struct(&frwl))) + break; - if (!frwl) - error = EINVAL; - else - error = add_entry(&ip_fw_chain, frwl); - if (m) (void)m_free(m); - return error; - } - if (stage == IP_FW_DEL) { - if (m->m_len != sizeof(struct ip_fw)) { - dprintf(("%s len=%d, want %d\n", err_prefix, m->m_len, - sizeof(struct ip_fw))); + if (frwl.fw_number == IPFW_DEFAULT_RULE) { + dprintf(("%s can't add rule %u\n", err_prefix, + (unsigned)IPFW_DEFAULT_RULE)); error = EINVAL; - } else if (mtod(m, struct ip_fw *)->fw_number == (u_short)-1) { - dprintf(("%s can't delete rule 65535\n", err_prefix)); + } else { + error = add_entry(&ip_fw_chain, &frwl); + } + break; + + case IP_FW_DEL: + error = sooptcopyin(sopt, &frwl, sizeof frwl, sizeof frwl); + if (error) + break; + + if (frwl.fw_number == IPFW_DEFAULT_RULE) { + dprintf(("%s can't delete rule %u\n", err_prefix, + (unsigned)IPFW_DEFAULT_RULE)); error = EINVAL; - } else - error = del_entry(&ip_fw_chain, - mtod(m, struct ip_fw *)->fw_number); - if (m) (void)m_free(m); - return error; + } else { + error = del_entry(&ip_fw_chain, frwl.fw_number); + } + break; + + default: + panic("ip_fw_ctl"); } - dprintf(("%s unknown request %d\n", err_prefix, stage)); - if (m) (void)m_free(m); - return (EINVAL); + return (error); } void @@ -1110,14 +1070,14 @@ bzero(&default_rule, sizeof default_rule); default_rule.fw_prot = IPPROTO_IP; - default_rule.fw_number = (u_short)-1; + default_rule.fw_number = IPFW_DEFAULT_RULE; #ifdef IPFIREWALL_DEFAULT_TO_ACCEPT default_rule.fw_flg |= IP_FW_F_ACCEPT; #else default_rule.fw_flg |= IP_FW_F_DENY; #endif default_rule.fw_flg |= IP_FW_F_IN | IP_FW_F_OUT; - if (check_ipfw_struct(&default_rule) == NULL || + if (check_ipfw_struct(&default_rule) != 0 || add_entry(&ip_fw_chain, &default_rule)) panic("ip_fw_init"); Index: netinet/ip_fw.h =================================================================== RCS file: /home/cvs/src/sys/netinet/ip_fw.h,v retrieving revision 1.33 diff -u -r1.33 ip_fw.h --- ip_fw.h 1998/07/06 03:20:15 1.33 +++ ip_fw.h 1998/08/11 18:46:41 @@ -184,6 +184,23 @@ */ void ip_fw_init __P((void)); +/* Firewall hooks */ +struct ip; +struct sockopt; +typedef int ip_fw_chk_t __P((struct ip **, int, struct ifnet *, u_int16_t *, + struct mbuf **, struct sockaddr_in **)); +typedef int ip_fw_ctl_t __P((struct sockopt *)); +extern ip_fw_chk_t *ip_fw_chk_ptr; +extern ip_fw_ctl_t *ip_fw_ctl_ptr; + +/* IP NAT hooks */ +typedef int ip_nat_t __P((struct ip **, struct mbuf **, struct ifnet *, int)); +typedef int ip_nat_ctl_t __P((struct sockopt *)); +extern ip_nat_t *ip_nat_ptr; +extern ip_nat_ctl_t *ip_nat_ctl_ptr; +#define IP_NAT_IN 0x00000001 +#define IP_NAT_OUT 0x00000002 + #endif /* KERNEL */ #endif /* _IP_FW_H */ Index: netinet/ip_input.c =================================================================== RCS file: /home/cvs/src/sys/netinet/ip_input.c,v retrieving revision 1.97 diff -u -r1.97 ip_input.c --- ip_input.c 1998/07/13 12:12:24 1.97 +++ ip_input.c 1998/08/11 18:46:41 @@ -142,6 +142,9 @@ #endif #ifdef COMPAT_IPFW + +#include + /* Firewall hooks */ ip_fw_chk_t *ip_fw_chk_ptr; ip_fw_ctl_t *ip_fw_ctl_ptr; @@ -1234,7 +1237,7 @@ if (ip_nhops == 0) return ((struct mbuf *)0); - m = m_get(M_DONTWAIT, MT_SOOPTS); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) return ((struct mbuf *)0); Index: netinet/ip_mroute.c =================================================================== RCS file: /home/cvs/src/sys/netinet/ip_mroute.c,v retrieving revision 1.47 diff -u -r1.47 ip_mroute.c --- ip_mroute.c 1998/06/30 10:56:31 1.47 +++ ip_mroute.c 1998/08/11 18:46:41 @@ -54,10 +54,8 @@ extern int _ip_mforward __P((struct ip *ip, struct ifnet *ifp, struct mbuf *m, struct ip_moptions *imo)); extern int _ip_mrouter_done __P((void)); -extern int _ip_mrouter_get __P((int cmd, struct socket *so, - struct mbuf **m)); -extern int _ip_mrouter_set __P((int cmd, struct socket *so, - struct mbuf *m)); +extern int _ip_mrouter_get __P((struct socket *so, struct sockopt *sopt)); +extern int _ip_mrouter_set __P((struct socket *so, struct sockopt *sopt)); extern int _mrt_ioctl __P((int req, caddr_t data, struct proc *p)); /* @@ -70,27 +68,25 @@ u_int rsvpdebug = 0; int -_ip_mrouter_set(cmd, so, m) - int cmd; +_ip_mrouter_set(so, sopt) struct socket *so; - struct mbuf *m; + struct sockopt *sopt; { return(EOPNOTSUPP); } -int (*ip_mrouter_set)(int, struct socket *, struct mbuf *) = _ip_mrouter_set; +int (*ip_mrouter_set)(struct socket *, struct sockopt *) = _ip_mrouter_set; int -_ip_mrouter_get(cmd, so, m) - int cmd; +_ip_mrouter_get(so, sopt) struct socket *so; - struct mbuf **m; + struct sockopt *sopt; { return(EOPNOTSUPP); } -int (*ip_mrouter_get)(int, struct socket *, struct mbuf **) = _ip_mrouter_get; +int (*ip_mrouter_get)(struct socket *, struct sockopt *) = _ip_mrouter_get; int _ip_mrouter_done() @@ -161,17 +157,17 @@ u_long (*ip_mcast_src)(int) = _ip_mcast_src; int -ip_rsvp_vif_init(so, m) +ip_rsvp_vif_init(so, sopt) struct socket *so; - struct mbuf *m; + struct sockopt *sopt; { return(EINVAL); } int -ip_rsvp_vif_done(so, m) +ip_rsvp_vif_done(so, sopt) struct socket *so; - struct mbuf *m; + struct sockopt *sopt; { return(EINVAL); } @@ -279,22 +275,20 @@ static u_long X_ip_mcast_src __P((int vifi)); static int X_ip_mforward __P((struct ip *ip, struct ifnet *ifp, struct mbuf *m, struct ip_moptions *imo)); static int X_ip_mrouter_done __P((void)); -static int X_ip_mrouter_get __P((int cmd, struct socket *so, struct mbuf **m)); -static int X_ip_mrouter_set __P((int cmd, struct socket *so, struct mbuf *m)); +static int X_ip_mrouter_get __P((struct socket *so, struct sockopt *m)); +static int X_ip_mrouter_set __P((struct socket *so, struct sockopt *m)); static int X_legal_vif_num __P((int vif)); static int X_mrt_ioctl __P((int cmd, caddr_t data)); static int get_sg_cnt(struct sioc_sg_req *); static int get_vif_cnt(struct sioc_vif_req *); -static int ip_mrouter_init(struct socket *, struct mbuf *); +static int ip_mrouter_init(struct socket *, int); static int add_vif(struct vifctl *); -static int del_vif(vifi_t *); +static int del_vif(vifi_t); static int add_mfc(struct mfcctl *); static int del_mfc(struct mfcctl *); static int socket_send(struct socket *, struct mbuf *, struct sockaddr_in *); -static int get_version(struct mbuf *); -static int get_assert(struct mbuf *); -static int set_assert(int *); +static int set_assert(int); static void expire_upcalls(void *); static int ip_mdq(struct mbuf *, struct ifnet *, struct mfc *, vifi_t); @@ -386,53 +380,102 @@ * Handle MRT setsockopt commands to modify the multicast routing tables. */ static int -X_ip_mrouter_set(cmd, so, m) - int cmd; - struct socket *so; - struct mbuf *m; +X_ip_mrouter_set(so, sopt) + struct socket *so; + struct sockopt *sopt; { - if (cmd != MRT_INIT && so != ip_mrouter) return EACCES; + int error, optval; + vifi_t vifi; + struct vifctl vifc; + struct mfcctl mfc; + + if (so != ip_mrouter && sopt->sopt_name != MRT_INIT) + return (EPERM); + + error = 0; + switch (sopt->sopt_name) { + case MRT_INIT: + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; + error = ip_mrouter_init(so, optval); + break; - switch (cmd) { - case MRT_INIT: return ip_mrouter_init(so, m); - case MRT_DONE: return ip_mrouter_done(); - case MRT_ADD_VIF: return add_vif (mtod(m, struct vifctl *)); - case MRT_DEL_VIF: return del_vif (mtod(m, vifi_t *)); - case MRT_ADD_MFC: return add_mfc (mtod(m, struct mfcctl *)); - case MRT_DEL_MFC: return del_mfc (mtod(m, struct mfcctl *)); - case MRT_ASSERT: return set_assert(mtod(m, int *)); - default: return EOPNOTSUPP; - } + case MRT_DONE: + error = ip_mrouter_done(); + break; + + case MRT_ADD_VIF: + error = sooptcopyin(sopt, &vifc, sizeof vifc, sizeof vifc); + if (error) + break; + error = add_vif(&vifc); + break; + + case MRT_DEL_VIF: + error = sooptcopyin(sopt, &vifi, sizeof vifi, sizeof vifi); + if (error) + break; + error = del_vif(vifi); + break; + + case MRT_ADD_MFC: + case MRT_DEL_MFC: + error = sooptcopyin(sopt, &mfc, sizeof mfc, sizeof mfc); + if (error) + break; + if (sopt->sopt_name == MRT_ADD_MFC) + error = add_mfc(&mfc); + else + error = del_mfc(&mfc); + + case MRT_ASSERT: + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; + set_assert(optval); + + default: + error = EOPNOTSUPP; + break; + } + return (error); } #ifndef MROUTE_LKM -int (*ip_mrouter_set)(int, struct socket *, struct mbuf *) = X_ip_mrouter_set; +int (*ip_mrouter_set)(struct socket *, struct sockopt *) = X_ip_mrouter_set; #endif /* * Handle MRT getsockopt commands */ static int -X_ip_mrouter_get(cmd, so, m) - int cmd; - struct socket *so; - struct mbuf **m; +X_ip_mrouter_get(so, sopt) + struct socket *so; + struct sockopt *sopt; { - struct mbuf *mb; + int error; + static int version = 0x0305; /* !!! why is this here? XXX */ - if (so != ip_mrouter) return EACCES; + switch (sopt->sopt_name) { + case MRT_VERSION: + error = sooptcopyout(sopt, &version, sizeof version); + break; - *m = mb = m_get(M_WAIT, MT_SOOPTS); - - switch (cmd) { - case MRT_VERSION: return get_version(mb); - case MRT_ASSERT: return get_assert(mb); - default: return EOPNOTSUPP; - } + case MRT_ASSERT: + error = sooptcopyout(sopt, &pim_assert, sizeof pim_assert); + break; + default: + error = EOPNOTSUPP; + break; + } + return (error); } #ifndef MROUTE_LKM -int (*ip_mrouter_get)(int, struct socket *, struct mbuf **) = X_ip_mrouter_get; +int (*ip_mrouter_get)(struct socket *, struct sockopt *) = X_ip_mrouter_get; #endif /* @@ -509,9 +552,9 @@ * Enable multicast routing */ static int -ip_mrouter_init(so, m) +ip_mrouter_init(so, version) struct socket *so; - struct mbuf *m; + int version; { int *v; @@ -522,11 +565,7 @@ if (so->so_type != SOCK_RAW || so->so_proto->pr_protocol != IPPROTO_IGMP) return EOPNOTSUPP; - if (!m || (m->m_len != sizeof(int *))) - return ENOPROTOOPT; - - v = mtod(m, int *); - if (*v != 1) + if (version != 1) return ENOPROTOOPT; if (ip_mrouter != NULL) return EADDRINUSE; @@ -626,47 +665,17 @@ int (*ip_mrouter_done)(void) = X_ip_mrouter_done; #endif -static int -get_version(mb) - struct mbuf *mb; -{ - int *v; - - v = mtod(mb, int *); - - *v = 0x0305; /* XXX !!!! */ - mb->m_len = sizeof(int); - - return 0; -} - /* * Set PIM assert processing global */ static int set_assert(i) - int *i; + int i; { - if ((*i != 1) && (*i != 0)) + if ((i != 1) && (i != 0)) return EINVAL; - pim_assert = *i; - - return 0; -} - -/* - * Get PIM assert processing global - */ -static int -get_assert(m) - struct mbuf *m; -{ - int *i; - - i = mtod(m, int *); - - *i = pim_assert; + pim_assert = i; return 0; } @@ -777,17 +786,16 @@ * Delete a vif from the vif table */ static int -del_vif(vifip) - vifi_t *vifip; +del_vif(vifi) + vifi_t vifi; { - register struct vif *vifp = viftable + *vifip; - register vifi_t vifi; + register struct vif *vifp = &viftable[vifi]; register struct mbuf *m; struct ifnet *ifp; struct ifreq ifr; int s; - if (*vifip >= numvifs) return EINVAL; + if (vifi >= numvifs) return EINVAL; if (vifp->v_lcl_addr.s_addr == 0) return EADDRNOTAVAIL; s = splnet(); @@ -816,6 +824,9 @@ bzero((caddr_t)vifp->v_tbf, sizeof(*(vifp->v_tbf))); bzero((caddr_t)vifp, sizeof (*vifp)); + if (mrtdebug) + log(LOG_DEBUG, "del_vif %d, numvifs %d\n", vifi, numvifs); + /* Adjust numvifs down */ for (vifi = numvifs; vifi > 0; vifi--) if (viftable[vifi-1].v_lcl_addr.s_addr != 0) break; @@ -823,9 +834,6 @@ splx(s); - if (mrtdebug) - log(LOG_DEBUG, "del_vif %d, numvifs %d\n", *vifip, numvifs); - return 0; } @@ -2007,12 +2015,11 @@ */ int -ip_rsvp_vif_init(so, m) - struct socket *so; - struct mbuf *m; +ip_rsvp_vif_init(so, sopt) + struct socket *so; + struct sockopt *sopt; { - int i; - register int s; + int error, i, s; if (rsvpdebug) printf("ip_rsvp_vif_init: so_type = %d, pr_protocol = %d\n", @@ -2022,13 +2029,12 @@ return EOPNOTSUPP; /* Check mbuf. */ - if (m == NULL || m->m_len != sizeof(int)) { - return EINVAL; - } - i = *(mtod(m, int *)); + error = sooptcopyin(sopt, &i, sizeof i, sizeof i); + if (error) + return (error); if (rsvpdebug) - printf("ip_rsvp_vif_init: vif = %d rsvp_on = %d\n",i,rsvp_on); + printf("ip_rsvp_vif_init: vif = %d rsvp_on = %d\n", i, rsvp_on); s = splnet(); @@ -2058,49 +2064,48 @@ } int -ip_rsvp_vif_done(so, m) - struct socket *so; - struct mbuf *m; +ip_rsvp_vif_done(so, sopt) + struct socket *so; + struct sockopt *sopt; { - int i; - register int s; + int error, i, s; - if (rsvpdebug) - printf("ip_rsvp_vif_done: so_type = %d, pr_protocol = %d\n", - so->so_type, so->so_proto->pr_protocol); + if (rsvpdebug) + printf("ip_rsvp_vif_done: so_type = %d, pr_protocol = %d\n", + so->so_type, so->so_proto->pr_protocol); - if (so->so_type != SOCK_RAW || so->so_proto->pr_protocol != IPPROTO_RSVP) - return EOPNOTSUPP; + if (so->so_type != SOCK_RAW || + so->so_proto->pr_protocol != IPPROTO_RSVP) + return EOPNOTSUPP; - /* Check mbuf. */ - if (m == NULL || m->m_len != sizeof(int)) { - return EINVAL; - } - i = *(mtod(m, int *)); + error = sooptcopyin(sopt, &i, sizeof i, sizeof i); + if (error) + return (error); - s = splnet(); + s = splnet(); - /* Check vif. */ - if (!legal_vif_num(i)) { - splx(s); - return EADDRNOTAVAIL; - } + /* Check vif. */ + if (!legal_vif_num(i)) { + splx(s); + return EADDRNOTAVAIL; + } - if (rsvpdebug) - printf("ip_rsvp_vif_done: v_rsvpd = %p so = %p\n", - viftable[i].v_rsvpd, so); + if (rsvpdebug) + printf("ip_rsvp_vif_done: v_rsvpd = %p so = %p\n", + viftable[i].v_rsvpd, so); - viftable[i].v_rsvpd = NULL; - /* This may seem silly, but we need to be sure we don't over-decrement - * the RSVP counter, in case something slips up. - */ - if (viftable[i].v_rsvp_on) { - viftable[i].v_rsvp_on = 0; - rsvp_on--; - } + viftable[i].v_rsvpd = NULL; + /* + * This may seem silly, but we need to be sure we don't over-decrement + * the RSVP counter, in case something slips up. + */ + if (viftable[i].v_rsvp_on) { + viftable[i].v_rsvp_on = 0; + rsvp_on--; + } - splx(s); - return 0; + splx(s); + return 0; } void Index: netinet/ip_mroute.h =================================================================== RCS file: /home/cvs/src/sys/netinet/ip_mroute.h,v retrieving revision 1.13 diff -u -r1.13 ip_mroute.h --- ip_mroute.h 1997/02/22 09:41:35 1.13 +++ ip_mroute.h 1998/08/11 18:46:41 @@ -248,8 +248,10 @@ #ifdef KERNEL -extern int (*ip_mrouter_set) __P((int, struct socket *, struct mbuf *)); -extern int (*ip_mrouter_get) __P((int, struct socket *, struct mbuf **)); +struct sockopt; + +extern int (*ip_mrouter_set) __P((struct socket *, struct sockopt *)); +extern int (*ip_mrouter_get) __P((struct socket *, struct sockopt *)); extern int (*ip_mrouter_done) __P((void)); #ifdef MROUTING extern int (*mrt_ioctl) __P((int, caddr_t)); Index: netinet/ip_output.c =================================================================== RCS file: /home/cvs/src/sys/netinet/ip_output.c,v retrieving revision 1.80 diff -u -r1.80 ip_output.c --- ip_output.c 1998/08/01 08:44:33 1.80 +++ ip_output.c 1998/08/11 18:46:41 @@ -72,6 +72,10 @@ #undef COMPAT_IPFW #endif +#ifdef COMPAT_IPFW +#include +#endif + #ifdef IPFIREWALL_FORWARD_DEBUG #define print_ip(a) printf("%ld.%ld.%ld.%ld",(ntohl(a.s_addr)>>24)&0xFF,\ (ntohl(a.s_addr)>>16)&0xFF,\ @@ -85,10 +89,10 @@ static void ip_mloopback __P((struct ifnet *, struct mbuf *, struct sockaddr_in *, int)); static int ip_getmoptions - __P((int, struct ip_moptions *, struct mbuf **)); -static int ip_pcbopts __P((struct mbuf **, struct mbuf *)); + __P((struct sockopt *, struct ip_moptions *)); +static int ip_pcbopts __P((int, struct mbuf **, struct mbuf *)); static int ip_setmoptions - __P((int, struct ip_moptions **, struct mbuf *)); + __P((struct sockopt *, struct ip_moptions **)); #if defined(IPFILTER_LKM) || defined(IPFILTER) int ip_optcopy __P((struct ip *, struct ip *)); @@ -742,33 +746,43 @@ * IP socket option processing. */ int -ip_ctloutput(op, so, level, optname, mp, p) - int op; +ip_ctloutput(so, sopt) struct socket *so; - int level, optname; - struct mbuf **mp; - struct proc *p; + struct sockopt *sopt; { - register struct inpcb *inp = sotoinpcb(so); - register struct mbuf *m = *mp; - register int optval = 0; - int error = 0; + struct inpcb *inp = sotoinpcb(so); + int error, optval; - if (level != IPPROTO_IP) { - error = EINVAL; - if (op == PRCO_SETOPT && *mp) - (void) m_free(*mp); - } else switch (op) { + error = optval = 0; + if (sopt->sopt_level != IPPROTO_IP) { + return (EINVAL); + } - case PRCO_SETOPT: - switch (optname) { + switch (sopt->sopt_dir) { + case SOPT_SET: + switch (sopt->sopt_name) { case IP_OPTIONS: #ifdef notyet case IP_RETOPTS: - return (ip_pcbopts(optname, &inp->inp_options, m)); -#else - return (ip_pcbopts(&inp->inp_options, m)); #endif + { + struct mbuf *m; + if (sopt->sopt_valsize > MLEN) { + error = EMSGSIZE; + break; + } + MGET(m, sopt->sopt_p ? M_WAIT : M_DONTWAIT, MT_HEADER); + if (m == 0) { + error = ENOBUFS; + break; + } + m->m_len = sopt->sopt_valsize; + error = sooptcopyin(sopt, mtod(m, char *), m->m_len, + m->m_len); + + return (ip_pcbopts(sopt->sopt_name, &inp->inp_options, + m)); + } case IP_TOS: case IP_TTL: @@ -776,41 +790,40 @@ case IP_RECVRETOPTS: case IP_RECVDSTADDR: case IP_RECVIF: - if (m == 0 || m->m_len != sizeof(int)) - error = EINVAL; - else { - optval = *mtod(m, int *); - switch (optname) { + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; - case IP_TOS: - inp->inp_ip_tos = optval; - break; + switch (sopt->sopt_name) { + case IP_TOS: + inp->inp_ip_tos = optval; + break; - case IP_TTL: - inp->inp_ip_ttl = optval; - break; + case IP_TTL: + inp->inp_ip_ttl = optval; + break; #define OPTSET(bit) \ if (optval) \ inp->inp_flags |= bit; \ else \ inp->inp_flags &= ~bit; - case IP_RECVOPTS: - OPTSET(INP_RECVOPTS); - break; + case IP_RECVOPTS: + OPTSET(INP_RECVOPTS); + break; - case IP_RECVRETOPTS: - OPTSET(INP_RECVRETOPTS); - break; + case IP_RECVRETOPTS: + OPTSET(INP_RECVRETOPTS); + break; - case IP_RECVDSTADDR: - OPTSET(INP_RECVDSTADDR); - break; + case IP_RECVDSTADDR: + OPTSET(INP_RECVDSTADDR); + break; - case IP_RECVIF: - OPTSET(INP_RECVIF); - break; - } + case IP_RECVIF: + OPTSET(INP_RECVIF); + break; } break; #undef OPTSET @@ -821,36 +834,34 @@ case IP_MULTICAST_LOOP: case IP_ADD_MEMBERSHIP: case IP_DROP_MEMBERSHIP: - error = ip_setmoptions(optname, &inp->inp_moptions, m); + error = ip_setmoptions(sopt, &inp->inp_moptions); break; case IP_PORTRANGE: - if (m == 0 || m->m_len != sizeof(int)) - error = EINVAL; - else { - optval = *mtod(m, int *); - - switch (optval) { + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; - case IP_PORTRANGE_DEFAULT: - inp->inp_flags &= ~(INP_LOWPORT); - inp->inp_flags &= ~(INP_HIGHPORT); - break; + switch (optval) { + case IP_PORTRANGE_DEFAULT: + inp->inp_flags &= ~(INP_LOWPORT); + inp->inp_flags &= ~(INP_HIGHPORT); + break; - case IP_PORTRANGE_HIGH: - inp->inp_flags &= ~(INP_LOWPORT); - inp->inp_flags |= INP_HIGHPORT; - break; + case IP_PORTRANGE_HIGH: + inp->inp_flags &= ~(INP_LOWPORT); + inp->inp_flags |= INP_HIGHPORT; + break; - case IP_PORTRANGE_LOW: - inp->inp_flags &= ~(INP_HIGHPORT); - inp->inp_flags |= INP_LOWPORT; - break; + case IP_PORTRANGE_LOW: + inp->inp_flags &= ~(INP_HIGHPORT); + inp->inp_flags |= INP_LOWPORT; + break; - default: - error = EINVAL; - break; - } + default: + error = EINVAL; + break; } break; @@ -858,21 +869,19 @@ error = ENOPROTOOPT; break; } - if (m) - (void)m_free(m); break; - case PRCO_GETOPT: - switch (optname) { + case SOPT_GET: + switch (sopt->sopt_name) { case IP_OPTIONS: case IP_RETOPTS: - *mp = m = m_get(M_WAIT, MT_SOOPTS); - if (inp->inp_options) { - m->m_len = inp->inp_options->m_len; - bcopy(mtod(inp->inp_options, void *), - mtod(m, void *), m->m_len); - } else - m->m_len = 0; + if (inp->inp_options) + error = sooptcopyout(sopt, + mtod(inp->inp_options, + char *), + inp->inp_options->m_len); + else + sopt->sopt_valsize = 0; break; case IP_TOS: @@ -881,9 +890,8 @@ case IP_RECVRETOPTS: case IP_RECVDSTADDR: case IP_RECVIF: - *mp = m = m_get(M_WAIT, MT_SOOPTS); - m->m_len = sizeof(int); - switch (optname) { + case IP_PORTRANGE: + switch (sopt->sopt_name) { case IP_TOS: optval = inp->inp_ip_tos; @@ -910,8 +918,17 @@ case IP_RECVIF: optval = OPTBIT(INP_RECVIF); break; + + case IP_PORTRANGE: + if (inp->inp_flags & INP_HIGHPORT) + optval = IP_PORTRANGE_HIGH; + else if (inp->inp_flags & INP_LOWPORT) + optval = IP_PORTRANGE_LOW; + else + optval = 0; + break; } - *mtod(m, int *) = optval; + error = sooptcopyout(sopt, &optval, sizeof optval); break; case IP_MULTICAST_IF: @@ -920,21 +937,7 @@ case IP_MULTICAST_LOOP: case IP_ADD_MEMBERSHIP: case IP_DROP_MEMBERSHIP: - error = ip_getmoptions(optname, inp->inp_moptions, mp); - break; - - case IP_PORTRANGE: - *mp = m = m_get(M_WAIT, MT_SOOPTS); - m->m_len = sizeof(int); - - if (inp->inp_flags & INP_HIGHPORT) - optval = IP_PORTRANGE_HIGH; - else if (inp->inp_flags & INP_LOWPORT) - optval = IP_PORTRANGE_LOW; - else - optval = 0; - - *mtod(m, int *) = optval; + error = ip_getmoptions(sopt, inp->inp_moptions); break; default: @@ -952,12 +955,8 @@ * with destination address if source routed. */ static int -#ifdef notyet ip_pcbopts(optname, pcbopt, m) int optname; -#else -ip_pcbopts(pcbopt, m) -#endif struct mbuf **pcbopt; register struct mbuf *m; { @@ -1054,23 +1053,28 @@ } /* + * XXX + * The whole multicast option thing needs to be re-thought. + * Several of these options are equally applicable to non-multicast + * transmission, and one (IP_MULTICAST_TTL) totally duplicates a + * standard option (IP_TTL). + */ +/* * Set the IP multicast options in response to user setsockopt(). */ static int -ip_setmoptions(optname, imop, m) - int optname; +ip_setmoptions(sopt, imop) + struct sockopt *sopt; struct ip_moptions **imop; - struct mbuf *m; { - register int error = 0; - u_char loop; - register int i; + int error = 0; + int i; struct in_addr addr; - register struct ip_mreq *mreq; - register struct ifnet *ifp; - register struct ip_moptions *imo = *imop; + struct ip_mreq mreq; + struct ifnet *ifp; + struct ip_moptions *imo = *imop; struct route ro; - register struct sockaddr_in *dst; + struct sockaddr_in *dst; int s; if (imo == NULL) { @@ -1091,18 +1095,16 @@ imo->imo_num_memberships = 0; } - switch (optname) { + switch (sopt->sopt_name) { /* store an index number for the vif you wanna use in the send */ case IP_MULTICAST_VIF: - if (!legal_vif_num) { + if (legal_vif_num == 0) { error = EOPNOTSUPP; break; } - if (m == NULL || m->m_len != sizeof(int)) { - error = EINVAL; + error = sooptcopyin(sopt, &i, sizeof i, sizeof i); + if (error) break; - } - i = *(mtod(m, int *)); if (!legal_vif_num(i) && (i != -1)) { error = EINVAL; break; @@ -1114,11 +1116,9 @@ /* * Select the interface for outgoing multicast packets. */ - if (m == NULL || m->m_len != sizeof(struct in_addr)) { - error = EINVAL; + error = sooptcopyin(sopt, &addr, sizeof addr, sizeof addr); + if (error) break; - } - addr = *(mtod(m, struct in_addr *)); /* * INADDR_ANY is used to remove a previous selection. * When no interface is selected, a default one is @@ -1147,25 +1147,50 @@ case IP_MULTICAST_TTL: /* * Set the IP time-to-live for outgoing multicast packets. - */ - if (m == NULL || m->m_len != 1) { - error = EINVAL; - break; + * The original multicast API required a char argument, + * which is inconsistent with the rest of the socket API. + * We allow either a char or an int. + */ + if (sopt->sopt_valsize == 1) { + u_char ttl; + error = sooptcopyin(sopt, &ttl, 1, 1); + if (error) + break; + imo->imo_multicast_ttl = ttl; + } else { + u_int ttl; + error = sooptcopyin(sopt, &ttl, sizeof ttl, + sizeof ttl); + if (error) + break; + if (ttl > 255) + error = EINVAL; + else + imo->imo_multicast_ttl = ttl; } - imo->imo_multicast_ttl = *(mtod(m, u_char *)); break; case IP_MULTICAST_LOOP: /* * Set the loopback flag for outgoing multicast packets. - * Must be zero or one. - */ - if (m == NULL || m->m_len != 1 || - (loop = *(mtod(m, u_char *))) > 1) { - error = EINVAL; - break; + * Must be zero or one. The original multicast API required a + * char argument, which is inconsistent with the rest + * of the socket API. We allow either a char or an int. + */ + if (sopt->sopt_valsize == 1) { + u_char loop; + error = sooptcopyin(sopt, &loop, 1, 1); + if (error) + break; + imo->imo_multicast_loop = !!loop; + } else { + u_int loop; + error = sooptcopyin(sopt, &loop, sizeof loop, + sizeof loop); + if (error) + break; + imo->imo_multicast_loop = !!loop; } - imo->imo_multicast_loop = loop; break; case IP_ADD_MEMBERSHIP: @@ -1173,12 +1198,11 @@ * Add a multicast group membership. * Group must be a valid IP multicast address. */ - if (m == NULL || m->m_len != sizeof(struct ip_mreq)) { - error = EINVAL; + error = sooptcopyin(sopt, &mreq, sizeof mreq, sizeof mreq); + if (error) break; - } - mreq = mtod(m, struct ip_mreq *); - if (!IN_MULTICAST(ntohl(mreq->imr_multiaddr.s_addr))) { + + if (!IN_MULTICAST(ntohl(mreq.imr_multiaddr.s_addr))) { error = EINVAL; break; } @@ -1187,12 +1211,12 @@ * If no interface address was provided, use the interface of * the route to the given multicast address. */ - if (mreq->imr_interface.s_addr == INADDR_ANY) { + if (mreq.imr_interface.s_addr == INADDR_ANY) { bzero((caddr_t)&ro, sizeof(ro)); dst = (struct sockaddr_in *)&ro.ro_dst; dst->sin_len = sizeof(*dst); dst->sin_family = AF_INET; - dst->sin_addr = mreq->imr_multiaddr; + dst->sin_addr = mreq.imr_multiaddr; rtalloc(&ro); if (ro.ro_rt == NULL) { error = EADDRNOTAVAIL; @@ -1203,7 +1227,7 @@ rtfree(ro.ro_rt); } else { - INADDR_TO_IFP(mreq->imr_interface, ifp); + INADDR_TO_IFP(mreq.imr_interface, ifp); } /* @@ -1222,7 +1246,7 @@ for (i = 0; i < imo->imo_num_memberships; ++i) { if (imo->imo_membership[i]->inm_ifp == ifp && imo->imo_membership[i]->inm_addr.s_addr - == mreq->imr_multiaddr.s_addr) + == mreq.imr_multiaddr.s_addr) break; } if (i < imo->imo_num_memberships) { @@ -1240,7 +1264,7 @@ * address list for the given interface. */ if ((imo->imo_membership[i] = - in_addmulti(&mreq->imr_multiaddr, ifp)) == NULL) { + in_addmulti(&mreq.imr_multiaddr, ifp)) == NULL) { error = ENOBUFS; splx(s); break; @@ -1254,12 +1278,11 @@ * Drop a multicast group membership. * Group must be a valid IP multicast address. */ - if (m == NULL || m->m_len != sizeof(struct ip_mreq)) { - error = EINVAL; + error = sooptcopyin(sopt, &mreq, sizeof mreq, sizeof mreq); + if (error) break; - } - mreq = mtod(m, struct ip_mreq *); - if (!IN_MULTICAST(ntohl(mreq->imr_multiaddr.s_addr))) { + + if (!IN_MULTICAST(ntohl(mreq.imr_multiaddr.s_addr))) { error = EINVAL; break; } @@ -1269,10 +1292,10 @@ * If an interface address was specified, get a pointer * to its ifnet structure. */ - if (mreq->imr_interface.s_addr == INADDR_ANY) + if (mreq.imr_interface.s_addr == INADDR_ANY) ifp = NULL; else { - INADDR_TO_IFP(mreq->imr_interface, ifp); + INADDR_TO_IFP(mreq.imr_interface, ifp); if (ifp == NULL) { error = EADDRNOTAVAIL; splx(s); @@ -1286,7 +1309,7 @@ if ((ifp == NULL || imo->imo_membership[i]->inm_ifp == ifp) && imo->imo_membership[i]->inm_addr.s_addr == - mreq->imr_multiaddr.s_addr) + mreq.imr_multiaddr.s_addr) break; } if (i == imo->imo_num_memberships) { @@ -1332,57 +1355,63 @@ * Return the IP multicast options in response to user getsockopt(). */ static int -ip_getmoptions(optname, imo, mp) - int optname; +ip_getmoptions(sopt, imo) + struct sockopt *sopt; register struct ip_moptions *imo; - register struct mbuf **mp; { - u_char *ttl; - u_char *loop; - struct in_addr *addr; + struct in_addr addr; struct in_ifaddr *ia; + int error, optval; + u_char coptval; - *mp = m_get(M_WAIT, MT_SOOPTS); - - switch (optname) { - + error = 0; + switch (sopt->sopt_name) { case IP_MULTICAST_VIF: if (imo != NULL) - *(mtod(*mp, int *)) = imo->imo_multicast_vif; + optval = imo->imo_multicast_vif; else - *(mtod(*mp, int *)) = -1; - (*mp)->m_len = sizeof(int); - return(0); + optval = -1; + error = sooptcopyout(sopt, &optval, sizeof optval); + break; case IP_MULTICAST_IF: - addr = mtod(*mp, struct in_addr *); - (*mp)->m_len = sizeof(struct in_addr); if (imo == NULL || imo->imo_multicast_ifp == NULL) - addr->s_addr = INADDR_ANY; + addr.s_addr = INADDR_ANY; else { IFP_TO_IA(imo->imo_multicast_ifp, ia); - addr->s_addr = (ia == NULL) ? INADDR_ANY - : IA_SIN(ia)->sin_addr.s_addr; + addr.s_addr = (ia == NULL) ? INADDR_ANY + : IA_SIN(ia)->sin_addr.s_addr; } - return (0); + error = sooptcopyout(sopt, &addr, sizeof addr); + break; case IP_MULTICAST_TTL: - ttl = mtod(*mp, u_char *); - (*mp)->m_len = 1; - *ttl = (imo == NULL) ? IP_DEFAULT_MULTICAST_TTL - : imo->imo_multicast_ttl; - return (0); + if (imo == 0) + optval = coptval = IP_DEFAULT_MULTICAST_TTL; + else + optval = coptval = imo->imo_multicast_ttl; + if (sopt->sopt_valsize == 1) + error = sooptcopyout(sopt, &coptval, 1); + else + error = sooptcopyout(sopt, &optval, sizeof optval); + break; case IP_MULTICAST_LOOP: - loop = mtod(*mp, u_char *); - (*mp)->m_len = 1; - *loop = (imo == NULL) ? IP_DEFAULT_MULTICAST_LOOP - : imo->imo_multicast_loop; - return (0); + if (imo == 0) + optval = coptval = IP_DEFAULT_MULTICAST_LOOP; + else + optval = coptval = imo->imo_multicast_loop; + if (sopt->sopt_valsize == 1) + error = sooptcopyout(sopt, &coptval, 1); + else + error = sooptcopyout(sopt, &optval, sizeof optval); + break; default: - return (EOPNOTSUPP); + error = ENOPROTOOPT; + break; } + return (error); } /* Index: netinet/ip_var.h =================================================================== RCS file: /home/cvs/src/sys/netinet/ip_var.h,v retrieving revision 1.43 diff -u -r1.43 ip_var.h --- ip_var.h 1998/07/13 12:20:07 1.43 +++ ip_var.h 1998/08/11 18:46:41 @@ -160,8 +160,10 @@ #define IP_ROUTETOIF SO_DONTROUTE /* bypass routing tables */ #define IP_ALLOWBROADCAST SO_BROADCAST /* can send broadcast packets */ +struct ip; struct inpcb; struct route; +struct sockopt; extern struct ipstat ipstat; extern u_short ip_id; /* ip packet ctr, for ids */ @@ -175,8 +177,7 @@ extern int rsvp_on; extern struct pr_usrreqs rip_usrreqs; -int ip_ctloutput __P((int, struct socket *, int, int, struct mbuf **, - struct proc *)); +int ip_ctloutput __P((struct socket *, struct sockopt *sopt)); void ip_drain __P((void)); void ip_freemoptions __P((struct ip_moptions *)); void ip_init __P((void)); @@ -190,8 +191,7 @@ struct mbuf * ip_srcroute __P((void)); void ip_stripoptions __P((struct mbuf *, struct mbuf *)); -int rip_ctloutput __P((int, struct socket *, int, int, struct mbuf **, - struct proc *p)); +int rip_ctloutput __P((struct socket *, struct sockopt *)); void rip_ctlinput __P((int, struct sockaddr *, void *)); void rip_init __P((void)); void rip_input __P((struct mbuf *, int)); @@ -200,8 +200,8 @@ void rsvp_input __P((struct mbuf *, int)); int ip_rsvp_init __P((struct socket *)); int ip_rsvp_done __P((void)); -int ip_rsvp_vif_init __P((struct socket *, struct mbuf *)); -int ip_rsvp_vif_done __P((struct socket *, struct mbuf *)); +int ip_rsvp_vif_init __P((struct socket *, struct sockopt *)); +int ip_rsvp_vif_done __P((struct socket *, struct sockopt *)); void ip_rsvp_force_done __P((struct socket *)); #ifdef IPDIVERT Index: netinet/raw_ip.c =================================================================== RCS file: /home/cvs/src/sys/netinet/raw_ip.c,v retrieving revision 1.54 diff -u -r1.54 raw_ip.c --- raw_ip.c 1998/05/15 20:11:34 1.54 +++ raw_ip.c 1998/08/11 18:46:41 @@ -225,101 +225,127 @@ * Raw IP socket option processing. */ int -rip_ctloutput(op, so, level, optname, m, p) - int op; +rip_ctloutput(so, sopt) struct socket *so; - int level, optname; - struct mbuf **m; - struct proc *p; + struct sockopt *sopt; { - register struct inpcb *inp = sotoinpcb(so); - register int error; + struct inpcb *inp = sotoinpcb(so); + int error, optval; - if (level != IPPROTO_IP) { - if (op == PRCO_SETOPT && *m) - (void)m_free(*m); + if (sopt->sopt_level != IPPROTO_IP) return (EINVAL); - } - switch (optname) { + error = 0; - case IP_HDRINCL: - error = 0; - if (op == PRCO_SETOPT) { - if (m == 0 || *m == 0 || (*m)->m_len < sizeof (int)) - error = EINVAL; - else if (*mtod(*m, int *)) - inp->inp_flags |= INP_HDRINCL; - else - inp->inp_flags &= ~INP_HDRINCL; - if (*m) - (void)m_free(*m); - } else { - *m = m_get(M_WAIT, MT_SOOPTS); - (*m)->m_len = sizeof (int); - *mtod(*m, int *) = inp->inp_flags & INP_HDRINCL; - } - return (error); + switch (sopt->sopt_dir) { + case SOPT_GET: + switch (sopt->sopt_name) { + case IP_HDRINCL: + optval = inp->inp_flags & INP_HDRINCL; + error = sooptcopyout(sopt, &optval, sizeof optval); + break; #ifdef COMPAT_IPFW - case IP_FW_GET: - if (ip_fw_ctl_ptr == NULL || op == PRCO_SETOPT) { - if (*m) (void)m_free(*m); - return(EINVAL); - } - return (*ip_fw_ctl_ptr)(optname, m); - - case IP_FW_ADD: - case IP_FW_DEL: - case IP_FW_FLUSH: - case IP_FW_ZERO: - if (ip_fw_ctl_ptr == NULL || op != PRCO_SETOPT) { - if (*m) (void)m_free(*m); - return(EINVAL); - } - return (*ip_fw_ctl_ptr)(optname, m); + case IP_FW_GET: + if (ip_fw_ctl_ptr == 0) + error = ENOPROTOOPT; + else + error = ip_fw_ctl_ptr(sopt); + break; - case IP_NAT: - if (ip_nat_ctl_ptr == NULL) { - if (*m) (void)m_free(*m); - return(EINVAL); + case IP_NAT: + if (ip_nat_ctl_ptr == 0) + error = ENOPROTOOPT; + else + error = ip_nat_ctl_ptr(sopt); + break; +#endif /* COMPAT_IPFW */ + + case MRT_INIT: + case MRT_DONE: + case MRT_ADD_VIF: + case MRT_DEL_VIF: + case MRT_ADD_MFC: + case MRT_DEL_MFC: + case MRT_VERSION: + case MRT_ASSERT: + error = ip_mrouter_get(so, sopt); + break; + + default: + error = ip_ctloutput(so, sopt); + break; } - return (*ip_nat_ctl_ptr)(op, m); - -#endif - case IP_RSVP_ON: - return ip_rsvp_init(so); break; - case IP_RSVP_OFF: - return ip_rsvp_done(); - break; - - case IP_RSVP_VIF_ON: - return ip_rsvp_vif_init(so, *m); + case SOPT_SET: + switch (sopt->sopt_name) { + case IP_HDRINCL: + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; + if (optval) + inp->inp_flags |= INP_HDRINCL; + else + inp->inp_flags &= ~INP_HDRINCL; + break; - case IP_RSVP_VIF_OFF: - return ip_rsvp_vif_done(so, *m); +#ifdef COMPAT_IPFW + case IP_FW_ADD: + case IP_FW_DEL: + case IP_FW_FLUSH: + case IP_FW_ZERO: + if (ip_fw_ctl_ptr == 0) + error = ENOPROTOOPT; + else + error = ip_fw_ctl_ptr(sopt); + break; - case MRT_INIT: - case MRT_DONE: - case MRT_ADD_VIF: - case MRT_DEL_VIF: - case MRT_ADD_MFC: - case MRT_DEL_MFC: - case MRT_VERSION: - case MRT_ASSERT: - if (op == PRCO_SETOPT) { - error = ip_mrouter_set(optname, so, *m); - if (*m) - (void)m_free(*m); - } else if (op == PRCO_GETOPT) { - error = ip_mrouter_get(optname, so, m); - } else - error = EINVAL; - return (error); + case IP_NAT: + if (ip_nat_ctl_ptr == 0) + error = ENOPROTOOPT; + else + error = ip_nat_ctl_ptr(sopt); + break; +#endif /* COMPAT_IPFW */ + + case IP_RSVP_ON: + error = ip_rsvp_init(so); + break; + + case IP_RSVP_OFF: + error = ip_rsvp_done(); + break; + + /* XXX - should be combined */ + case IP_RSVP_VIF_ON: + error = ip_rsvp_vif_init(so, sopt); + break; + + case IP_RSVP_VIF_OFF: + error = ip_rsvp_vif_done(so, sopt); + break; + + case MRT_INIT: + case MRT_DONE: + case MRT_ADD_VIF: + case MRT_DEL_VIF: + case MRT_ADD_MFC: + case MRT_DEL_MFC: + case MRT_VERSION: + case MRT_ASSERT: + error = ip_mrouter_set(so, sopt); + break; + + default: + error = ip_ctloutput(so, sopt); + break; + } + break; } - return (ip_ctloutput(op, so, level, optname, m, p)); + + return (error); } /* @@ -340,7 +366,7 @@ int err; int flags; - switch(cmd) { + switch (cmd) { case PRC_IFDOWN: for (ia = in_ifaddrhead.tqh_first; ia; ia = ia->ia_link.tqe_next) { Index: netinet/tcp_usrreq.c =================================================================== RCS file: /home/cvs/src/sys/netinet/tcp_usrreq.c,v retrieving revision 1.37 diff -u -r1.37 tcp_usrreq.c --- tcp_usrreq.c 1998/01/27 09:15:11 1.37 +++ tcp_usrreq.c 1998/08/11 18:46:41 @@ -560,104 +560,107 @@ return 0; } +/* + * The new sockopt interface makes it possible for us to block in the + * copyin/out step (if we take a page fault). Taking a page fault at + * splnet() is probably a Bad Thing. (Since sockets and pcbs both now + * use TSM, there probably isn't any need for this function to run at + * splnet() any more. This needs more examination.) + */ int -tcp_ctloutput(op, so, level, optname, mp, p) - int op; +tcp_ctloutput(so, sopt) struct socket *so; - int level, optname; - struct mbuf **mp; - struct proc *p; + struct sockopt *sopt; { - int error = 0, s; - struct inpcb *inp; - register struct tcpcb *tp; - register struct mbuf *m; - register int i; + int error, opt, optval, s; + struct inpcb *inp; + struct tcpcb *tp; + struct mbuf *m; - s = splnet(); + error = 0; + s = splnet(); /* XXX */ inp = sotoinpcb(so); if (inp == NULL) { splx(s); - if (op == PRCO_SETOPT && *mp) - (void) m_free(*mp); return (ECONNRESET); } - if (level != IPPROTO_TCP) { - error = ip_ctloutput(op, so, level, optname, mp, p); + if (sopt->sopt_level != IPPROTO_TCP) { + error = ip_ctloutput(so, sopt); splx(s); return (error); } tp = intotcpcb(inp); - switch (op) { - - case PRCO_SETOPT: - m = *mp; - switch (optname) { - + switch (sopt->sopt_dir) { + case SOPT_SET: + switch (sopt->sopt_name) { case TCP_NODELAY: - if (m == NULL || m->m_len < sizeof (int)) - error = EINVAL; - else if (*mtod(m, int *)) - tp->t_flags |= TF_NODELAY; + case TCP_NOOPT: + case TCP_NOPUSH: + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; + + switch (sopt->sopt_name) { + case TCP_NODELAY: + opt = TF_NODELAY; + break; + case TCP_NOOPT: + opt = TF_NOOPT; + break; + case TCP_NOPUSH: + opt = TF_NOPUSH; + break; + default: + opt = 0; /* dead code to fool gcc */ + break; + } + + if (optval) + tp->t_flags |= opt; else - tp->t_flags &= ~TF_NODELAY; + tp->t_flags &= ~opt; break; case TCP_MAXSEG: - if (m && (i = *mtod(m, int *)) > 0 && i <= tp->t_maxseg) - tp->t_maxseg = i; - else - error = EINVAL; - break; + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; - case TCP_NOOPT: - if (m == NULL || m->m_len < sizeof (int)) - error = EINVAL; - else if (*mtod(m, int *)) - tp->t_flags |= TF_NOOPT; + if (optval > 0 && optval <= tp->t_maxseg) + tp->t_maxseg = optval; else - tp->t_flags &= ~TF_NOOPT; - break; - - case TCP_NOPUSH: - if (m == NULL || m->m_len < sizeof (int)) error = EINVAL; - else if (*mtod(m, int *)) - tp->t_flags |= TF_NOPUSH; - else - tp->t_flags &= ~TF_NOPUSH; break; default: error = ENOPROTOOPT; break; } - if (m) - (void) m_free(m); break; - case PRCO_GETOPT: - *mp = m = m_get(M_WAIT, MT_SOOPTS); - m->m_len = sizeof(int); - - switch (optname) { + case SOPT_GET: + switch (sopt->sopt_name) { case TCP_NODELAY: - *mtod(m, int *) = tp->t_flags & TF_NODELAY; + optval = tp->t_flags & TF_NODELAY; break; case TCP_MAXSEG: - *mtod(m, int *) = tp->t_maxseg; + optval = tp->t_maxseg; break; case TCP_NOOPT: - *mtod(m, int *) = tp->t_flags & TF_NOOPT; + optval = tp->t_flags & TF_NOOPT; break; case TCP_NOPUSH: - *mtod(m, int *) = tp->t_flags & TF_NOPUSH; + optval = tp->t_flags & TF_NOPUSH; break; default: error = ENOPROTOOPT; break; } + if (error == 0) + error = sooptcopyout(sopt, &optval, sizeof optval); break; } splx(s); Index: netinet/tcp_var.h =================================================================== RCS file: /home/cvs/src/sys/netinet/tcp_var.h,v retrieving revision 1.46 diff -u -r1.46 tcp_var.h --- tcp_var.h 1998/07/13 11:09:52 1.46 +++ tcp_var.h 1998/08/11 18:46:41 @@ -344,8 +344,7 @@ struct tcpcb * tcp_close __P((struct tcpcb *)); void tcp_ctlinput __P((int, struct sockaddr *, void *)); -int tcp_ctloutput __P((int, struct socket *, int, int, struct mbuf **, - struct proc *)); +int tcp_ctloutput __P((struct socket *, struct sockopt *)); struct tcpcb * tcp_drop __P((struct tcpcb *, int)); void tcp_drain __P((void)); Index: netipx/ipx_ip.c =================================================================== RCS file: /home/cvs/src/sys/netipx/ipx_ip.c,v retrieving revision 1.21 diff -u -r1.21 ipx_ip.c --- ipx_ip.c 1998/06/07 17:12:19 1.21 +++ ipx_ip.c 1998/08/11 18:46:42 @@ -316,17 +316,23 @@ static struct ifreq ifr_ipxip = {"ipxip0"}; int -ipxip_route(so, m, p) +ipxip_route(so, sopt) struct socket *so; - register struct mbuf *m; - struct proc *p; + struct sockopt *sopt; { - register struct ipxip_req *rq = mtod(m, struct ipxip_req *); - struct sockaddr_ipx *ipx_dst = (struct sockaddr_ipx *)&rq->rq_ipx; - struct sockaddr_in *ip_dst = (struct sockaddr_in *)&rq->rq_ip; - struct route ro; + int error; struct ifnet_en *ifn; struct sockaddr_in *src; + struct ipxip_req rq; + struct sockaddr_ipx *ipx_dst; + struct sockaddr_in *ip_dst; + struct route ro; + + error = sooptcopyin(sopt, &rq, sizeof rq, sizeof rq); + if (error) + return (error); + ipx_dst = (struct sockaddr_ipx *)&rq.rq_ipx; + ip_dst = (struct sockaddr_in *)&rq.rq_ip; /* * First, make sure we already have an IPX address: @@ -387,14 +393,14 @@ ifr_ipxip.ifr_name[4] = '0' + ipxipif.if_unit - 1; ifr_ipxip.ifr_dstaddr = *(struct sockaddr *)ipx_dst; ipx_control(so, (int)SIOCSIFDSTADDR, (caddr_t)&ifr_ipxip, - (struct ifnet *)ifn, p); + (struct ifnet *)ifn, sopt->sopt_p); /* use any of our addresses */ satoipx_addr(ifr_ipxip.ifr_addr).x_host = ipx_ifaddr->ia_addr.sipx_addr.x_host; return (ipx_control(so, (int)SIOCSIFADDR, (caddr_t)&ifr_ipxip, - (struct ifnet *)ifn, p)); + (struct ifnet *)ifn, sopt->sopt_p)); } static int Index: netipx/ipx_ip.h =================================================================== RCS file: /home/cvs/src/sys/netipx/ipx_ip.h,v retrieving revision 1.11 diff -u -r1.11 ipx_ip.h --- ipx_ip.h 1997/06/26 19:35:50 1.11 +++ ipx_ip.h 1998/08/11 18:46:42 @@ -53,7 +53,7 @@ void ipxip_ctlinput __P((int cmd, struct sockaddr *sa, void *arg)); void ipxip_input __P((struct mbuf *m, int hlen)); -int ipxip_route __P((struct socket *so, struct mbuf *m, struct proc *p)); +int ipxip_route __P((struct socket *so, struct sockopt *sopt)); #endif /* KERNEL */ Index: netipx/ipx_usrreq.c =================================================================== RCS file: /home/cvs/src/sys/netipx/ipx_usrreq.c,v retrieving revision 1.19 diff -u -r1.19 ipx_usrreq.c --- ipx_usrreq.c 1998/02/09 06:10:25 1.19 +++ ipx_usrreq.c 1998/08/11 18:46:42 @@ -310,30 +310,23 @@ } int -ipx_ctloutput(req, so, level, name, value, p) - int req, level; +ipx_ctloutput(so, sopt) struct socket *so; - int name; - struct mbuf **value; - struct proc *p; + struct sockopt *sopt; { register struct mbuf *m; struct ipxpcb *ipxp = sotoipxpcb(so); - int mask, error = 0; + int mask, error, optval; + short soptval; + struct ipx ioptval; + error = 0; if (ipxp == NULL) return (EINVAL); - switch (req) { - - case PRCO_GETOPT: - if (value == NULL) - return (EINVAL); - m = m_get(M_DONTWAIT, MT_DATA); - if (m == NULL) - return (ENOBUFS); - switch (name) { - + switch (sopt->sopt_dir) { + case SOPT_GET: + switch (sopt->sopt_name) { case SO_ALL_PACKETS: mask = IPXP_ALL_PACKETS; goto get_flags; @@ -345,38 +338,33 @@ case SO_HEADERS_ON_OUTPUT: mask = IPXP_RAWOUT; get_flags: - m->m_len = sizeof(short); - *mtod(m, short *) = ipxp->ipxp_flags & mask; + soptval = ipxp->ipxp_flags & mask; + error = sooptcopyout(sopt, &soptval, sizeof soptval); break; case SO_DEFAULT_HEADERS: - m->m_len = sizeof(struct ipx); - { - register struct ipx *ipx = mtod(m, struct ipx *); - ipx->ipx_len = 0; - ipx->ipx_sum = 0; - ipx->ipx_tc = 0; - ipx->ipx_pt = ipxp->ipxp_dpt; - ipx->ipx_dna = ipxp->ipxp_faddr; - ipx->ipx_sna = ipxp->ipxp_laddr; - } + ioptval.ipx_len = 0; + ioptval.ipx_sum = 0; + ioptval.ipx_tc = 0; + ioptval.ipx_pt = ipxp->ipxp_dpt; + ioptval.ipx_dna = ipxp->ipxp_faddr; + ioptval.ipx_sna = ipxp->ipxp_laddr; + error = sooptcopyout(sopt, &soptval, sizeof soptval); break; case SO_SEQNO: - m->m_len = sizeof(long); - *mtod(m, long *) = ipx_pexseq++; + error = sooptcopyout(sopt, &ipx_pexseq, + sizeof ipx_pexseq); + ipx_pexseq++; break; default: error = EINVAL; } - *value = m; break; - case PRCO_SETOPT: - switch (name) { - int *ok; - + case SOPT_SET: + switch (sopt->sopt_name) { case SO_ALL_PACKETS: mask = IPXP_ALL_PACKETS; goto set_head; @@ -388,39 +376,38 @@ case SO_HEADERS_ON_OUTPUT: mask = IPXP_RAWOUT; set_head: - if (value && *value) { - ok = mtod(*value, int *); - if (*ok) - ipxp->ipxp_flags |= mask; - else - ipxp->ipxp_flags &= ~mask; - } else error = EINVAL; + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; + if (optval) + ipxp->ipxp_flags |= mask; + else + ipxp->ipxp_flags &= ~mask; break; case SO_DEFAULT_HEADERS: - { - register struct ipx *ipx - = mtod(*value, struct ipx *); - ipxp->ipxp_dpt = ipx->ipx_pt; - } + error = sooptcopyin(sopt, &ioptval, sizeof ioptval, + sizeof ioptval); + if (error) + break; + ipxp->ipxp_dpt = ioptval.ipx_pt; break; #ifdef IPXIP case SO_IPXIP_ROUTE: - error = ipxip_route(so, *value, p); + error = ipxip_route(so, sopt); break; #endif /* IPXIP */ #ifdef IPTUNNEL #if 0 case SO_IPXTUNNEL_ROUTE: - error = ipxtun_route(so, *value, p); + error = ipxtun_route(so, sopt); break; #endif #endif default: error = EINVAL; } - if (value && *value) - m_freem(*value); break; } return (error); Index: netipx/ipx_var.h =================================================================== RCS file: /home/cvs/src/sys/netipx/ipx_var.h,v retrieving revision 1.10 diff -u -r1.10 ipx_var.h --- ipx_var.h 1998/06/07 17:12:20 1.10 +++ ipx_var.h 1998/08/11 18:46:42 @@ -79,14 +79,14 @@ struct route; struct sockaddr; struct socket; +struct sockopt; void ipx_abort __P((struct ipxpcb *ipxp)); u_short ipx_cksum __P((struct mbuf *m, int len)); int ipx_control __P((struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp, struct proc *p)); void ipx_ctlinput __P((int cmd, struct sockaddr *arg_as_sa, void *dummy)); -int ipx_ctloutput __P((int req, struct socket *so, int level, int name, - struct mbuf **value, struct proc *p)); +int ipx_ctloutput __P((struct socket *so, struct sockopt *sopt)); void ipx_drop __P((struct ipxpcb *ipxp, int errno)); void ipx_init __P((void)); void ipx_input __P((struct mbuf *m, struct ipxpcb *ipxp)); Index: netipx/spx.h =================================================================== RCS file: /home/cvs/src/sys/netipx/spx.h,v retrieving revision 1.13 diff -u -r1.13 spx.h --- spx.h 1997/06/26 19:36:00 1.13 +++ spx.h 1998/08/11 18:46:42 @@ -173,8 +173,7 @@ extern struct pr_usrreqs spx_usrreq_sps; void spx_ctlinput __P((int cmd, struct sockaddr *arg_as_sa, void *dummy)); -int spx_ctloutput __P((int req, struct socket *so, int level, int name, - struct mbuf **value, struct proc *p)); +int spx_ctloutput __P((struct socket *so, struct sockopt *sopt)); void spx_fasttimo __P((void)); void spx_init __P((void)); void spx_input __P((struct mbuf *m, struct ipxpcb *ipxp)); Index: netipx/spx_usrreq.c =================================================================== RCS file: /home/cvs/src/sys/netipx/spx_usrreq.c,v retrieving revision 1.19 diff -u -r1.19 spx_usrreq.c --- spx_usrreq.c 1998/05/01 18:30:02 1.19 +++ spx_usrreq.c 1998/08/11 18:46:42 @@ -1154,39 +1154,33 @@ } int -spx_ctloutput(req, so, level, name, value, p) - int req; +spx_ctloutput(so, sopt) struct socket *so; - int level, name; - struct mbuf **value; - struct proc *p; + struct sockopt *sopt; { register struct mbuf *m; struct ipxpcb *ipxp = sotoipxpcb(so); register struct spxpcb *cb; - int mask, error = 0; + int mask, error; + short soptval; + u_short usoptval; + int optval; - if (level != IPXPROTO_SPX) { + error = 0; + + if (sopt->sopt_level != IPXPROTO_SPX) { /* This will have to be changed when we do more general stacking of protocols */ - return (ipx_ctloutput(req, so, level, name, value, p)); + return (ipx_ctloutput(so, sopt)); } - if (ipxp == NULL) { - error = EINVAL; - goto release; - } else + if (ipxp == NULL) + return (EINVAL); + else cb = ipxtospxpcb(ipxp); - switch (req) { - - case PRCO_GETOPT: - if (value == NULL) - return (EINVAL); - m = m_get(M_DONTWAIT, MT_DATA); - if (m == NULL) - return (ENOBUFS); - switch (name) { - + switch (sopt->sopt_dir) { + case SOPT_GET: + switch (sopt->sopt_name) { case SO_HEADERS_ON_INPUT: mask = SF_HI; goto get_flags; @@ -1194,39 +1188,34 @@ case SO_HEADERS_ON_OUTPUT: mask = SF_HO; get_flags: - m->m_len = sizeof(short); - *mtod(m, short *) = cb->s_flags & mask; + soptval = cb->s_flags & mask; + error = sooptcopyout(sopt, &soptval, sizeof soptval); break; case SO_MTU: - m->m_len = sizeof(u_short); - *mtod(m, short *) = cb->s_mtu; + usoptval = cb->s_mtu; + error = sooptcopyout(sopt, &usoptval, sizeof usoptval); break; case SO_LAST_HEADER: - m->m_len = sizeof(struct spxhdr); - *mtod(m, struct spxhdr *) = cb->s_rhdr; + error = sooptcopyout(sopt, &cb->s_rhdr, + sizeof cb->s_rhdr); break; case SO_DEFAULT_HEADERS: - m->m_len = sizeof(struct spx); - *mtod(m, struct spxhdr *) = cb->s_shdr; + error = sooptcopyout(sopt, &cb->s_shdr, + sizeof cb->s_shdr); break; default: - error = EINVAL; + error = ENOPROTOOPT; } - *value = m; break; - case PRCO_SETOPT: - if (value == 0 || *value == 0) { - error = EINVAL; - break; - } - switch (name) { - int *ok; - + case SOPT_SET: + switch (sopt->sopt_name) { + /* XXX why are these shorts on get and ints on set? + that doesn't make any sense... */ case SO_HEADERS_ON_INPUT: mask = SF_HI; goto set_head; @@ -1234,9 +1223,13 @@ case SO_HEADERS_ON_OUTPUT: mask = SF_HO; set_head: + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; + if (cb->s_flags & SF_PI) { - ok = mtod(*value, int *); - if (*ok) + if (optval) cb->s_flags |= mask; else cb->s_flags &= ~mask; @@ -1244,13 +1237,20 @@ break; case SO_MTU: - cb->s_mtu = *(mtod(*value, u_short *)); + error = sooptcopyin(sopt, &usoptval, sizeof usoptval, + sizeof usoptval); + if (error) + break; + cb->s_mtu = usoptval; break; #ifdef SF_NEWCALL case SO_NEWCALL: - ok = mtod(*value, int *); - if (*ok) { + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + break; + if (optval) { cb->s_flags2 |= SF_NEWCALL; spx_newchecks[5]++; } else { @@ -1262,21 +1262,23 @@ case SO_DEFAULT_HEADERS: { - register struct spxhdr *sp - = mtod(*value, struct spxhdr *); - cb->s_dt = sp->spx_dt; - cb->s_cc = sp->spx_cc & SPX_EM; + struct spxhdr sp; + + error = sooptcopyin(sopt, &sp, sizeof sp, + sizeof sp); + if (error) + break; + cb->s_dt = sp.spx_dt; + cb->s_cc = sp.spx_cc & SPX_EM; } break; default: - error = EINVAL; + error = ENOPROTOOPT; } - m_freem(*value); break; } - release: - return (error); + return (error); } static int Index: nfs/bootp_subr.c =================================================================== RCS file: /home/cvs/src/sys/nfs/bootp_subr.c,v retrieving revision 1.13 diff -u -r1.13 bootp_subr.c --- bootp_subr.c 1998/03/30 09:53:38 1.13 +++ bootp_subr.c 1998/08/11 18:46:43 @@ -264,8 +264,10 @@ struct sockaddr_in *sin, sa; struct mbuf *m; struct uio auio; + struct sockopt sopt; struct iovec aio; - int error, rcvflg, timo, secs, len; + struct timeval tv; + int error, on, len, rcvflg, secs, timo; u_int tport; /* @@ -274,36 +276,26 @@ if ((error = socreate(AF_INET, &so, SOCK_DGRAM, 0,procp))) goto out; - m = m_get(M_WAIT, MT_SOOPTS); - if (m == NULL) { - error = ENOBUFS; + tv.tv_sec = 1; + tv.tv_usec = 0; + bzero(&sopt, sizeof sopt); + sopt.sopt_level = SOL_SOCKET; + sopt.sopt_name = SO_RCVTIMEO; + sopt.sopt_val = &tv; + sopt.sopt_valsize = sizeof tv; + + if (error = sosetopt(so, &sopt)) goto out; - } else { - struct timeval *tv; - tv = mtod(m, struct timeval *); - m->m_len = sizeof(*tv); - tv->tv_sec = 1; - tv->tv_usec = 0; - if ((error = sosetopt(so, SOL_SOCKET, SO_RCVTIMEO, m, procp))) - goto out; - } /* * Enable broadcast. */ - { - int *on; - m = m_get(M_WAIT, MT_SOOPTS); - if (m == NULL) { - error = ENOBUFS; - goto out; - } - on = mtod(m, int *); - m->m_len = sizeof(*on); - *on = 1; - if ((error = sosetopt(so, SOL_SOCKET, SO_BROADCAST, m, procp))) - goto out; - } + on = 1; + sopt.sopt_val = &on; + sopt.sopt_valsize = sizeof on; + sopt.sopt_name = SO_BROADCAST; + if (error = sosetopt(so, &sopt)) + goto out; /* * Bind the local endpoint to a bootp client port. Index: nfs/krpc_subr.c =================================================================== RCS file: /home/cvs/src/sys/nfs/krpc_subr.c,v retrieving revision 1.9 diff -u -r1.9 krpc_subr.c --- krpc_subr.c 1998/03/28 10:33:15 1.9 +++ krpc_subr.c 1998/08/11 18:46:43 @@ -198,6 +198,8 @@ struct mbuf *m, *nam, *mhead; struct rpc_call *call; struct rpc_reply *reply; + struct sockopt sopt; + struct timeval tv; struct uio auio; int error, rcvflg, timo, secs, len; static u_int32_t xid = ~0xFF; @@ -220,34 +222,26 @@ if ((error = socreate(AF_INET, &so, SOCK_DGRAM, 0, procp))) goto out; - m = m_get(M_WAIT, MT_SOOPTS); - if (m == NULL) { - error = ENOBUFS; + tv.tv_sec = 1; + tv.tv_usec = 0; + bzero(&sopt, sizeof sopt); + sopt.sopt_level = SOL_SOCKET; + sopt.sopt_name = SO_RCVTIMEO; + sopt.sopt_val = &tv; + sopt.sopt_valsize = sizeof tv; + + if (error = sosetopt(so, &sopt)) goto out; - } else { - struct timeval *tv; - tv = mtod(m, struct timeval *); - m->m_len = sizeof(*tv); - tv->tv_sec = 1; - tv->tv_usec = 0; - if ((error = sosetopt(so, SOL_SOCKET, SO_RCVTIMEO, m, procp))) - goto out; - } /* * Enable broadcast if necessary. */ if (from_p) { - int32_t *on; - m = m_get(M_WAIT, MT_SOOPTS); - if (m == NULL) { - error = ENOBUFS; - goto out; - } - on = mtod(m, int32_t *); - m->m_len = sizeof(*on); - *on = 1; - if ((error = sosetopt(so, SOL_SOCKET, SO_BROADCAST, m, procp))) + int on = 1; + sopt.sopt_name = SO_BROADCAST; + sopt.sopt_val = &on; + sopt.sopt_valsize = sizeof on; + if (error = sosetopt(so, &sopt)) goto out; } Index: nfs/nfs.h =================================================================== RCS file: /home/cvs/src/sys/nfs/nfs.h,v retrieving revision 1.42 diff -u -r1.42 nfs.h --- nfs.h 1998/06/30 11:19:22 1.42 +++ nfs.h 1998/08/11 18:46:43 @@ -722,7 +722,7 @@ struct proc *procp, struct mbuf **mrq)); int nfsrv_write __P((struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct proc *procp, struct mbuf **mrq)); -void nfsrv_rcv __P((struct socket *so, caddr_t arg, int waitflag)); +void nfsrv_rcv __P((struct socket *so, void *arg, int waitflag)); void nfsrv_slpderef __P((struct nfssvc_sock *slp)); #endif /* KERNEL */ Index: nfs/nfs_socket.c =================================================================== RCS file: /home/cvs/src/sys/nfs/nfs_socket.c,v retrieving revision 1.43 diff -u -r1.43 nfs_socket.c --- nfs_socket.c 1998/08/01 09:04:02 1.43 +++ nfs_socket.c 1998/08/11 18:46:43 @@ -282,16 +282,28 @@ if (nmp->nm_sotype != SOCK_STREAM) panic("nfscon sotype"); if (so->so_proto->pr_flags & PR_CONNREQUIRED) { - MGET(m, M_WAIT, MT_SOOPTS); - *mtod(m, int32_t *) = 1; - m->m_len = sizeof(int32_t); - sosetopt(so, SOL_SOCKET, SO_KEEPALIVE, m, p); + struct sockopt sopt; + int val; + + bzero(&sopt, sizeof sopt); + sopt.sopt_level = SOL_SOCKET; + sopt.sopt_name = SO_KEEPALIVE; + sopt.sopt_val = &val; + sopt.sopt_valsize = sizeof val; + val = 1; + sosetopt(so, &sopt); } if (so->so_proto->pr_protocol == IPPROTO_TCP) { - MGET(m, M_WAIT, MT_SOOPTS); - *mtod(m, int32_t *) = 1; - m->m_len = sizeof(int32_t); - sosetopt(so, IPPROTO_TCP, TCP_NODELAY, m, p); + struct sockopt sopt; + int val; + + bzero(&sopt, sizeof sopt); + sopt.sopt_level = IPPROTO_TCP; + sopt.sopt_name = TCP_NODELAY; + sopt.sopt_val = &val; + sopt.sopt_valsize = sizeof val; + val = 1; + sosetopt(so, &sopt); } sndreserve = (nmp->nm_wsize + NFS_MAXPKTHDR + sizeof (u_int32_t)) * 2; @@ -1952,7 +1964,7 @@ void nfsrv_rcv(so, arg, waitflag) struct socket *so; - caddr_t arg; + void *arg; int waitflag; { register struct nfssvc_sock *slp = (struct nfssvc_sock *)arg; Index: nfs/nfs_syscalls.c =================================================================== RCS file: /home/cvs/src/sys/nfs/nfs_syscalls.c,v retrieving revision 1.41 diff -u -r1.41 nfs_syscalls.c --- nfs_syscalls.c 1998/05/31 20:08:55 1.41 +++ nfs_syscalls.c 1998/08/11 18:46:44 @@ -400,17 +400,29 @@ * repeatedly for the same socket, but that isn't harmful. */ if (so->so_type == SOCK_STREAM) { - MGET(m, M_WAIT, MT_SOOPTS); - *mtod(m, int32_t *) = 1; - m->m_len = sizeof(int32_t); - sosetopt(so, SOL_SOCKET, SO_KEEPALIVE, m, p); + struct sockopt sopt; + int val; + + bzero(&sopt, sizeof sopt); + sopt.sopt_level = SOL_SOCKET; + sopt.sopt_name = SO_KEEPALIVE; + sopt.sopt_val = &val; + sopt.sopt_valsize = sizeof val; + val = 1; + sosetopt(so, &sopt); } if (so->so_proto->pr_domain->dom_family == AF_INET && so->so_proto->pr_protocol == IPPROTO_TCP) { - MGET(m, M_WAIT, MT_SOOPTS); - *mtod(m, int32_t *) = 1; - m->m_len = sizeof(int32_t); - sosetopt(so, IPPROTO_TCP, TCP_NODELAY, m, p); + struct sockopt sopt; + int val; + + bzero(&sopt, sizeof sopt); + sopt.sopt_level = IPPROTO_TCP; + sopt.sopt_name = TCP_NODELAY; + sopt.sopt_val = &val; + sopt.sopt_valsize = sizeof val; + val = 1; + sosetopt(so, &sopt); } so->so_rcv.sb_flags &= ~SB_NOINTR; so->so_rcv.sb_timeo = 0; Index: sys/mbuf.h =================================================================== RCS file: /home/cvs/src/sys/sys/mbuf.h,v retrieving revision 1.27 diff -u -r1.27 mbuf.h --- mbuf.h 1998/07/15 04:17:53 1.27 +++ mbuf.h 1998/08/11 18:46:48 @@ -138,7 +138,7 @@ /*efine MT_HTABLE 6*/ /* IMP host tables */ /*efine MT_ATABLE 7*/ /* address resolution tables */ #define MT_SONAME 8 /* socket name */ -#define MT_SOOPTS 10 /* socket options */ +/*efine MT_SOOPTS 10*/ /* socket options */ #define MT_FTABLE 11 /* fragment reassembly header */ /*efine MT_RIGHTS 12*/ /* access rights */ /*efine MT_IFADDR 13*/ /* interface address */ @@ -168,10 +168,10 @@ * drivers. */ #define MBUFLOCK(code) \ - { int ms = splimp(); \ + do { int ms = splimp(); \ { code } \ splx(ms); \ - } + } while(0) /* * mbuf allocation/deallocation macros: @@ -348,10 +348,10 @@ } /* change mbuf to new type */ -#define MCHTYPE(m, t) { \ - MBUFLOCK(mbstat.m_mtypes[(m)->m_type]--; mbstat.m_mtypes[t]++;) \ +#define MCHTYPE(m, t) do { \ + MBUFLOCK(mbstat.m_mtypes[(m)->m_type]--; mbstat.m_mtypes[t]++;); \ (m)->m_type = t;\ -} +} while(0) /* length to m_copy to copy all */ #define M_COPYALL 1000000000 Index: sys/protosw.h =================================================================== RCS file: /home/cvs/src/sys/sys/protosw.h,v retrieving revision 1.24 diff -u -r1.24 protosw.h --- protosw.h 1998/06/07 17:13:03 1.24 +++ protosw.h 1998/08/11 18:46:48 @@ -42,6 +42,7 @@ struct proc; struct sockaddr; struct socket; +struct sockopt; /*#ifdef KERNEL*/ /* @@ -58,13 +59,13 @@ * * Protocols pass data between themselves as chains of mbufs using * the pr_input and pr_output hooks. Pr_input passes data up (towards - * UNIX) and pr_output passes it down (towards the imps); control + * the users) and pr_output passes it down (towards the interfaces); control * information passes up and down on pr_ctlinput and pr_ctloutput. * The protocol is responsible for the space occupied by any the * arguments to these entries and must dispose it. * - * The userreq routine interfaces protocols to the system and is - * described below. + * In retrospect, it would be a lot nicer to use an interface + * similar to the vnode VOP interface. */ struct protosw { short pr_type; /* socket type used for */ @@ -78,8 +79,7 @@ /* output to protocol (from above) */ void (*pr_ctlinput)__P((int, struct sockaddr *, void *)); /* control input (from below) */ - int (*pr_ctloutput)__P((int, struct socket *, int, int, - struct mbuf **, struct proc *)); + int (*pr_ctloutput)__P((struct socket *, struct sockopt *)); /* control output (from above) */ /* user-protocol hook */ void *pr_ousrreq; Index: sys/socketvar.h =================================================================== RCS file: /home/cvs/src/sys/sys/socketvar.h,v retrieving revision 1.28 diff -u -r1.28 socketvar.h --- socketvar.h 1998/06/07 17:13:03 1.28 +++ socketvar.h 1998/08/11 18:46:48 @@ -102,9 +102,10 @@ #define SB_UPCALL 0x20 /* someone wants an upcall */ #define SB_NOINTR 0x40 /* operations not interruptible */ - void (*so_upcall) __P((struct socket *so, caddr_t arg, int waitf)); - caddr_t so_upcallarg; /* Arg for above */ + void (*so_upcall) __P((struct socket *, void *, int)); + void *so_upcallarg; uid_t so_uid; /* who opened the socket */ + /* NB: generation count must not be first; easiest to make it last. */ so_gen_t so_gencnt; /* generation count */ }; @@ -119,7 +120,6 @@ #define SS_CANTRCVMORE 0x0020 /* can't receive more data from peer */ #define SS_RCVATMARK 0x0040 /* at mark on input */ -/*efine SS_PRIV 0x0080 privileged for broadcast, raw... */ #define SS_NBIO 0x0100 /* non-blocking ops */ #define SS_ASYNC 0x0200 /* async i/o notify */ #define SS_ISCONFIRMING 0x0400 /* deciding to accept connection req */ @@ -242,6 +242,20 @@ #ifdef KERNEL +/* + * Argument structure for sosetopt et seq. This is in the KERNEL + * section because it will never be visible to user code. + */ +enum sopt_dir { SOPT_GET, SOPT_SET }; +struct sockopt { + enum sopt_dir sopt_dir; /* is this a get or a set? */ + int sopt_level; /* second arg of [gs]etsockopt */ + int sopt_name; /* third arg of [gs]etsockopt */ + void *sopt_val; /* fourth arg of [gs]etsockopt */ + size_t sopt_valsize; /* (almost) fifth arg of [gs]etsockopt */ + struct proc *sopt_p; /* calling process or null if kernel */ +}; + #ifdef MALLOC_DECLARE MALLOC_DECLARE(M_PCB); MALLOC_DECLARE(M_SONAME); @@ -309,8 +323,7 @@ void sodealloc __P((struct socket *so)); int sodisconnect __P((struct socket *so)); void sofree __P((struct socket *so)); -int sogetopt __P((struct socket *so, int level, int optname, - struct mbuf **mp, struct proc *p)); +int sogetopt __P((struct socket *so, struct sockopt *sopt)); void sohasoutofband __P((struct socket *so)); void soisconnected __P((struct socket *so)); void soisconnecting __P((struct socket *so)); @@ -321,6 +334,9 @@ sodropablereq __P((struct socket *head)); struct socket * sonewconn __P((struct socket *head, int connstatus)); +int sooptcopyin __P((struct sockopt *sopt, void *buf, size_t len, + size_t minlen)); +int sooptcopyout __P((struct sockopt *sopt, void *buf, size_t len)); int sopoll __P((struct socket *so, int events, struct ucred *cred, struct proc *p)); int soreceive __P((struct socket *so, struct sockaddr **paddr, @@ -331,8 +347,7 @@ int sosend __P((struct socket *so, struct sockaddr *addr, struct uio *uio, struct mbuf *top, struct mbuf *control, int flags, struct proc *p)); -int sosetopt __P((struct socket *so, int level, int optname, - struct mbuf *m0, struct proc *p)); +int sosetopt __P((struct socket *so, struct sockopt *sopt)); int soshutdown __P((struct socket *so, int how)); void sotoxsocket __P((struct socket *so, struct xsocket *xso)); void sowakeup __P((struct socket *so, struct sockbuf *sb)); To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Tue Aug 11 13:39:48 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id NAA00298 for freebsd-net-outgoing; Tue, 11 Aug 1998 13:39:48 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from gjp.erols.com (alex-va-n008c079.moon.jic.com [206.156.18.89]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id NAA00287 for ; Tue, 11 Aug 1998 13:39:39 -0700 (PDT) (envelope-from gjp@gjp.erols.com) Received: from gjp.erols.com (gjp@localhost.erols.com [127.0.0.1]) by gjp.erols.com (8.8.8/8.8.7) with ESMTP id QAA10103; Tue, 11 Aug 1998 16:38:13 -0400 (EDT) (envelope-from gjp@gjp.erols.com) X-Mailer: exmh version 2.0.1 12/23/97 To: Andre Oppermann cc: GVB , freebsd-net@FreeBSD.ORG From: "Gary Palmer" Subject: Re: Mail server... In-reply-to: Your message of "Tue, 11 Aug 1998 11:20:44 +0200." <35D00CEC.235D6171@pipeline.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Tue, 11 Aug 1998 16:38:12 -0400 Message-ID: <10099.902867892@gjp.erols.com> Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Andre Oppermann wrote in message ID <35D00CEC.235D6171@pipeline.ch>: > > You can either do this simply (a POP3 proxy isn't that difficult), or > Shure, just write your own communication protocol. I thought the > questioner is not so high skilled to write his own comm protocol. If you note in the above quote, I said ``POP3 proxy''. I haven't ever written my own backend storage/retrieval protocol, although I have a few ideas rumbling around in my head for when I get enough time to sit down and write a large piece of software. The most difficult part of the software wouldn't be the backend protocol, but rather conforming to the RFC's and all the broken client communication software. Doing message storage and retrieval over a LAN is almost easy by comparison :) I have no idea of the skill-level of the person who posted the original question, which is why said that my solutions needed varying degrees of skill depending on what you wanted to do. > I depends on how far you have to scale up and what you have to scale up, > number of users or size of storage? Number of users is always the goal. Their storage can be quota'd easily to make storage scalability a secondary requirement of having more users. Of course, depending on what you want to support, you may not need more storage, but more spindles. That, however, is a totally different discussion. The way we handled storage at work was to use large *hardware* based RAID-5 arrays. The Symbios controllers are really neat, and in our benchmarks about the fastest SCSI RAID units available for unix machines right now. > BTW: Can you give me a little bit more information on your mail server > setup and the protocol you wrote? We just (as bjc already said) proxied the users POP3 sessions so that the multiple message stores were transparent to the user. The `aliases' functionality which is in all production MTA's (sendmail, exim, qmail, vmailer, etc) handles the SMTP `proxying' rather nicely, although not as efficiently as I'd like. There are a lot of tricks you can pull to make the MTA proxying more efficient. We didn't have the human-time to re-write the MTA's so we threw more horsepower at the backend storage machines. Hardware is cheap and easier to find than skilled programmers :) Gary -- Gary Palmer FreeBSD Core Team Member FreeBSD: Turning PC's into workstations. See http://www.FreeBSD.ORG/ for info To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Wed Aug 12 08:56:17 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id IAA16275 for freebsd-net-outgoing; Wed, 12 Aug 1998 08:56:17 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from amalthea.salford.ac.uk (amalthea.salford.ac.uk [146.87.255.61]) by hub.freebsd.org (8.8.8/8.8.8) with SMTP id IAA16148 for ; Wed, 12 Aug 1998 08:56:03 -0700 (PDT) (envelope-from freebsd-net-list@salford.ac.uk) From: freebsd-net-list@salford.ac.uk Received: (qmail 3772 invoked by alias); 12 Aug 1998 15:48:57 -0000 Received: (qmail 3766 invoked from network); 12 Aug 1998 15:48:57 -0000 Received: from ananke.salford.ac.uk (146.87.255.67) by amalthea.salford.ac.uk with SMTP; 12 Aug 1998 15:48:57 -0000 Received: (qmail 29830 invoked by alias); 12 Aug 1998 15:48:54 -0000 Delivered-To: catchall-freebsd-net@freebsd.org Received: (qmail 29822 invoked by uid 6); 12 Aug 1998 15:48:53 -0000 Message-ID: <19980812154853.29821.qmail@ananke.salford.ac.uk> Reply-To: mark@nospam.salford.ac.uk (Mark Powell) Subject: Re: 2.2.6 net performance and panic with 1000's of sockets open To: freebsd-net@FreeBSD.ORG Date: 12 Aug 1998 16:48:46 +0100 X-Gated-To-News-By: NewsMaster Xref: ananke.salford.ac.uk salford.mailing-lists.freebsd.net:92 comp.unix.bsd.freebsd.misc:71360 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org In article <6pigce$a6k$1@flea.best.net>, Matt Dillon wrote: > There are a lot of factors that can slow a transfer down. If you are > transfering from a disk file, for example, you will be limited to what > the disk can do. If you are doing encryption (i.e. scp or ssh) you will > be limited to 2-4 MBytes/sec depending on the cpu. If the TCP window > is too small the datarate will be limited. If the ethernet has CRC > errors on it the datarate will be limited (due to TCP backoff). If the > ethernet is half duplex, the packet rate will limit the datarate due > to transmit collisions. Yeah, I realise this. However, as I said, the workstation and server are both plugged into the same 100TX switch. The workstation is running 2.2.7-STABLE and the server runs either 2.2.7-STABLE or Netware 4.11, depending on which disk it boots from. Thus each server OS has exactly the same hardware and network traffic. >tick# route -n change news2 -recvpipe 65536 -sendpipe 65536 >tick:/home/dillon> dd if=/dev/zero bs=1m count=64 | rsh news2.best.com "cat >/dev/null" >64+0 records in >64+0 records out >67108864 bytes transferred in 7.341502 secs (9141027 bytes/sec) I try this and get no more the ~4.2MBs. The workstation and the server are both P166. This is with everything killed on the machines except the necessary processes. Maybe the CPU's aren't up to it, under 227? BTW 227 was cvsupped and compiled this morning. -- Mark Powell - System Administrator (UNIX) - Clifford Whitworth Building A.I.S., University of Salford, Salford, Manchester, UK. Tel: +44 161 295 5936 Fax: +44 161 295 5888 Email: M.S.Powell@ais.salfrd.ac.uk finger mark@ucsalf.ac.uk (for PGP key) NO SPAM please: Spell salford correctly to reply to me. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Wed Aug 12 09:01:34 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id JAA17398 for freebsd-net-outgoing; Wed, 12 Aug 1998 09:01:34 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from amalthea.salford.ac.uk (amalthea.salford.ac.uk [146.87.255.61]) by hub.freebsd.org (8.8.8/8.8.8) with SMTP id JAA17366 for ; Wed, 12 Aug 1998 09:01:22 -0700 (PDT) (envelope-from freebsd-net-list@salford.ac.uk) From: freebsd-net-list@salford.ac.uk Received: (qmail 5991 invoked by alias); 12 Aug 1998 16:00:55 -0000 Received: (qmail 5985 invoked from network); 12 Aug 1998 16:00:55 -0000 Received: from ananke.salford.ac.uk (146.87.255.67) by amalthea.salford.ac.uk with SMTP; 12 Aug 1998 16:00:55 -0000 Received: (qmail 227 invoked by alias); 12 Aug 1998 16:00:54 -0000 Delivered-To: catchall-freebsd-net@freebsd.org Received: (qmail 216 invoked by uid 6); 12 Aug 1998 16:00:52 -0000 Message-ID: <19980812160052.215.qmail@ananke.salford.ac.uk> Reply-To: mark@nospam.salford.ac.uk (Mark Powell) Subject: Re: 2.2.6 net performance and panic with 1000's of sockets open To: freebsd-net@FreeBSD.ORG Date: 12 Aug 1998 17:00:50 +0100 X-Gated-To-News-By: NewsMaster Xref: ananke.salford.ac.uk salford.mailing-lists.freebsd.net:93 comp.unix.bsd.freebsd.misc:71362 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org In article <6pl4lk$a51$3@ocean.cup.hp.com>, Rick Jones wrote: >Mark Powell (mark@nospam.salford.ac.uk) wrote: >: I thought I had the extensions on, but with netperf I can't get more >: than ~64Mbits/sec. > >: net.inet.tcp.rfc1323: 1 >: net.inet.tcp.rfc1644: 1 > >I think Steinar meant ttcp the benchmark, not T/TCP the TCP protocol >extensions. As for netperf only getting 64 Mbit/s, it would help if >you could do a cut and paste of your command lines so we can see the >parameters used in the neteprf test. Didn't realise there was much to netperf. Start on server: $ netserver -P 9999 On client: $ netperf -H -p 9999 If I use: $ route -n change -recvpipe 65536 -sendpipe 65536 On the client, I've seen 73Mbit/s. If I do a UDP_STREAM I get 95.8Mbit/s. >: Yeah, the performance of the web caching software. Looks like the >: squid stuff is pretty poorly optimised? > >Not sure if it will be at all germane, but you might look at: > > ftp://ftp.cup.hp.com/dist/networking/briefs/ Most of it not applicable, but I may try some squid/kernel profiling to see what it's doing. Cheers. -- Mark Powell - System Administrator (UNIX) - Clifford Whitworth Building A.I.S., University of Salford, Salford, Manchester, UK. Tel: +44 161 295 5936 Fax: +44 161 295 5888 Email: M.S.Powell@ais.salfrd.ac.uk finger mark@ucsalf.ac.uk (for PGP key) NO SPAM please: Spell salford correctly to reply to me. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Wed Aug 12 18:35:15 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id SAA17249 for freebsd-net-outgoing; Wed, 12 Aug 1998 18:35:15 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from milkyway.org (lta-r-1.usit.net [205.241.194.17] (may be forged)) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id SAA17242 for ; Wed, 12 Aug 1998 18:35:11 -0700 (PDT) (envelope-from toby@milkyway.org) Received: from milkyway.org (rigel.milkyway.org [205.241.194.19]) by milkyway.org (8.8.5/8.8.3) with ESMTP id UAA02650; Wed, 12 Aug 1998 20:36:44 -0400 (EDT) Message-ID: <35D2444F.6580D84C@milkyway.org> Date: Wed, 12 Aug 1998 21:41:35 -0400 From: Toby Swanson X-Mailer: Mozilla 4.04 [en] (Win95; I) MIME-Version: 1.0 To: "Dag-Erling Coidan Smørgrav" , freebsd-net@FreeBSD.ORG Subject: Re: Mail server... References: <199808051615.JAA16304@merchant.tns.net> Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On 06Aug98 Dag-Erling Coidan Smørgrav wrote: > GVB writes: > > Question, I have setup FreeBSD systems with sendmail and qpopper for use as > > Don't *whack* use *whack* qpopper *whack* *whack* > Are there any particular reasons to not use qpopper? To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Thu Aug 13 03:10:22 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id DAA03801 for freebsd-net-outgoing; Thu, 13 Aug 1998 03:10:22 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from mail.ftf.dk (mail.ftf.dk [129.142.64.2]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id DAA03794 for ; Thu, 13 Aug 1998 03:10:17 -0700 (PDT) (envelope-from regnauld@deepo.prosa.dk) Received: from mail.prosa.dk ([192.168.100.254]) by mail.ftf.dk (8.8.8/8.8.8/gw-ftf-1.0) with ESMTP id MAA21730; Thu, 13 Aug 1998 12:13:39 +0200 (CEST) (envelope-from regnauld@deepo.prosa.dk) Received: from deepo.prosa.dk (deepo.prosa.dk [192.168.100.10]) by mail.prosa.dk (8.8.8/8.8.5/prosa-1.1) with ESMTP id MAA18287; Thu, 13 Aug 1998 12:15:45 +0200 (CEST) Received: (from regnauld@localhost) by deepo.prosa.dk (8.8.8/8.8.5/prosa-1.1) id MAA03493; Thu, 13 Aug 1998 12:13:44 +0200 (CEST) Message-ID: <19980813121344.16224@deepo.prosa.dk> Date: Thu, 13 Aug 1998 12:13:44 +0200 From: Philippe Regnauld To: Toby Swanson Cc: =?iso-8859-1?Q?Dag-Erling_Coidan_Sm=F8rgrav?= , freebsd-net@FreeBSD.ORG Subject: Re: Mail server... References: <199808051615.JAA16304@merchant.tns.net> <35D2444F.6580D84C@milkyway.org> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Mailer: Mutt 0.88e In-Reply-To: <35D2444F.6580D84C@milkyway.org>; from Toby Swanson on Wed, Aug 12, 1998 at 09:41:35PM -0400 X-Operating-System: FreeBSD 2.2.6-RELEASE i386 Phone: +45 3336 4148 Address: Ahlefeldtsgade 16, 1359 Copenhagen K, Denmark Organization: PROSA Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Toby Swanson writes: > > On 06Aug98 Dag-Erling Coidan Smørgrav wrote: > > > Don't *whack* use *whack* qpopper *whack* *whack* > > Are there any particular reasons to not use qpopper? "How do you want to be cracked today ?" Qpopper had its moment of (non)glory last month, when a buffer overflow was discovered in versions 2.4x -- it was fixed in 2.5 and up. The overflow gave you instant root access from anywhere. Cucipop may be a bit better, but why *whack* do you even *whack* ASK *whack* *whack* ! :-) -- -[ Philippe Regnauld / sysadmin / regnauld@deepo.prosa.dk / +55.4N +11.3E ]- The Internet is busy. Please try again later. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Thu Aug 13 09:06:00 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id JAA18132 for freebsd-net-outgoing; Thu, 13 Aug 1998 09:06:00 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from ifi.uio.no (ifi.uio.no [129.240.64.2]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id JAA18126 for ; Thu, 13 Aug 1998 09:05:57 -0700 (PDT) (envelope-from dag-erli@ifi.uio.no) Received: from hel.ifi.uio.no (2602@hel.ifi.uio.no [129.240.64.91]) by ifi.uio.no (8.8.8/8.8.7/ifi0.2) with ESMTP id SAA19150; Thu, 13 Aug 1998 18:05:15 +0200 (MET DST) Received: (from dag-erli@localhost) by hel.ifi.uio.no ; Thu, 13 Aug 1998 18:05:14 +0200 (MET DST) Mime-Version: 1.0 To: Philippe Regnauld Cc: Toby Swanson , Dag-Erling Coidan Smørgrav , freebsd-net@FreeBSD.ORG Subject: Re: Mail server... References: <199808051615.JAA16304@merchant.tns.net> <35D2444F.6580D84C@milkyway.org> <19980813121344.16224@deepo.prosa.dk> Organization: University of Oslo, Department of Informatics X-url: http://www.stud.ifi.uio.no/~dag-erli/ X-other-addresses: 'finger dag-erli@ifi.uio.no' for a list X-disclaimer-1: The views expressed in this article are mine alone, and do X-disclaimer-2: not necessarily coincide with those of any organisation or X-disclaimer-3: company with which I am or have been affiliated. X-Stop-Spam: http://www.cauce.org/ From: dag-erli@ifi.uio.no (Dag-Erling Coidan =?iso-8859-1?Q?Sm=F8rgrav?= ) Date: 13 Aug 1998 18:05:14 +0200 In-Reply-To: Philippe Regnauld's message of "Thu, 13 Aug 1998 12:13:44 +0200" Message-ID: Lines: 15 X-Mailer: Gnus v5.5/Emacs 19.34 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by hub.freebsd.org id JAA18128 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Philippe Regnauld writes: > Toby Swanson writes: > > On 06Aug98 Dag-Erling Coidan Smørgrav wrote: > > > Don't *whack* use *whack* qpopper *whack* *whack* > > Are there any particular reasons to not use qpopper? > "How do you want to be cracked today ?" Precisely. And Qualcomm's reputation isn't the best. If you follow BUGTRAQ, you'll notice there have been several Eudora exploits posted lately (buffer overflows, automatic execution of attachments, stuff like that) DES -- Dag-Erling Smørgrav - dag-erli@ifi.uio.no To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Thu Aug 13 17:59:00 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id RAA21231 for freebsd-net-outgoing; Thu, 13 Aug 1998 17:59:00 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from milkyway.org (lta-r-1.usit.net [205.241.194.17] (may be forged)) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id RAA21209 for ; Thu, 13 Aug 1998 17:58:55 -0700 (PDT) (envelope-from toby@milkyway.org) Received: from milkyway.org (rigel.milkyway.org [205.241.194.19]) by milkyway.org (8.8.5/8.8.3) with ESMTP id UAA04857; Thu, 13 Aug 1998 20:00:28 -0400 (EDT) Message-ID: <35D38D4F.68022208@milkyway.org> Date: Thu, 13 Aug 1998 21:05:20 -0400 From: Toby Swanson X-Mailer: Mozilla 4.04 [en] (Win95; I) MIME-Version: 1.0 To: "Dag-Erling Coidan Smørgrav" CC: Philippe Regnauld , freebsd-net@FreeBSD.ORG Subject: Re: Mail server... References: <199808051615.JAA16304@merchant.tns.net> <35D2444F.6580D84C@milkyway.org> <19980813121344.16224@deepo.prosa.dk> Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org What alternatives do you recommend? How do you follow BUGTRAQ? On 13Aug98 Dag-Erling Coidan Smørgrav wrote: > Precisely. And Qualcomm's reputation isn't the best. If you follow > BUGTRAQ, you'll notice there have been several Eudora exploits posted > lately (buffer overflows, automatic execution of attachments, stuff > like that) > > DES > -- > Dag-Erling Smørgrav - dag-erli@ifi.uio.no To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Fri Aug 14 00:00:53 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id AAA06039 for freebsd-net-outgoing; Fri, 14 Aug 1998 00:00:53 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from ifi.uio.no (ifi.uio.no [129.240.64.2]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id AAA06023 for ; Fri, 14 Aug 1998 00:00:46 -0700 (PDT) (envelope-from dag-erli@ifi.uio.no) Received: from hrotti.ifi.uio.no (2602@hrotti.ifi.uio.no [129.240.64.15]) by ifi.uio.no (8.8.8/8.8.7/ifi0.2) with ESMTP id JAA00303; Fri, 14 Aug 1998 09:00:15 +0200 (MET DST) Received: (from dag-erli@localhost) by hrotti.ifi.uio.no ; Fri, 14 Aug 1998 09:00:14 +0200 (MET DST) Mime-Version: 1.0 To: Toby Swanson Cc: "=?iso-8859-1?Q?=22Dag?= -Erling Coidan =?iso-8859-1?Q?Sm=F8rgrav=22?= =?iso-8859-1?Q?=2C?= Philippe Regnauld" , freebsd-net@FreeBSD.ORG Subject: Re: Mail server... References: <199808051615.JAA16304@merchant.tns.net> <35D2444F.6580D84C@milkyway.org> <19980813121344.16224@deepo.prosa.dk> <35D38D4F.68022208@milkyway.org> Organization: University of Oslo, Department of Informatics X-url: http://www.stud.ifi.uio.no/~dag-erli/ X-other-addresses: 'finger dag-erli@ifi.uio.no' for a list X-disclaimer-1: The views expressed in this article are mine alone, and do X-disclaimer-2: not necessarily coincide with those of any organisation or X-disclaimer-3: company with which I am or have been affiliated. X-Stop-Spam: http://www.cauce.org/ From: dag-erli@ifi.uio.no (Dag-Erling Coidan =?iso-8859-1?Q?Sm=F8rgrav?= ) Date: 14 Aug 1998 09:00:13 +0200 In-Reply-To: Toby Swanson's message of "Thu, 13 Aug 1998 21:05:20 -0400" Message-ID: Lines: 11 X-Mailer: Gnus v5.5/Emacs 19.34 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by hub.freebsd.org id AAA06031 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Toby Swanson writes: > What alternatives do you recommend? How do you follow BUGTRAQ? I use imap-uw - which has been known to have bugs in the past, but is university software (which makes me all warm and fuzzy thinking about peer review) and written by people who actually know about Unix. Qualcomm is a Winblows shop. YMMV. DES -- Dag-Erling Smørgrav - dag-erli@ifi.uio.no To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Fri Aug 14 00:33:42 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id AAA12683 for freebsd-net-outgoing; Fri, 14 Aug 1998 00:33:42 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from ifi.uio.no (ifi.uio.no [129.240.64.2]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id AAA12669 for ; Fri, 14 Aug 1998 00:33:40 -0700 (PDT) (envelope-from dag-erli@ifi.uio.no) Received: from hrotti.ifi.uio.no (2602@hrotti.ifi.uio.no [129.240.64.15]) by ifi.uio.no (8.8.8/8.8.7/ifi0.2) with ESMTP id JAA03252; Fri, 14 Aug 1998 09:33:06 +0200 (MET DST) Received: (from dag-erli@localhost) by hrotti.ifi.uio.no ; Fri, 14 Aug 1998 09:33:05 +0200 (MET DST) Mime-Version: 1.0 To: Toby Swanson Cc: "=?iso-8859-1?Q?=22Dag?= -Erling Coidan =?iso-8859-1?Q?Sm=F8rgrav=22?= =?iso-8859-1?Q?=2C?= Philippe Regnauld" , freebsd-net@FreeBSD.ORG Subject: Re: Mail server... References: <199808051615.JAA16304@merchant.tns.net> <35D2444F.6580D84C@milkyway.org> <19980813121344.16224@deepo.prosa.dk> <35D38D4F.68022208@milkyway.org> Organization: University of Oslo, Department of Informatics X-url: http://www.stud.ifi.uio.no/~dag-erli/ X-other-addresses: 'finger dag-erli@ifi.uio.no' for a list X-disclaimer-1: The views expressed in this article are mine alone, and do X-disclaimer-2: not necessarily coincide with those of any organisation or X-disclaimer-3: company with which I am or have been affiliated. X-Stop-Spam: http://www.cauce.org/ From: dag-erli@ifi.uio.no (Dag-Erling Coidan =?iso-8859-1?Q?Sm=F8rgrav?= ) Date: 14 Aug 1998 09:33:04 +0200 In-Reply-To: Toby Swanson's message of "Thu, 13 Aug 1998 21:05:20 -0400" Message-ID: Lines: 12 X-Mailer: Gnus v5.5/Emacs 19.34 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by hub.freebsd.org id AAA12677 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Toby Swanson writes: > What alternatives do you recommend? How do you follow BUGTRAQ? Oops, forgot the second half. You follow BUGTRAQ by subscribing :) The request address is listserv@netspace.org. Aleph 1 (the moderator) used to run a web site () with tons of security information, but it's been down for some time now. You can browse the BUGTRAQ archives at DES -- Dag-Erling Smørgrav - dag-erli@ifi.uio.no To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Fri Aug 14 10:21:01 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id KAA01142 for freebsd-net-outgoing; Fri, 14 Aug 1998 10:21:01 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from socrates.i-pi.com (socrates.i-pi.com [198.49.217.5]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id KAA01127 for ; Fri, 14 Aug 1998 10:20:59 -0700 (PDT) (envelope-from ingham@i-pi.com) Received: (from ingham@localhost) by socrates.i-pi.com (8.8.8/8.8.7) id LAA12612; Fri, 14 Aug 1998 11:17:47 -0600 (MDT) (envelope-from ingham) Message-ID: <19980814111746.22004@i-pi.com> Date: Fri, 14 Aug 1998 11:17:46 -0600 From: Kenneth Ingham To: net@FreeBSD.ORG Subject: nfsd send error 55 Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.89i Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Looking up 55 in sys/errno.h, it says no buffer space available. I'm running 2.2.7-RELEASE from the CD on a 486dx66 with 56MB memory and a 3com 3c509 ethernet card. When this happens, there's nothing to do but hit the reset switch, as I can't even log in on the console. Any ideas why I'm running out of buffer space? Kenneth To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Fri Aug 14 12:35:49 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id MAA27023 for freebsd-net-outgoing; Fri, 14 Aug 1998 12:35:49 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from spinner.netplex.com.au (spinner.netplex.com.au [202.12.86.3]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id MAA26995 for ; Fri, 14 Aug 1998 12:35:42 -0700 (PDT) (envelope-from peter@netplex.com.au) Received: from spinner.netplex.com.au (localhost [127.0.0.1]) by spinner.netplex.com.au (8.8.8/8.8.8/Spinner) with ESMTP id DAA22339; Sat, 15 Aug 1998 03:32:50 +0800 (WST) (envelope-from peter@spinner.netplex.com.au) Message-Id: <199808141932.DAA22339@spinner.netplex.com.au> X-Mailer: exmh version 2.0.2 2/24/98 To: Philippe Regnauld cc: Toby Swanson , =?iso-8859-1?Q?Dag-Erling_Coidan_Sm=F8rgrav?= , freebsd-net@FreeBSD.ORG Subject: Re: Mail server... In-reply-to: Your message of "Thu, 13 Aug 1998 12:13:44 +0200." <19980813121344.16224@deepo.prosa.dk> Content-Transfer-Encoding: quoted-printable Date: Sat, 15 Aug 1998 03:32:45 +0800 From: Peter Wemm Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Philippe Regnauld wrote: > Toby Swanson writes: > > = > > On 06Aug98 Dag-Erling Coidan Sm=F8rgrav wrote: > > = > > > Don't *whack* use *whack* qpopper *whack* *whack* > > = > > Are there any particular reasons to not use qpopper? > = > "How do you want to be cracked today ?" > = > Qpopper had its moment of (non)glory last month, when a buffer > overflow was discovered in versions 2.4x -- it was fixed in 2.5 and up= =2E > = > The overflow gave you instant root access from anywhere. And there are still *many* problems remaining. It's a very shoddy progra= m = IMHO, and the "fixes" are merely bandaids while the real problems remain.= = It's string handling and termination really sucks. If *just one* spot wa= s = missed, the holes are still there to exploit all over again. > Cucipop may be a bit better, but why *whack* do you even *whack* > ASK *whack* *whack* ! :-) The cucipop code style scares the hell out of me, but it's bloody fast an= d dots all the i's and crosses all the t's etc - I'd be rather suprised if major holes were found. It has a few bugs that are a bitch to track down= (see previous gripe about code style), but nothing serious. It's mainly = a cosmetic glitch where it announces the per-message size a few bytes too large and fetchmail complains about that. It doesn't know about expired = passwords either. It's got some really devious features too.. :-) You can sabotage the UID= L command to strongly "encourage" your users to NOT keep mail on the server= forever, and do all sorts of things like auto-delete old (read) messages etc. (The UIDL sabotage means that if they select "leave on server", they'll get another "new" copy of each message each time they connect.) > -- = > -[ Philippe Regnauld / sysadmin / regnauld@deepo.prosa.dk / +55.4N +11= =2E3E ]- > = > The Internet is busy. Please try again later. > = > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-net" in the body of the message > = Cheers, -Peter To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Sat Aug 15 05:51:47 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id FAA25331 for freebsd-net-outgoing; Sat, 15 Aug 1998 05:51:47 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from colin.muc.de (colin.muc.de [193.174.4.1]) by hub.freebsd.org (8.8.8/8.8.8) with SMTP id FAA25320 for ; Sat, 15 Aug 1998 05:51:41 -0700 (PDT) (envelope-from lutz@muc.de) Received: from tavari.muc.de ([193.174.4.22]) by colin.muc.de with SMTP id <140578-3>; Sat, 15 Aug 1998 10:49:04 +0200 Received: (from daemon@localhost) by tavari.muc.de (8.8.8/8.8.7) id KAA19011; Sat, 15 Aug 1998 10:41:13 +0200 (CEST) Received: from ripley(192.168.42.202) by morranon via smap (V2.1) id xma019007; Sat, 15 Aug 98 10:41:02 +0200 From: "Lutz Albers" To: "=?iso-8859-1?Q?Dag-Erling_Coidan_Sm=F8rgrav_?=" , "Toby Swanson" Cc: Subject: RE: Mail server... Date: Sat, 15 Aug 1998 10:40:59 +0200 Message-ID: <000001bdc828$6d8fa760$ca2aa8c0@ripley.tavari.muc.de> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0 In-Reply-To: X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 Importance: Normal Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org > Toby Swanson writes: > > What alternatives do you recommend? How do you follow BUGTRAQ? > > I use imap-uw - which has been known to have bugs in the past, but is > university software (which makes me all warm and fuzzy thinking about > peer review) and written by people who actually know about Unix. > Qualcomm is a Winblows shop. YMMV. If you want university software and a REALLY good imap implementation, then you might try cyrus imap. It may not be trivial to install, but it's way faster then imap-uw. ciao lutz To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Sat Aug 15 12:28:49 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id MAA29290 for freebsd-net-outgoing; Sat, 15 Aug 1998 12:28:49 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from ifi.uio.no (ifi.uio.no [129.240.64.2]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id MAA29284 for ; Sat, 15 Aug 1998 12:28:45 -0700 (PDT) (envelope-from dag-erli@ifi.uio.no) Received: from hrotti.ifi.uio.no (2602@hrotti.ifi.uio.no [129.240.64.15]) by ifi.uio.no (8.8.8/8.8.7/ifi0.2) with ESMTP id VAA24752; Sat, 15 Aug 1998 21:28:12 +0200 (MET DST) Received: (from dag-erli@localhost) by hrotti.ifi.uio.no ; Sat, 15 Aug 1998 21:28:12 +0200 (MET DST) Mime-Version: 1.0 To: Kenneth Ingham Cc: net@FreeBSD.ORG Subject: Re: nfsd send error 55 References: <19980814111746.22004@i-pi.com> Organization: University of Oslo, Department of Informatics X-url: http://www.stud.ifi.uio.no/~dag-erli/ X-other-addresses: 'finger dag-erli@ifi.uio.no' for a list X-disclaimer-1: The views expressed in this article are mine alone, and do X-disclaimer-2: not necessarily coincide with those of any organisation or X-disclaimer-3: company with which I am or have been affiliated. X-Stop-Spam: http://www.cauce.org/ From: dag-erli@ifi.uio.no (Dag-Erling Coidan =?iso-8859-1?Q?Sm=F8rgrav?= ) Date: 15 Aug 1998 21:28:11 +0200 In-Reply-To: Kenneth Ingham's message of "Fri, 14 Aug 1998 11:17:46 -0600" Message-ID: Lines: 10 X-Mailer: Gnus v5.5/Emacs 19.34 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by hub.freebsd.org id MAA29285 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Kenneth Ingham writes: > I'm running 2.2.7-RELEASE from the CD on a 486dx66 with 56MB memory > and a 3com 3c509 ethernet card. Bug in the ep0 driver. As a band-aid, put in a cron job to do "ifconfig ep0 up" every five minutes. DES -- Dag-Erling Smørgrav - dag-erli@ifi.uio.no To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Sat Aug 15 14:41:07 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id OAA17024 for freebsd-net-outgoing; Sat, 15 Aug 1998 14:41:07 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from Homer.Web-Ex.com (homer.web-ex.com [209.54.66.254]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id OAA17016 for ; Sat, 15 Aug 1998 14:41:02 -0700 (PDT) (envelope-from jim@web-ex.com) Received: from localhost (jim@localhost) by Homer.Web-Ex.com (8.8.8/8.8.8) with SMTP id RAA04920 for ; Sat, 15 Aug 1998 17:38:40 -0500 (EST) (envelope-from jim@web-ex.com) X-Authentication-Warning: Homer.Web-Ex.com: jim owned process doing -bs Date: Sat, 15 Aug 1998 17:38:40 -0500 (EST) From: Jim Cassata To: net@FreeBSD.ORG Subject: Re: nfsd send error 55 In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from QUOTED-PRINTABLE to 8bit by hub.freebsd.org id OAA17018 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org We are seeing some strange things with 2.2.7. For instance, a top shows all processes using 0.00 cpu time and usage. Jim Cassata 516.421.6000 jim@web-ex.com Web Express 20 Broadhollow Road Suite 3011 Melville, NY 11747 On 15 Aug 1998, Dag-Erling Coidan [iso-8859-1] Smørgrav wrote: > Kenneth Ingham writes: > > I'm running 2.2.7-RELEASE from the CD on a 486dx66 with 56MB memory > > and a 3com 3c509 ethernet card. > > Bug in the ep0 driver. As a band-aid, put in a cron job to do > "ifconfig ep0 up" every five minutes. > > DES > -- > Dag-Erling Smørgrav - dag-erli@ifi.uio.no > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-net" in the body of the message > To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message From owner-freebsd-net Sat Aug 15 16:33:43 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id QAA02364 for freebsd-net-outgoing; Sat, 15 Aug 1998 16:33:43 -0700 (PDT) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from colin.muc.de (colin.muc.de [193.174.4.1]) by hub.freebsd.org (8.8.8/8.8.8) with SMTP id QAA02248 for ; Sat, 15 Aug 1998 16:32:07 -0700 (PDT) (envelope-from lutz@muc.de) Received: from tavari.muc.de ([193.174.4.22]) by colin.muc.de with SMTP id <140592-1>; Sun, 16 Aug 1998 01:19:53 +0200 Received: (from daemon@localhost) by tavari.muc.de (8.8.8/8.8.7) id AAA15636; Sun, 16 Aug 1998 00:17:23 +0200 (CEST) Received: from ripley(192.168.42.202) by morranon via smap (V2.1) id xma015634; Sun, 16 Aug 98 00:17:21 +0200 From: "Lutz Albers" To: "Dag-Erling Coidan Smørgrav " Cc: Subject: RE: Mail server... Date: Sun, 16 Aug 1998 00:17:16 +0200 Message-ID: <000001bdc89a$75c1dd00$ca2aa8c0@ripley.tavari.muc.de> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0 In-Reply-To: Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org > "Lutz Albers" writes: > > If you want university software and a REALLY good imap > implementation, then > > you might try cyrus imap. It may not be trivial to install, but it's way > > faster then imap-uw. > > The "not trivial to install" part is precisely the reason why I'm not > using Cyrus. The last time I installed a POP server I was just in a > bloody hurry to get a POP server, *any* POP server (excpet qpopper) > installed, after a (luckily false) breakin alarm on a friend's box > (guess what POP server he was running...) > > If I ever get serious about POP, though, I'll take long hard look at > Cyrus. Well, I needed a IMAP server and the imap-uw server really SUCKS. It's slow and the handling of large mailboxes (over 1000 messages) is bad (try using it with Netscape Messenger). I'm not using POP anymore and if you take the time to write some wrappers around cyrus's deliver program it's quite good. ciao lutz -- Lutz Albers, lutz@muc.de, pgp key available from Do not take life too seriously, you will never get out of it alive. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message