Dell Inspiron 8100 - FreeBSD
Hardware info on main page.
This machine runs the i386 version of FreeBSD.
The primary ata drive (ad0) is sliced up as follows:
ad0s1 - 60 GB - FreeBSD (currently 8.1) ad0s2 - 60 GB - FreeBSD (currently 7.2)
External usb drive (Samsung 80 GB), used for testing
da0s1 - xx GB - FreeBSD (currently 7.1) da0s2 - xx GB - FreeBSD (currently 6.4)
Local links
Shuttle XH61V,
worklog
2015-11-02: firewall - ad0s1 - from /var/log/messages:
root@kg-omni1# grep smartd /var/log/messages Nov 2 03:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 04:01:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 04:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 05:01:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 05:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 06:01:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 06:31:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 07:01:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 07:31:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 08:01:27 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 08:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 09:01:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 09:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 10:01:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 10:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 11:01:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 11:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 12:01:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 12:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 13:01:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 13:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 14:01:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 14:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 15:01:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 15:31:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 16:01:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 16:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 17:01:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 17:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 18:01:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 18:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 19:01:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 19:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 20:01:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 20:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 21:01:29 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors Nov 2 21:31:28 kg-omni1 smartd[1458]: Device: /dev/ad0, 1 Currently unreadable (pending) sectors
smartctl health
root@kg-omni1# date;smartctl -H /dev/ad0Mon Nov 2 22:01:12 CET 2015 smartctl 5.39.1 2010-01-28 r3054 [FreeBSD 8.1-STABLE i386] (local build) Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED
this indicates that I should speed up getting the new firewall online.
2015-07-03: firewall - ad0s1 - the firewall failed, possible due to user error. Relevant lines form /var/log/messages:
Jul 3 15:26:55 kg-omni1 acpi: suspend at 20150703 15:26:55 Jul 3 15:26:59 kg-omni1 kernel: rl0: promiscuous mode disabled Jul 3 15:26:59 kg-omni1 dhcpd: receive_packet failed on rl0: Device not configured Jul 3 15:27:00 kg-omni1 kernel: tdkphy1: detached Jul 3 15:27:00 kg-omni1 kernel: miibus1: detached Jul 3 15:27:00 kg-omni1 kernel: xl1: detached Jul 3 15:27:00 kg-omni1 kernel: fwohci0: fwohci_pci_suspend
when I got home, I discovered that the firewall was down, and powered it on:
root@kg-omni1# uname -a;date;uptime FreeBSD kg-omni1.kg4.no 8.1-STABLE FreeBSD 8.1-STABLE #1: Fri Feb 21 09:10:49 CET 2014 root@kg-omni1.kg4.no:/usr/obj/usr/src/sys/GENERIC i386 Fri Jul 3 23:11:41 CEST 2015 11:11PM up 11 mins, 2 users, load averages: 0.10, 0.22, 0.16
that's it.
2015-01-17: firewall - ad0s1 - the firewall still runs FreeBSD 8.1-stable:
root@kg-omni1# uname -a FreeBSD kg-omni1.kg4.no 8.1-STABLE FreeBSD 8.1-STABLE #1: Fri Feb 21 09:10:49 CET 2014 root@kg-omni1.kg4.no:/usr/obj/usr/src/sys/GENERIC i386
the list of ports, for reference:
root@kg-omni1# pv (an alias for 'portversion -v') autoconf-2.68 = up-to-date with port autoconf-wrapper-20071109 = up-to-date with port automake-1.11.1 = up-to-date with port automake-wrapper-20071109 = up-to-date with port bash-4.1.7_2 = up-to-date with port bison-2.4.3,1 = up-to-date with port boehm-gc-7.1 = up-to-date with port bsdstats-5.5_1 = up-to-date with port chkrootkit-0.49 = up-to-date with port cyrus-sasl-2.1.23 = up-to-date with port darkstat-3.0.713 = up-to-date with port db41-4.1.25_4 = up-to-date with port ddclient-3.8.0_1 = up-to-date with port gettext-0.18.1.1 = up-to-date with port gmake-3.81_4 = up-to-date with port help2man-1.38.2_1 = up-to-date with port isc-dhcp41-server-4.1.1.p1_3,1 = up-to-date with port libiconv-1.13.1_1 = up-to-date with port libtool-2.2.10 = up-to-date with port logcheck-1.3.13 = up-to-date with port lsof-4.84A,5 = up-to-date with port m4-1.4.15,1 = up-to-date with port mime-construct-1.11 = up-to-date with port nginx-0.8.52 = up-to-date with port ossec-hids-local-2.4.1 = up-to-date with port p5-Digest-SHA1-2.13 = up-to-date with port p5-IO-Socket-SSL-1.33 = up-to-date with port p5-IPC-Signal-1.00 = up-to-date with port p5-Locale-gettext-1.05_3 = up-to-date with port p5-MIME-Base64-3.09 = up-to-date with port p5-MIME-Types-1.31 = up-to-date with port p5-Net-SSLeay-1.36 = up-to-date with port p5-Proc-WaitStat-1.00 = up-to-date with port pcre-8.10 = up-to-date with port perl-5.10.1_2 = up-to-date with port portupgrade-2.4.6_4,2 = up-to-date with port postfix-2.7.1,1 = up-to-date with port procmail-3.22_6 = up-to-date with port rfc-3.2.3_1 = up-to-date with port rkhunter-1.3.6 = up-to-date with port ruby-1.8.7.248_5,1 = up-to-date with port ruby18-bdb-0.6.5_1 = up-to-date with port smartmontools-5.39.1 = up-to-date with port unzip-6.0 = up-to-date with port w3m-0.5.2_4 = up-to-date with port wget-1.12_2 = up-to-date with port
quite a few. standard status "view":
root@kg-omni1# date;temp;swapinfo -h;echo " ";tvlm;echo " ";tvls;echo " ";df -h;echo " ";uptime;echo " ";ps ax | grep -v grep | grep ddc;ps ax | grep -v grep | grep smartd;ps ax | grep -v grep | grep natd;service nginx status;service natd status;service named status;service isc-dhcpd status;service ntpd status;service darkstat status Sat Jan 17 15:24:43 CET 2015 hw.acpi.thermal.tz0.temperature: 58.5C Device 1K-blocks Used Avail Capacity /dev/ad0s1b 2097152 4.0K 2.0G 0% Jan 17 10:43:16 kg-omni1 kernel: xl0: watchdog timeout Jan 17 11:24:45 kg-omni1 kernel: xl0: transmission error: 90 Jan 17 11:24:51 kg-omni1 kernel: xl0: watchdog timeout Jan 17 11:30:52 kg-omni1 kernel: xl0: transmission error: d0 Jan 17 11:30:59 kg-omni1 kernel: xl0: watchdog timeout Jan 17 11:43:20 kg-omni1 kernel: xl0: transmission error: 90 Jan 17 11:43:27 kg-omni1 kernel: xl0: watchdog timeout Jan 17 11:52:56 kg-omni1 kernel: ipfw: All logging counts reset. Jan 17 15:14:44 kg-omni1 kernel: xl0: transmission error: 90 Jan 17 15:14:52 kg-omni1 kernel: xl0: watchdog timeout Jan 17 15:24:19 kg-omni1 kernel: ipfw: 6300 Deny UDP 10.1.161.2:60781 8.8.8.8:53 in via rl0 Jan 17 15:24:20 kg-omni1 kernel: ipfw: 6300 Deny UDP 10.1.161.2:57792 8.8.8.8:53 in via rl0 Jan 17 15:24:22 kg-omni1 kernel: ipfw: 6300 Deny UDP 10.1.161.10:17784 255.255.255.255:17784 in via rl0 Jan 17 15:24:22 kg-omni1 kernel: ipfw: 6300 Deny UDP 10.1.161.10:32769 255.255.255.255:3483 in via rl0 Jan 17 15:24:23 kg-omni1 kernel: ipfw: 6000 Deny TCP 80.69.77.111:34531 84.215.180.206:9333 in via xl0 Jan 17 15:24:30 kg-omni1 last message repeated 3 times Jan 17 15:24:35 kg-omni1 kernel: ipfw: 6300 Deny UDP 10.1.150.32:3483 255.255.255.255:3483 in via rl0 Jan 17 15:24:38 kg-omni1 kernel: ipfw: 6300 Deny UDP 10.1.150.23:5353 224.0.0.251:5353 in via rl0 Jan 17 15:24:38 kg-omni1 kernel: ipfw: 6300 Deny UDP 10.1.161.8:5353 224.0.0.251:5353 in via rl0 Jan 17 15:24:38 kg-omni1 kernel: ipfw: 6000 Deny TCP 80.69.77.111:34531 84.215.180.206:9333 in via xl0 Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 989M 220M 691M 24% / devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1e 496M 90K 456M 0% /tmp /dev/ad0s1f 49G 2.7G 43G 6% /usr /dev/ad0s1d 1.4G 110M 1.2G 8% /var devfs 1.0K 1.0K 0B 100% /var/named/dev 3:24PM up 186 days, 21:27, 2 users, load averages: 0.03, 0.13, 0.26 1730 ?? Ss 49:16.22 ddclient - sleeping for 190 seconds (perl) 1454 ?? I 0:15.57 /usr/local/sbin/smartd -p /var/run/smartd.pid -c /usr/local/etc/smartd.conf 829 ?? Ss 9546:56.41 /sbin/natd -f /etc/natd.conf -dynamic -n xl0 nginx is running as pid 1722. natd is running as pid 829. named is running as pid 1319. dhcpd is running as pid 1583. ntpd is running as pid 1519. darkstat is running as pid 1739.
also for reference.
2014-02-20: firewall - ad0s1 - following security advisory FreeBSD-SA-14:02.ntpd I patched ntpd and rebuilt world as described:
root@kg-omni1# ll /tmp/ntp* -rw-r--r-- 1 tingo wheel 368 Feb 20 21:08 /tmp/ntpd.patch root@kg-omni1# cd /usr/src root@kg-omni1# patch < /tmp/ntpd.patch Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |Index: contrib/ntp/ntpd/ntp_config.c |=================================================================== |--- contrib/ntp/ntpd/ntp_config.c (revision 259828) |+++ contrib/ntp/ntpd/ntp_config.c (working copy) -------------------------- Patching file contrib/ntp/ntpd/ntp_config.c using Plan A... Hunk #1 succeeded at 597. done
after rebuilding and installing world, I stopped and restarted ntpd.
2014-02-20: firewall - ad0s1 - trying to fix "slow internet access" I first restarted my modem - no help. Next I tried restarting natd - no help. A quick test: stop ntpd - internet is quick again - aha, that was the culprit. Must fix now. After restarting ntpd testing from a machine on the outside confirms that ntpd is vulnerable:
$ ntpdc -n -c monlist <outside IP addr> <outside IP addr>: timed out with incomplete data ***Response from server was incomplete don't be fooled by this answer. tingo@ef5bf8ce-1177-44b5-b93e-df85450b25c8:~$ ntpq -c rv <outside IP addr> associd=0 status=0664 leap_none, sync_ntp, 6 events, freq_mode, version="ntpd 4.2.4p5-a (1)", processor="i386", system="FreeBSD/8.1-STABLE", leap=00, stratum=2, precision=-19, rootdelay=17.551, rootdispersion=123.010, peer=56600, refid=85.89.3.25, reftime=d6b101f0.5e84f4e7 Thu, Feb 20 2014 23:36:32.369, poll=6, clock=d6b10235.a5ccf7d1 Thu, Feb 20 2014 23:37:41.647, state=4, offset=-101.500, frequency=37.530, jitter=35.161, noise=33.505, stability=0.625, tai=0
Ouch! Time to fix. Now! Immediate action: editing /etc/ntp.conf, adding the lines:
restrict -4 default nomodify nopeer noquery notrap restrict -6 default nomodify nopeer noquery notrap restrict 127.0.0.1 restrict -6 ::1 restrict 127.127.1.0
to it and restarting ntpd. Hopefully that will help until I have patched and rebuilt ntpd. Looks better, ntpd is now at about 0.49% - 0.06% WCPU in top, as opposed to 10% before. Wow!
2013-01-02: firewall - ad0s1 - this morning my internet connection was slow as molasses, but dns worked as it should. I got a lot of timeouts from http (including ddclient). Nothing looked out of the ordinary (interface was up, speed and duplex ok, no swap used, and so on). Lacking any clues, I restarted natd (service natd restart). *Improvement was not immediate, but within about ten minutes everything was back to normal. Hard to tell if this was natd-related, or just a fluke.
2012-01-29: ad0s1 - after switching to a new ISP, the external network interface on the machine had to be reconfigured to use dhcp. From /etc/rc.conf:
ifconfig_xl0="DHCP"
Unfortunately, using dhcp has as side-effect that /etc/resolv.conf gets overwritten each time dhclient gets an address. Since I run a local nameserver (bind) on this machine, this side-effect is unwanted. Luckily, I found this post on the forums. So I created /etc/dhclient-enter-hooks and put this in it:
root@kg-omni1# more /etc/dhclient-enter-hooks # avoid overwriting /etc/resolv.conf add_new_resolv_conf() { # We don't want /etc/resolv.conf changed # So this is an empty function return 0 }
Seems to work.
2011-11-02: I switched to machine 2. slice 1 - dmesg output: normal.
2010-10-17: slice 1 - I upgraded to latest FreeBSD 8.1-stable. dmesg output: normal, verbose.
2010-10-16: slice 1 - I installed FreeBSD 8.1-release. dmesg output: normal, verbose.
wlans_ath0="wlan0" ifconfig_wlan0="WPA DHCP"
are the wireless settings in /etc/rc.conf. In addition you need a /etc/wpa_supplicant.conf file.
2008-11-08: slice 1: ath_hal version 0.10.5.6 works nicely with FreeBSD 6.4-prerelease:
root@kg-i82# uname -a FreeBSD kg-i82.kg4.no 6.4-PRERELEASE FreeBSD 6.4-PRERELEASE #1: Sat Nov 8 22:02:34 CET 2008 root@kg-i82.kg4.no:/usr/obj/usr/src/sys/I81K i386 root@kg-i82# dmesg | grep ath ath_hal: 0.10.5.6 (AR5210, AR5211, AR5212, AR5416, RF5111, RF5112, RF2413, RF5413, RF2133, RF2425, RF2417) ath0: <Atheros 5416> mem 0xf4010000-0xf401ffff irq 10 at device 0.0 on cardbus1 ath0: Ethernet address: 00:13:f7:6f:2f:45 ath0: mac 13.10 phy 8.1 radio 13.0 ath0: link state changed to UP
2008-11-08: slice 2: I upgraded ath_hal to version 0.10.5.6 (found here) and the ath0 card still works. dmesg messages:
tingo@kg-i82$ dmesg | grep ath ath_hal: 0.10.5.6 (AR5210, AR5211, AR5212, AR5416, RF5111, RF5112, RF2413, RF5413, RF2133, RF2425, RF2417) ath0: <Atheros 5416> mem 0xf4010000-0xf401ffff irq 10 at device 0.0 on cardbus1 ath0: [ITHREAD] ath0: WARNING: using obsoleted if_watchdog interface ath0: Ethernet address: 00:13:f7:6f:2f:45 ath0: mac 13.10 phy 8.1 radio 13.0 tingo@kg-i82$ pciconf -lv | grep ath -A 4 ath0@pci0:5:0:0: class=0x028000 card=0xee061113 chip=0x0023168c rev=0x01 hdr=0x00 vendor = 'Atheros Communications Inc.' device = 'AR5008 Wireless Network Adapter' class = network
2008-11-08: slice 2: it seems that the SMC SMCWCB-N cardbus nic isn't supported in FreeBSD 7.1-prerelease. I updated ath_hal to version 0.9.30.13, rebuilt the kernel, and now the cad is detected as:
ath_hal: 0.9.30.13 (AR5210, AR5211, AR5212, AR5416, RF5111, RF5112, RF2413, RF5413, RF2133) ath0: <Atheros 5416> mem 0xf4010000-0xf401ffff irq 10 at device 0.0 on cardbus1 ath0: [ITHREAD] ath0: WARNING: using obsoleted if_watchdog interface ath0: Ethernet address: 00:13:f7:6f:2f:45 ath0: mac 13.10 phy 8.1 radio 13.0 ath0: link state changed to UP ath0: link state changed to DOWN ath0: link state changed to UP
and it seems to be working well.
2008-10-30: slice 1 updated to FreeBSD 6.4-prerelease. dmesg output: normal, verbose.
2008-10-29: slice 2 updated to FreeBSD 7.1-prerelease. dmesg output: normal.
2008-10-10: I booted (with PLoP cd again) FreeBSD 7.1-prerelease from an usb hard drive. dmesg output: normal.
2008-10-10: With the help of PLoP boot manager on a CD, I booted FreeBSD 6.4-prerelease from an usb hard drive. dmesg output: normal. It seems lik PLoP only can boot when the usb hard drive is connected to the top usb port (on the back of the machine).
2008-09-21: I tested ufdformat on this machine, with FreeBSD 7.0-stable:
root@kg-i82# uname -a FreeBSD kg-i82.kg4.no 7.0-STABLE FreeBSD 7.0-STABLE #3: Wed May 28 15:59:38 CEST 2008 root@kg-i82.kg4.no:/usr/obj/usr/src/sys/I81K i386 root@kg-i82# ./ufdformat da0 Geometry: 80 cyl 2 heads 18 secpercyl 512 bytespersec current: 2880 blocks, 512 bytes-per-block formatted 0: 2880 blocks, 512 bytes-per-block 1: 1232 blocks, 1024 bytes-per-block 2: 2400 blocks, 512 bytes-per-block Format 1440K floppy `da0'? (y/n): y Processing VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV done.
ufdformat works as advertised on this machine.
2008-05-18: updated to latest FreeBSD 6.3-stable (slice 1). dmesg output.
2008-05-18: updated to latest FreeBSD 7.0-stable (slice 2): dmesg output.
2008-05-16: FreeBSD 7.0-stable: pciconf -lv output.
2008-03-17: I tried to boot from a dvd that I burned. It didn't work. The dvd booted fine in another machine, so there is something wrong here. A cd I burned with a partial copy of the dvd boots fine. Perhaps the Inspiron 8100 can't boot from dvds?
2008-03-02: upgraded to FreeBSD 7.0-stable. dmesg output and verbose dmesg output.
2008-03-01: installed FreeBSD 7.0-release from CD (disc1) on second slice (ad0s2). dmesg output. Realized that I had just 256 MB memory in the machine, and quickly put in another DIMM to get the memory up to 512 MB. Note: the second dimm is 512MB in size, but is recognized as 256 MB. dmesg output.
2008-02-17: upgraded to FreeBSD 6.3-stable. dmesg output.
2007-11-29: Trying to boot the machine with acpi disabled generates a "kernel trap 12: page fault while in kernel mode". It doesn't matter if i disable acpi with the boot menu or with unset acpi_load from the boot loader prompt.
2007-10-27: upgraded to FreeBSD 6.3-prerelease - dmesg.
2007-10-26: network boot is supported. Press F12 on boot, then select "Mini-PCI NIC" (or "Cardbus NIC") and then press enter. Can be configured with Ctrl+Alt+B. You can choose boot method from PXE, TCP/IP, NetWare, RPL. It supports PXE version 2.01.
2007-10-26: acpiconf -i 0 gives information about the (optional)battery in the left hand slot. Normally, there is a floppy drive in this slot.
2007-02-27: acpiconf -i 1 wll give you information about the standard (right hand side) battery. Whether an optional battery in the left hand side slot will be battery 2 or 0 (zero), I do not know.
2007-02-25: devinfo -v output, includes a Billionton LNA-100B PCCard NIC.
2007-02-18: FreeBSD 6.2-stable installed, dmesg.
2007-02-15: FreeBSD 6.2-release installed, dmesg.
The Dell Inspiron 8100 have two memory slots for SDRAM memory in an SO-DIMM package, but due to the specific chipset used, the machine can have a maximum of 512MB memory. The machine also have a 1600x1200 LCD, which is very nice. Boot keys: F2 will get you into BIOS setup, F12 will show you a boot menu. Boot from USB device is NOT supported. BIOS version: currently A15.