History log of /openbsd-current/sys/dev/pci/if_bnxreg.h
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.50 09-Jan-2022 jsg

spelling
feedback and ok tb@ jmc@ ok ratchov@


Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.49 05-Dec-2015 jmatthew

Make the bnx interrupt handler mpsafe, and perform rx and tx completion
outside the kernel lock.

Remove tx descriptor lists (essentially backing out if_bnx.c r1.77),
add an interrupt barrier in bnx_stop, check the rx ring state before receiving
packets, adjust the tx counter with atomic operations, and rework bnx_start
to check for ring space before dequeueing and drop the packet if bnx_encap
fails.

tested on BCM5708 by me and on BCM5709 by Hrvoje Popovski
ok dlg@


# 1.48 24-Nov-2015 mpi

You only need <net/if_dl.h> if you're using LLADDR() or a sockaddr_dl.


# 1.47 14-Nov-2015 mpi

Do not include <net/if_vlan_var.h> when it's not necessary.

Because of the VLAN hacks in mpw(4) this file still contains the definition
of "struct ifvlan" which depends on <sys/refcnt.h> which in turns pull
<sys/atomic.h>...


# 1.46 11-Sep-2015 stsp

Make room for media types of the future. Extend the ifmedia word to 64 bits.
This changes numbers of the SIOCSIFMEDIA and SIOCGIFMEDIA ioctls and
grows struct ifmediareq.

Old ifconfig and dhclient binaries can still assign addresses, however
the 'media' subcommand stops working. Recompiling ifconfig and dhclient
with new headers before a reboot should not be necessary unless in very
special circumstances where non-default media settings must be used to
get link and console access is not available.

There may be some MD fallout but that will be cleared up later.

ok deraadt miod
with help and suggestions from several sharks attending l2k15


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.45 26-Dec-2014 tedu

unifdef INET. missed a few headers in previous rounds


Revision tags: OPENBSD_5_6_BASE
# 1.44 22-Jul-2014 mpi

Fewer <netinet/in_systm.h>


# 1.43 08-Jul-2014 dlg

cut things that relied on mclgeti for rx ring accounting/restriction over
to using if_rxr.

cut the reporting systat did over to the rxr ioctl.

tested as much as i can on alpha, amd64, and sparc64.
mpi@ has run it on macppc.
ok mpi@


Revision tags: OPENBSD_5_5_BASE
# 1.42 30-Oct-2013 dlg

replace the workq bits to supply new tx pkt descriptors with a task.

tested locally on a dell poweredge 2950


# 1.41 07-Aug-2013 bluhm

Most network drivers include netinet/in_var.h, but apparently they
don't have to. Just remove these include lines.
Compiled on amd64 i386 sparc64; OK henning@ mikeb@


Revision tags: OPENBSD_5_3_BASE OPENBSD_5_4_BASE
# 1.40 08-Feb-2013 jasper

- remove ununsed PCI_ANY_ID macros

ok dlg@


# 1.39 10-Dec-2012 mikeb

Under some circumstances (currently only reproducible with IPsec)
bnx can be left w/o clusters on the receive ring and will stall.
To prevent that schedule a timeout if refill fails. Bug was
reported by jj@, fix tested by me, ok dlg


Revision tags: OPENBSD_5_2_BASE
# 1.38 05-Jul-2012 phessler

Add flow control to bnx(4)

Tested on 5706, 5708, 5709, 5716 chipsets.

From Brad

OK phessler@, sthen@, mikeb@,


Revision tags: OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE
# 1.37 20-Sep-2010 deraadt

Stop doing shutdown hooks in network drivers where possible. We already
take all interfaces down, via their xxstop routines. Claudio and I have
verified that none of the shutdown hooks do much extra beyond what xxstop
was already doing; it is largely a pile of junk.
ok claudio, some early comments by sthen; also read by matthew, jsg


# 1.36 07-Sep-2010 deraadt

remove the powerhook code. All architectures now use the ca_activate tree
traversal code to suspend/resume
ok oga kettenis blambert


Revision tags: OPENBSD_4_8_BASE
# 1.35 24-May-2010 sthen

Support fibre PHY on BCM5709S. From FreeBSD via Brad.
Tested by Brad on: BCM5706, BCM5708C
Tested by me on: BCM5716 (BCM5709 PHY)


Revision tags: OPENBSD_4_7_BASE
# 1.34 23-Nov-2009 claudio

bnx(4) is a bit special. The chip itself is capable of swapping endianess
so there is no need for htoleXX calls. The only thing needed is the correct
layout of the DMA-ed structures. Additionally it uses PAGE_SIZE but assumed
that it is always 4k. Fix the macros that failed to respect that so that it
works on 8k PAGE_SIZE systems. This makes bnx(4) work on sparc64.
Tested on amd64 by dlg@. OK dlg@, deraadt@


# 1.33 05-Sep-2009 claudio

u_int32_t not u_int32_ts in debug code.


Revision tags: OPENBSD_4_6_BASE
# 1.32 03-Jul-2009 deraadt

fix a typo; from brad


# 1.31 03-Jul-2009 dlg

this is a rather large change to add support for the BCM5709.

the 5709s use a the b09 firmwares, which is different to the b06 used by
all the other chips supported by bnx. the majority of the diff comes from
special handling for some indirect reads and writes, and because it needs
more host memory to operate with.

ive tried to keep the cosmetic changes to a minimum.

"go for it" deraadt@


# 1.30 03-Jul-2009 dlg

newer bnx chips use a separate firmware to the "old" ones. this updates
the b06 firmware for the older chips, and adds the b09 firmware. there are
three variants of the rv2p code thats loaded onto the chips, so this has
been split out into separate firmware files as well.

the driver has been updated to handle the split firmwares, and to easily
allow loading of the different versions. this change only supports the
loading of the firmwares for the currently supported chips.

after this change you must build the new firmwares and install them as well
as your new kernel.

"go to it" deraadt@


# 1.29 20-Jun-2009 naddy

Rewrite the interface flag handling case code and update the receive
filter handling to take advantage of ac_multirangecnt and have correct
IFF_ALLMULTI handling. From Brad.


# 1.28 22-Apr-2009 dlg

replace arrays of dmamaps and mbuf pointers used to manage packets
on the tx rings (one mbuf ptr/dmamap array entry was created for
every tx descriptor slot at attach time) with a dynamically grown
list of mbuf pointers and dmamaps.

bnx used to have 512 dmamaps/mbuf pointers for the tx ring, now my
system is running with 8 under moderate load.

the big bonus from this is that the dmamap handling is greatly
simplified.

reyk@ likes this a lot


# 1.27 21-Apr-2009 dlg

tweak the whitespace in the softc a bit to make it easier to read.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE
# 1.26 24-Jun-2008 brad

Fixed a problem that would cause errors (especially when in low memory
systems) because the RX chain was corrupted when an mbuf was mapped to
an unexpected number of buffers.

From davidch@FreeBSD


# 1.25 13-Jun-2008 brad

Remove slack space for RX/TX chains since it only covers sloppy coding.

From davidch @ FreeBSD


# 1.24 29-May-2008 brad

- Add a debug message to mention when a 2.5Gb adapter is found.
- Change invalid PHY address debug message in bnx_miibus_write_reg()
from warn level to verbose.
- Add two new softc fields and store the shared and port hw config
data.

From FreeBSD

ok dlg@


Revision tags: OPENBSD_4_3_BASE
# 1.23 28-Feb-2008 brad

Add initial bits for fiber support with the BCM5706/BCM5708 chipsets.

Tested with copper adapters by brad@, johan@ and Jung <moorang at gmail dot com>

ok dlg@


# 1.22 22-Feb-2008 kettenis

Avoid unaligned PCI config space access.

ok brad@


# 1.21 14-Sep-2007 brad

add two new chip revisions.

From FreeBSD

ok dlg@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE
# 1.20 05-Mar-2007 reyk

remove jumbo frame support by replacing MEXTALLOC with MCLGET, and
simplify the VLAN code.

this will close PR 5356 (system panics under high load).

From claudio@ who is currently not around to commit this fix

tested and ok by mcbride@, reyk@, todd@, Paul Hirsch, and brad


# 1.19 03-Mar-2007 reyk

instead of establishing the interrupt in the mounthook, move it back
to the attach function and set a flag in the mounthook to start
accepting interrupts (there are possible problems with establishing
interrupts after the ioapics are enabled in i386 GENERIC.MP).

also suggested by kettenis
tested by mcbride, me, and some others
ok dlg@


# 1.18 20-Jan-2007 dlg

move the interrupt establishment till after everything in the softc is
set up and allocated (which happens in a mountroothook). this prevents an
early call to the interrupt handler from causing a null deref when trying
to look into the unallocated regions.

found by mcbride when ciss and bnx were sharing an interrupt. mounting
root caused interrupts before the bnx was properly set up.

"commit your fix" mcbride@


# 1.17 20-Nov-2006 brad

Due to an incorrect macro, it appears that the driver has always been
accidentally truncating off the VLAN tag field in the TX descriptor. Fix
this by splitting up the vlan_tag and flags fields into separate fields,
and handling them appropriately.

From scottl@FreeBSD


# 1.16 19-Oct-2006 brad

Overhaul the transmit path:
- Eliminate the bnx_dmamap_arg structure.
- Refactor the loop that fills the buffer descriptor so that it can be done
with a single set of logic in a single loop instead of two sets of logic.
- Eliminate the need to cache and pass descriptor indexes between the start
loop and the encap function.
- Change the start loop to always check the ifnet sendq for more work.

From scottl@FreeBSD


# 1.15 14-Oct-2006 brad

- Simplify the arguments to bnx_tx_encap.
- Don't copy the bd_chain head pointers into temporary objects, they are
available globally.

From scottl@FreeBSD


# 1.14 04-Oct-2006 deraadt

Use loadfirmware(9) to get /etc/firmware/bnx instead of hard-coding a
gigantic firmware into the kernel; checked by brad


# 1.13 02-Oct-2006 deraadt

new structure for the firmware blob; ok brad


# 1.12 20-Sep-2006 deraadt

export a structure for the firmware file header. Unfortunately this is
one of the more gross firmwares around (as in, the broadcom supplied
header file has 30+ ugly global variables.. which we must copy into a
header. Kernel and userland must agree about this header, then the kernel
can rip the header apart back into it's driver specific "globals"..)


Revision tags: OPENBSD_4_0_BASE
# 1.11 21-Aug-2006 brad

enable Jumbo support.


# 1.10 20-Aug-2006 brad

#if 0 -> #ifdef BNX_JUMBO


# 1.9 20-Aug-2006 brad

- replace IF_DEQUEUE/IF_PREPEND with IFQ_POLL/IFQ_DEQUEUE.
- enable RX checksum offload.
- remove some unused code.


# 1.8 13-Aug-2006 marco

Get rid of _HI & _LO macros altogether since they used a wrong idiom.
This was pointed out by mickey The driver now uses the same idiom as mpi.

help from miod, mickey and kettenis

ok brad


# 1.7 10-Aug-2006 brad

unmap memory address space in bnx_release_resources().


# 1.6 10-Aug-2006 brad

remove typedef's.


# 1.5 10-Aug-2006 brad

just use BYTE_ORDER directly instead of setting the drivers endian flags.


# 1.4 09-Aug-2006 brad

add sys/timeout.h


# 1.3 09-Aug-2006 marco

Change #if __LP64__ to #ifdef __LP64__ as requested by brad


# 1.2 09-Aug-2006 marco

Reorder dmamap & dmamem to match man page.
Redo detection of _LO & _HI macro; help from miod and jordan.
ok beck brad


# 1.1 26-Jun-2006 brad

Add a rough initial port of the bce driver from FreeBSD, which provides
support for the new line of Broadcom NetXtreme II Gigabit PCI-X and PCIe
controllers, though renamed to bnx. This is work in progress, there
are some known issues. With help from Reyk with the bus_dma code.

Thanks to David Christensen at Broadcom for the driver and for providing
some PCI-X and PCIe adapters.

ok deraadt@


Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.49 05-Dec-2015 jmatthew

Make the bnx interrupt handler mpsafe, and perform rx and tx completion
outside the kernel lock.

Remove tx descriptor lists (essentially backing out if_bnx.c r1.77),
add an interrupt barrier in bnx_stop, check the rx ring state before receiving
packets, adjust the tx counter with atomic operations, and rework bnx_start
to check for ring space before dequeueing and drop the packet if bnx_encap
fails.

tested on BCM5708 by me and on BCM5709 by Hrvoje Popovski
ok dlg@


# 1.48 24-Nov-2015 mpi

You only need <net/if_dl.h> if you're using LLADDR() or a sockaddr_dl.


# 1.47 14-Nov-2015 mpi

Do not include <net/if_vlan_var.h> when it's not necessary.

Because of the VLAN hacks in mpw(4) this file still contains the definition
of "struct ifvlan" which depends on <sys/refcnt.h> which in turns pull
<sys/atomic.h>...


# 1.46 11-Sep-2015 stsp

Make room for media types of the future. Extend the ifmedia word to 64 bits.
This changes numbers of the SIOCSIFMEDIA and SIOCGIFMEDIA ioctls and
grows struct ifmediareq.

Old ifconfig and dhclient binaries can still assign addresses, however
the 'media' subcommand stops working. Recompiling ifconfig and dhclient
with new headers before a reboot should not be necessary unless in very
special circumstances where non-default media settings must be used to
get link and console access is not available.

There may be some MD fallout but that will be cleared up later.

ok deraadt miod
with help and suggestions from several sharks attending l2k15


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.45 26-Dec-2014 tedu

unifdef INET. missed a few headers in previous rounds


Revision tags: OPENBSD_5_6_BASE
# 1.44 22-Jul-2014 mpi

Fewer <netinet/in_systm.h>


# 1.43 08-Jul-2014 dlg

cut things that relied on mclgeti for rx ring accounting/restriction over
to using if_rxr.

cut the reporting systat did over to the rxr ioctl.

tested as much as i can on alpha, amd64, and sparc64.
mpi@ has run it on macppc.
ok mpi@


Revision tags: OPENBSD_5_5_BASE
# 1.42 30-Oct-2013 dlg

replace the workq bits to supply new tx pkt descriptors with a task.

tested locally on a dell poweredge 2950


# 1.41 07-Aug-2013 bluhm

Most network drivers include netinet/in_var.h, but apparently they
don't have to. Just remove these include lines.
Compiled on amd64 i386 sparc64; OK henning@ mikeb@


Revision tags: OPENBSD_5_3_BASE OPENBSD_5_4_BASE
# 1.40 08-Feb-2013 jasper

- remove ununsed PCI_ANY_ID macros

ok dlg@


# 1.39 10-Dec-2012 mikeb

Under some circumstances (currently only reproducible with IPsec)
bnx can be left w/o clusters on the receive ring and will stall.
To prevent that schedule a timeout if refill fails. Bug was
reported by jj@, fix tested by me, ok dlg


Revision tags: OPENBSD_5_2_BASE
# 1.38 05-Jul-2012 phessler

Add flow control to bnx(4)

Tested on 5706, 5708, 5709, 5716 chipsets.

From Brad

OK phessler@, sthen@, mikeb@,


Revision tags: OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE
# 1.37 20-Sep-2010 deraadt

Stop doing shutdown hooks in network drivers where possible. We already
take all interfaces down, via their xxstop routines. Claudio and I have
verified that none of the shutdown hooks do much extra beyond what xxstop
was already doing; it is largely a pile of junk.
ok claudio, some early comments by sthen; also read by matthew, jsg


# 1.36 07-Sep-2010 deraadt

remove the powerhook code. All architectures now use the ca_activate tree
traversal code to suspend/resume
ok oga kettenis blambert


Revision tags: OPENBSD_4_8_BASE
# 1.35 24-May-2010 sthen

Support fibre PHY on BCM5709S. From FreeBSD via Brad.
Tested by Brad on: BCM5706, BCM5708C
Tested by me on: BCM5716 (BCM5709 PHY)


Revision tags: OPENBSD_4_7_BASE
# 1.34 23-Nov-2009 claudio

bnx(4) is a bit special. The chip itself is capable of swapping endianess
so there is no need for htoleXX calls. The only thing needed is the correct
layout of the DMA-ed structures. Additionally it uses PAGE_SIZE but assumed
that it is always 4k. Fix the macros that failed to respect that so that it
works on 8k PAGE_SIZE systems. This makes bnx(4) work on sparc64.
Tested on amd64 by dlg@. OK dlg@, deraadt@


# 1.33 05-Sep-2009 claudio

u_int32_t not u_int32_ts in debug code.


Revision tags: OPENBSD_4_6_BASE
# 1.32 03-Jul-2009 deraadt

fix a typo; from brad


# 1.31 03-Jul-2009 dlg

this is a rather large change to add support for the BCM5709.

the 5709s use a the b09 firmwares, which is different to the b06 used by
all the other chips supported by bnx. the majority of the diff comes from
special handling for some indirect reads and writes, and because it needs
more host memory to operate with.

ive tried to keep the cosmetic changes to a minimum.

"go for it" deraadt@


# 1.30 03-Jul-2009 dlg

newer bnx chips use a separate firmware to the "old" ones. this updates
the b06 firmware for the older chips, and adds the b09 firmware. there are
three variants of the rv2p code thats loaded onto the chips, so this has
been split out into separate firmware files as well.

the driver has been updated to handle the split firmwares, and to easily
allow loading of the different versions. this change only supports the
loading of the firmwares for the currently supported chips.

after this change you must build the new firmwares and install them as well
as your new kernel.

"go to it" deraadt@


# 1.29 20-Jun-2009 naddy

Rewrite the interface flag handling case code and update the receive
filter handling to take advantage of ac_multirangecnt and have correct
IFF_ALLMULTI handling. From Brad.


# 1.28 22-Apr-2009 dlg

replace arrays of dmamaps and mbuf pointers used to manage packets
on the tx rings (one mbuf ptr/dmamap array entry was created for
every tx descriptor slot at attach time) with a dynamically grown
list of mbuf pointers and dmamaps.

bnx used to have 512 dmamaps/mbuf pointers for the tx ring, now my
system is running with 8 under moderate load.

the big bonus from this is that the dmamap handling is greatly
simplified.

reyk@ likes this a lot


# 1.27 21-Apr-2009 dlg

tweak the whitespace in the softc a bit to make it easier to read.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE
# 1.26 24-Jun-2008 brad

Fixed a problem that would cause errors (especially when in low memory
systems) because the RX chain was corrupted when an mbuf was mapped to
an unexpected number of buffers.

From davidch@FreeBSD


# 1.25 13-Jun-2008 brad

Remove slack space for RX/TX chains since it only covers sloppy coding.

From davidch @ FreeBSD


# 1.24 29-May-2008 brad

- Add a debug message to mention when a 2.5Gb adapter is found.
- Change invalid PHY address debug message in bnx_miibus_write_reg()
from warn level to verbose.
- Add two new softc fields and store the shared and port hw config
data.

From FreeBSD

ok dlg@


Revision tags: OPENBSD_4_3_BASE
# 1.23 28-Feb-2008 brad

Add initial bits for fiber support with the BCM5706/BCM5708 chipsets.

Tested with copper adapters by brad@, johan@ and Jung <moorang at gmail dot com>

ok dlg@


# 1.22 22-Feb-2008 kettenis

Avoid unaligned PCI config space access.

ok brad@


# 1.21 14-Sep-2007 brad

add two new chip revisions.

From FreeBSD

ok dlg@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE
# 1.20 05-Mar-2007 reyk

remove jumbo frame support by replacing MEXTALLOC with MCLGET, and
simplify the VLAN code.

this will close PR 5356 (system panics under high load).

From claudio@ who is currently not around to commit this fix

tested and ok by mcbride@, reyk@, todd@, Paul Hirsch, and brad


# 1.19 03-Mar-2007 reyk

instead of establishing the interrupt in the mounthook, move it back
to the attach function and set a flag in the mounthook to start
accepting interrupts (there are possible problems with establishing
interrupts after the ioapics are enabled in i386 GENERIC.MP).

also suggested by kettenis
tested by mcbride, me, and some others
ok dlg@


# 1.18 20-Jan-2007 dlg

move the interrupt establishment till after everything in the softc is
set up and allocated (which happens in a mountroothook). this prevents an
early call to the interrupt handler from causing a null deref when trying
to look into the unallocated regions.

found by mcbride when ciss and bnx were sharing an interrupt. mounting
root caused interrupts before the bnx was properly set up.

"commit your fix" mcbride@


# 1.17 20-Nov-2006 brad

Due to an incorrect macro, it appears that the driver has always been
accidentally truncating off the VLAN tag field in the TX descriptor. Fix
this by splitting up the vlan_tag and flags fields into separate fields,
and handling them appropriately.

From scottl@FreeBSD


# 1.16 19-Oct-2006 brad

Overhaul the transmit path:
- Eliminate the bnx_dmamap_arg structure.
- Refactor the loop that fills the buffer descriptor so that it can be done
with a single set of logic in a single loop instead of two sets of logic.
- Eliminate the need to cache and pass descriptor indexes between the start
loop and the encap function.
- Change the start loop to always check the ifnet sendq for more work.

From scottl@FreeBSD


# 1.15 14-Oct-2006 brad

- Simplify the arguments to bnx_tx_encap.
- Don't copy the bd_chain head pointers into temporary objects, they are
available globally.

From scottl@FreeBSD


# 1.14 04-Oct-2006 deraadt

Use loadfirmware(9) to get /etc/firmware/bnx instead of hard-coding a
gigantic firmware into the kernel; checked by brad


# 1.13 02-Oct-2006 deraadt

new structure for the firmware blob; ok brad


# 1.12 20-Sep-2006 deraadt

export a structure for the firmware file header. Unfortunately this is
one of the more gross firmwares around (as in, the broadcom supplied
header file has 30+ ugly global variables.. which we must copy into a
header. Kernel and userland must agree about this header, then the kernel
can rip the header apart back into it's driver specific "globals"..)


Revision tags: OPENBSD_4_0_BASE
# 1.11 21-Aug-2006 brad

enable Jumbo support.


# 1.10 20-Aug-2006 brad

#if 0 -> #ifdef BNX_JUMBO


# 1.9 20-Aug-2006 brad

- replace IF_DEQUEUE/IF_PREPEND with IFQ_POLL/IFQ_DEQUEUE.
- enable RX checksum offload.
- remove some unused code.


# 1.8 13-Aug-2006 marco

Get rid of _HI & _LO macros altogether since they used a wrong idiom.
This was pointed out by mickey The driver now uses the same idiom as mpi.

help from miod, mickey and kettenis

ok brad


# 1.7 10-Aug-2006 brad

unmap memory address space in bnx_release_resources().


# 1.6 10-Aug-2006 brad

remove typedef's.


# 1.5 10-Aug-2006 brad

just use BYTE_ORDER directly instead of setting the drivers endian flags.


# 1.4 09-Aug-2006 brad

add sys/timeout.h


# 1.3 09-Aug-2006 marco

Change #if __LP64__ to #ifdef __LP64__ as requested by brad


# 1.2 09-Aug-2006 marco

Reorder dmamap & dmamem to match man page.
Redo detection of _LO & _HI macro; help from miod and jordan.
ok beck brad


# 1.1 26-Jun-2006 brad

Add a rough initial port of the bce driver from FreeBSD, which provides
support for the new line of Broadcom NetXtreme II Gigabit PCI-X and PCIe
controllers, though renamed to bnx. This is work in progress, there
are some known issues. With help from Reyk with the bus_dma code.

Thanks to David Christensen at Broadcom for the driver and for providing
some PCI-X and PCIe adapters.

ok deraadt@