Commit Graph

194 Commits

Author SHA1 Message Date
pavel-shirshov
b26ec863e8 [docker-base]: Add less, strace, and configuration for vim (#591)
* Add less in docker-base. Add strace in docker_base_dbg.
* Make link vim to vim.tiny and have vim config file
2017-05-11 18:46:11 -07:00
Joe LeVeque
6e45307a49 [docker-orchagent]: Properly manage with supervisord (#589) 2017-05-11 11:18:10 -07:00
Joe LeVeque
d5c13c0a83 [dockers]: Disable autorestart on all supervisor processes inside containers (#580) 2017-05-09 17:37:08 -07:00
Joe LeVeque
8f348399f5 [Dockers]: Manage all Docker containers with Supervisord (#573)
- Consolidate config.sh and start.sh scripts into one script (start.sh)
 - Solve issue #435 - All dockers now run supervisord as their ENTRYPOINT
 - All stdout/stderr output from processes managed by supervisord is now sent to syslog instead of their own files
 - Supervisord log messages are now also sent to syslog
 - Removed unused smartmontools package from docker-platform-monitor
2017-05-08 15:43:31 -07:00
maggiemsft
4dfe2a26f3 [docker-ptf]replace ping utility from inetutils-ping to iputils-ping (#523)
* replace ping utility from inetutil-ping to iputils-ping

* fix dup typo

* change from package installing to using apt install

* remove unnecessary package handling line
2017-05-01 18:47:29 -07:00
Shuotian Cheng
c7d540cb2f [ptf]: Add pip install pysubnettree (#554)
>> import SubnetTree

This module is used for PTF FIB test to build LPM
2017-04-29 00:15:12 -07:00
pavel-shirshov
d083d7e79c [database]: Remove hard/soft limits for client-output-buffer in redis (#539)
* Remove hard/soft limits for client-output-buffer in redis

Otherwise when we have a lot of updates from orchagent to syncd latter
one can't process queues fast enough and redic-database disconnect both
orchagent and syncd. orchagent and syncd doesn't have logic to deal with
it and just crash
2017-04-26 12:07:18 -07:00
Oleksandr Ivantsiv
c7ea3470ed [swss]: Generate config files for Everflow and IPinIP from minigraph (#507)
[swss]: Generate config files for Everflow and IPinIP from minigraph
 - Add Everflow DST IP to minigraph file
 - Extend minigraph.py to support Everflow
 - Add templates file for Everflow and IPinIP configuration
 - Add config.sh for swss docker to generate config files
2017-04-21 14:28:29 -07:00
Joe LeVeque
6c202919b3 [System logs]: Eliminate duplicate log messages and attempt rotation more frequently (#520)
* Rename 'ACSFileFormat' -> 'SONiCFileFormat'

* Rename '00-acs.conf' -> '00-sonic.conf'

* Add logrotate.d and systemd-journald config files to image

* Log all SONiC process messages to /var/log/syslog; prevent duplicate logging to /var/log/messages

* Do not redirect cron and daemon logs to their own files, let them log to /var/log/syslog

* Log all teamd messages to /var/log/teamd.log; Add more SONiC program names to SONiC rules clause

* Remove duplicate code by condensing quagga programs into a list; Fix teamd log rule

* Kernel and LPR messages no longer getting duplicated to their own log files

* Now calling logrotate every minute via cron job

* Need full path to logrotate in cron job

* Add '.log' suffix to wildcards, otherwise logrotate will rotate already-rotated logs (e.g., bgpd.log.1.1.1.1.1...)

* Add microsecond granularity to syslog messages

* Don't overwrite system crontab, instead, install additional logrotate crontab file into /etc/cron.d

* Removed incomplete concept of per-process SONiC logs. We can revisit again later
2017-04-21 08:22:44 -07:00
Shuotian Cheng
7dc1045c26 [swss]: Export platform as env variable in docker-swss (#524)
Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-04-21 08:21:41 -07:00
Rodny Molina
d30fbf1d72 [build]: Adding support for Free-Range-Routing stack. (#510)
- Extending SONiC building infrastructure to provide users
           with greater flexibility, by allowing them to elect a
           routing-stack different than the default one (quagga). The desired
           routing-stack will be defined in rules/config file.

         - As part of these changes I'm adding support for
           Free-Range-Routing (FRR) stack. Quagga will continue to be
           the default routing-stack.

Signed-off-by: Rodny Molina <rodny@linkedin.com>
2017-04-20 09:12:27 -07:00
lguohan
b3e10d2093 [vas]: remove docker-vas (#499) 2017-04-13 06:08:28 -07:00
Marian Pritsak
6dbe979e5f [build]: Include SONiC version into installer. (#472)
* [build]: Include SONiC version into installer.

Signed-off-by: marian-pritsak <marianp@mellanox.com>

* Append dirty if contains local changes

Signed-off-by: marian-pritsak <marianp@mellanox.com>

* Update config

* Use correct name for kernel version field

* Update sysDescription.j2
2017-04-05 16:14:41 -07:00
Taoyu Li
8391d7f8b5 [snmp] Fix a bug in SNMP alias mapping (#473)
* [snmp] Fix a bug in SNMP alias mapping Which was introduced in #448.
2017-04-03 21:34:18 -07:00
Taoyu Li
8c76556efb Re-commit PR #432 (SHA 4546372) (#474)
* [config/acl] Get ACL config from DHCP and load it in swss container (#432)
* Temporarily disable DHCP option 226
2017-04-03 16:12:32 -07:00
Shuotian Cheng
9841f8338b [redis]: Disable snapshotting completely (#463)
Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-31 23:51:31 -07:00
Joe LeVeque
5604b59be5 Remove deprecated docker-bgp (#465) 2017-03-31 15:51:38 -07:00
pavel-shirshov
823bc36bd9 Enable graceful restart feature for ToR router (#466) 2017-03-31 13:25:39 -07:00
Taoyu Li
fed908fc6b [config-engine] minigraph.py refactoring (#448)
* Refactor minigraph.py
See description in https://github.com/Azure/sonic-buildimage/pull/448 for detail
2017-03-30 15:25:31 -07:00
Joe LeVeque
71d299bed4 [swsssdk]: Update nomenclature: 'sswsdk' -> 'swsssdk' (#445) 2017-03-30 11:51:05 -07:00
lguohan
94934f7b3b Revert 432 taoyl/acl dhcp (#457)
* Revert "[config/acl] Get ACL config from DHCP and load it in swss container (#432)"

This reverts commit 4546372f48.
2017-03-29 20:11:46 -07:00
pavel-shirshov
814fd87e63 Remove /var/run/rsyslogd.pid bofore starting rsyslog (#453) 2017-03-29 18:07:25 -07:00
Shuotian Cheng
7f703a9c8f [docker-lldp]: Do not use TTY mode on lldpctl command (#454)
Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-29 17:47:21 -07:00
Taoyu Li
4546372f48 [config/acl] Get ACL config from DHCP and load it in swss container (#432)
Get ACL config from DHCP and load it in swss container
2017-03-29 13:33:54 -07:00
Shuotian Cheng
27dae90726 [docker-teamd]: Clean /etc/teamd/ folder before adding new configurations (#451)
Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-28 15:49:48 -07:00
Qi Luo
7a2a374917 [docker-snmp]: Disable snmpd IP module and use snmp subagent implementation (#447)
* Disable snmpd ip module, will use snmp subagent implementation
* Update git submodule
2017-03-28 15:48:29 -07:00
pavel-shirshov
70cc4994ef Fix qos configuration for TD2 platform (#439) 2017-03-27 16:38:18 -07:00
Joe LeVeque
fcaba688f7 [database]: Fix ENTRYPOINT for docker-database to ensure redis-server starts as PID 1 (#442) 2017-03-27 15:27:20 -07:00
Nadiya
713f6fc318 [sonic-cfggen] Add check to generate valid bgpconfig (#440)
* [sonic-cfggen]Add check to generate valid bgpconfig

Signed-off-by: Nadiya.Stetskovych <Nadiya.Stetskovych@cavium.com>

* Use builtin none instead of None

Signed-off-by: Nadiya.Stetskovych <Nadiya.Stetskovych@cavium.com>
2017-03-27 14:22:04 -07:00
pavel-shirshov
5314230980 [docker-syncd-%-rpc]: Integrate syncd dockers with rpc (#431)
* Build docker-syncd-*-rpc for brcm and mlnx

* Fix errors

* Update make files for rpc

* Fix mistypes
2017-03-24 18:36:56 -07:00
Taoyu Li
f08874db36 [platform-monitor]: Fix sensors.conf file path (#426)
sensors.conf file was moved in #316.
2017-03-22 16:59:12 -07:00
pavel-shirshov
91cca8966d [docker-syncd-*-rpc]: Fix build (#423)
* Fix docker-syncd-brcm-rpc build
* Fix docker-syncd-mlnx-rpc build

* Rename docker-syncd-rpc to docker-syncd-brcm-rpc

* Add fix for mlnx platform too
2017-03-22 16:38:51 -07:00
Shuotian Cheng
6a6bc88dcb [interfaces]: Remove bridge-utils from swss docker and add it to base image (#417)
The reason is that /etc/network/interfaces file is in base image. After booting,
docker-swss is not ready and thus the empty VLAN interfaces cannot be created
when the brctl is pointing to the binary inside the swss docker.

Add the bridge-utils into the base image and add bridge_ports none to the
/etc/network/interfaces file so that after boot-up the empty VLAN interfaces
will be created to let the members to join later.

Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-20 21:39:09 -07:00
Shuotian Cheng
7b7a61693a [sonic-cfggen]: Add -p option and add teamd.j2 test (#414)
- Add -p --port-config option to feed sonic-cfggen with port_config.ini
  file when necessary.
- Update minigraph.py file to accept the -p option
- Add test_j2files.py test to test config.sh and all .j2 templates
  * Currently test_teamd is added to test both the config.sh and teamd.j2
    file works well with the t0 sample minigraph and sample port config
    file
  * The sample output is added to the folder sample_output for comparison

Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-17 21:38:20 -07:00
Shuotian Cheng
783be14a5d [minigraph]: Add portchannels/vlans dictionary and update teamd templates (#408)
- minigraph_portchannel_interfaces and minigraph_vlan_interfaces are lists
  of interfaces and the name could duplicate due to multiple IPs
- Add minigraph_portchannels and minigraph_vlans dictionaries to support
  querying port channels and vlans via the name
- Update teamd.j2 template and config.sh file in docker-teamd
- Update zebra.conf.j2 template to add port channel interfaces

Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-17 16:48:13 -07:00
Taoyu Li
3643281594 [cfggen] Add tool to translate openconfig acl into sonic format (#388)
* Build sonic-config-engine as whl instead of deb package
* Add tool to translate openconfig acl into sonic format
2017-03-17 14:51:42 -07:00
Shuotian Cheng
05e6b3611d [interfaces]: Combine vlan_interfaces and lag_interfaces file and add allow-hotplug (#381)
* [files]: Add allow-hotplug stanza to interfaces files

- start interface <interface_name> when the kernel detects
a hotplug event from the interface

ref: https://www.debian.org/doc/manuals/debian-reference/ch05.en.html

* [interfaces]: Combine vlan_interfaces and lag_interfaces file and add allow-hotplug

1. Remove vlan_interfaces and lag_interfaces file and members in teamd.j2
2. Add all interfaces to /etc/network/interfaces file
3. Add allow-hotplug stanza
4. Add up <command> to automatically add interfaces to VLAN and LAG
5. Add unique_name filter to minigraph.py to remove duplicate interface names
6. Add brctl to base image
7. Update sonic-swss submodule

Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-16 11:22:40 -07:00
Joe LeVeque
d6bfa505b3 Wait for VLAN interface to come up before starting DHCP relay (#399) 2017-03-16 10:40:33 -07:00
Marian Pritsak
4c65682478 [orchagent]: Add swssloglevel shortcut in base image (#386)
Signed-off-by: marian-pritsak <marianp@mellanox.com>
2017-03-07 23:00:58 -08:00
Taoyu Li
bd6bf1ff9a [config] [oneimage & dhcp relay docker] Move ntp, rsyslog, and dhcp server information into minigraph (#374)
Move DHCP, rsyslog, and NTP server information into minigraph


* Fix dhcp relay template according to CR
2017-03-06 12:41:26 -08:00
Joe LeVeque
5dafa907b2 [dockers]: Add base image files to syncd-brcm, database and teamd (#380) 2017-03-06 12:22:42 -08:00
Min Yao
b9c624520e Support centec platform (#376) 2017-03-04 02:17:38 -08:00
Nadiya
701d5ddb8a Add cavm saiserver (#137) 2017-03-04 01:56:41 -08:00
lguohan
80e3dc0df7 [device]: add missing sai profile and minigraph for the supported devices (#362)
change orchagent start.sh to use mounted hwsku directory
2017-03-02 23:53:20 -08:00
Shuotian Cheng
f9d8137975 [teamd]: Add redis-tools as the dependency of docker-teamd and fix bugs (#363)
- Fix the if condition bug to wait till PORT_TABLE:ConfigDone before start

Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-02 18:07:43 -08:00
Shuotian Cheng
f06dc5d3f9 [teamd]: Update the start.sh script to clean up the docker state (#351)
This change should be temporary because the current teamd cannot
re-create net devices acrosss restart. Basically, it will fail
when there're files in /var/run/teamd/ folder or the previously
created net devices are still there. Thus, the current workaround
is to remove the obsolete files to restart the docker-teamd.

This workaround cannot resolve the swss restart issue. Before
restarting swss, docker teamd needs to be stopped manually. After
swss starts, docker teamd needs to be restarted manually.

This change will only make sure that rebooting the switch will
make the switch at the correct state.

Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-02 15:59:16 -08:00
pavel-shirshov
bac738f91f Add bgp container with gobgp (#358)
* Add go-1.7 into docker-slave

* Create container docker-fpm-gobgp with gobgpd inside
2017-03-02 11:33:46 -08:00
Shuotian Cheng
2a2af6a44e [orchagent]: Update start.sh to combine td2 qos/buffers config (#344)
Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-03-01 18:23:28 -08:00
Taoyu Li
903499000f [docker-teamd] fix a config bug introduced in #345 (#353) 2017-03-01 14:32:52 -08:00
Shuotian Cheng
ad1b581111 [docker]: Add -c option in teamd docker Dockerfile (#348)
CMD is not longer a file name but a command that needs to be executed,
thus /bin/bash is not enough for the entrypoint and -c is needed.

Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-02-28 13:36:59 -08:00
Taoyu Li
d9b1000e6c [cfggen] Add support in -v for jinja2 expression (#345)
* Add support in -v for jinja2 expression
* Format json output
2017-02-28 10:52:56 -08:00
lguohan
b21d26dfe0 [platform]: add support for Force10-Z9100 32x100G (#332)
* [platform]: add support for Force10-Z9100 32x100G

* update sonic-swss submodule

* [broadcom]: update broadcom sai/sdk
2017-02-24 08:35:11 -08:00
Taoyu Li
a16c780285 [teamd] Fix a bug in #305 that will break teamd (#329) 2017-02-23 14:47:51 -08:00
pavel-shirshov
151a7d2a90 Apply buffer/qos configuration for mlnx platform (#321) 2017-02-23 11:21:11 -08:00
Taoyu Li
95ad5c79fd Fix the reference in docker-snmp-sv2 to deprecated alias_map.json (#320) 2017-02-22 14:28:37 -08:00
kaiyu22
b5f9fcae99 [platform]: ingrasys-s9100: Add ingrasys switch s9100 (#318)
Signed-off-by: Sam Yang <yang.kaiyu@gmail.com>
2017-02-22 02:15:39 -08:00
antonpatenko
a2b4bcbb61 [docker-base]: Enabled common debug packages installation. (#292) 2017-02-21 19:04:43 -08:00
Samuel Angebault
f57fd0bee8 [platform] Add support configurations files for DCS-7060CX-32S (#313) 2017-02-21 13:37:07 -08:00
Taoyu Li
073c28bf15 Move template files to /usr/share/sonic/templates (#305) 2017-02-18 17:50:29 -08:00
pavel-shirshov
a845740543 [All Dockerfiles]: Prevent apt asking questions on the console (#300)
Add noninteractive setting into every Dockerfile in the repo

Signed-off-by: Pavel Shirshov pavelsh@microsoft.com
2017-02-16 21:48:49 -08:00
Shuotian Cheng
877291ae91 [docker-teamd]: Automatically start the processes after host interfaces are created (#278)
Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-02-15 08:54:10 -08:00
Taoyu Li
7e9f6b4e12 Remove /etc/default/snmpd from snmp docker (#294) 2017-02-13 17:52:29 -08:00
Taoyu Li
ecc9f0c6d8 Properly pull vlan subnet from minigraph when writing bgpd.conf (#293) 2017-02-13 14:17:22 -08:00
antonpatenko
6a6f5a66a8 [docker-base]: unsubmodule docker-base. (#275)
Convert docker-base from submodule into a regular directory.
2017-02-12 18:02:04 -08:00
Qi Luo
815bf53de7 snmpd disables inetCidrRouteTable module (#286) 2017-02-10 10:40:09 -08:00
Qi Luo
822680d21b Build python3.6 deb packages and install them into docker-snmp-sv2 (#245) 2017-02-08 22:02:21 -08:00
lguohan
b6753e7960 [docker-config-engine]: introduce docker sonic config engine (#274)
* [docker-config-engine]: introduce docker sonic config engine

sonic config engine provide the sonic configure engine for all sonic
dockers that rely on the engine to generate runtime configuration.
2017-02-07 18:11:19 -08:00
Oleksandr Ivantsiv
53a9792014 [Makefile]: Add possibility for docker containers to install files to base image (#240)
- Add vtysh/lldpctl/sensors to baseimage
2017-02-07 00:33:20 -08:00
Joe LeVeque
522585aadf [docker-fpm]: T0 devices receive routes containing one occurrence of their own ASN (#271) 2017-02-07 00:28:30 -08:00
Joe LeVeque
12fa107645 Revert "Revert "Conform with new Docker build method"" (#264) 2017-02-06 08:40:57 -08:00
Taoyu Li
b2e44834f1 SNMP will now bind on 0.0.0.0 if mgmt ip not specified in minigraph (#253)
Fix an issue that snmp will fail to start if mgmt ip is not specified in minigraph (e.g. default graph in oneimage where mgmt ip is from DHCP)
2017-02-03 21:01:34 -08:00
lguohan
68270f36df [build break]: Revert "Conform with new Docker build method" (#257) 2017-02-03 20:15:55 -08:00
Shuotian Cheng
00fe0784b4 [Broadcom]: Update Broadcom debian packages and m3000-r0 m3000-r1 config.bcm files (#251)
Signed-off-by: Shuotian Cheng <shuche@microsoft.com>
2017-02-03 19:44:00 -08:00
Taoyu Li
6f5262bc2c Fix config bug in snmp (#252)
1. Modify snmp user to Debian-snmp to fit snmpd 5.7.3
2. Fix a bug that cause sysLocation to be missing from snmpd.conf
2017-02-03 17:39:09 -08:00
Joe LeVeque
76cfd672d1 Conform with new Docker build method (#250) 2017-02-03 14:21:57 -08:00
Joe LeVeque
b85c8dc89e Fix isc-dhcp-relay template (#246) 2017-02-02 21:10:07 -08:00
Taoyu Li
60e1fc3c98 ONEImage - Read all platform dependent information from sonic-config-engine (#238)
Read all platform dependent information from sonic-config-engine
2017-02-02 20:34:34 -08:00
Joe LeVeque
4cd3d31946 Update APT package lists before first attempt to install (#241)
* Update APT package lists before first attempt to install
* Move setting of environment variable before first call to apt-get
2017-02-02 11:12:04 -08:00
Joe LeVeque
61d4509f0b Add new sonic-config dependencies to dhcp_relay Dockerfile (#237) 2017-02-01 21:29:50 -08:00
Andriy Moroz
ddbda4ce2e docker: Add ipaddress python module to the PTF docker (#231)
Needed for the FIB test
2017-02-01 12:49:43 -08:00
Taoyu Li
1c074367a1 Add daemon file which was missing in docker-fpm (#229) 2017-02-01 00:10:40 -08:00
Taoyu Li
be8ed80554 teamd: Use 75% links upperbound as min-links (#224) 2017-01-30 17:33:03 -08:00
Oleksandr Ivantsiv
f2eed8f8a0 Added support of ONIE version 2016.11-5.1.0001 for Mellanox platforms. (#218) 2017-01-29 11:34:12 -08:00
Oleksandr Ivantsiv
34ea91349c one image implementation (#215)
* Single image

* Fix review comments

* Update syncd service. Add HW mgmt to Mellanox single image.

* Add single image template for Broadcom platform.

SKU should be provided during configure:
make configure PLATFORM=broadcom SKU=Force10-S6000

* Add single image template for Cavium platform.

SKU should be provided during configure:
make configure PLATFORM=cavium SKU=AS7512

* Add description to sonic_debian_extension.j2 file.
2017-01-29 11:33:33 -08:00
Joe LeVeque
c18b65bc16 Refactor DHCP relay docker in sonicv2 style (#217)
* Refactor DHCP relay docker in sonicv2 style
2017-01-26 23:36:58 -08:00
Joe LeVeque
608980524f [docker]: Install dpkt Python package in PTF docker (#216) 2017-01-25 18:19:15 -08:00
Taoyu Li
e87498d16d Add platform config for 7050 and 6100 (#212)
* Add platform config for 7050 and 6100

* allow certain platform to have no sensors.conf file in sonic-cfggen
2017-01-25 18:18:25 -08:00
Taoyu Li
1b49499b65 [docker]: Add a status file to mark that the file is generated by sonic-config-engine (#211) 2017-01-24 19:16:55 -08:00
Taoyu Li
9b940c3b3d Remove apt purge which wrongly remove sonic-config-engine (#204) 2017-01-21 10:30:39 -08:00
Joe LeVeque
78f11a7ff3 [docker]: Make line breaks consistent in DHCP relay Dockerfile (#203) 2017-01-20 22:33:11 -08:00
Oleksandr Ivantsiv
ea65962fe4 Fix compilation issue. (#198)
Fix docker-platform-monitor compilation issue.
Update .gitignore file
2017-01-20 13:55:42 -08:00
Taoyu Li
4fe1bdcf87 sonic-cfggen with sonicv2 dockers (#190)
Add a sonic-config-engine to help generate config file based on minigraph and other data on runtime. Modify fpm, teamd, lldp, snmp, and platform-monitor docker to use sonic-config-engine to generate config in docker upon load.
2017-01-19 20:56:26 -08:00
Oleksandr Ivantsiv
80d0d2d43b Reduce docker images size. (#196)
* Reduce docker images size.

Install only required dependencies.

* Update Dockerfile.j2
2017-01-19 12:19:21 -08:00
Pavel Shirshov
86f5c19643 [docker]: docker-ptf doesn't wait until eth3 is up
This is done inside ptf agent now
2017-01-17 14:40:35 -08:00
marian-pritsak
43b0e502de Add recipe for ptf docker 2017-01-05 14:39:07 -08:00
Marian Pritsak
61496a5959 [docker]: Remove obsolete dockers (#175)
docker-syncd-mlnx and docker-syncd-cavm were moved
to platform directories
2016-12-30 13:35:04 -08:00
Marian Pritsak
cb13166596 [docker-teamd]: rename docker-team to docker-teamd (#174) 2016-12-30 13:34:38 -08:00
Marian Pritsak
66aebb329c [docker]: Change templating method to jinja2 (#115) (#153)
Move from sed to jinja2 for more readability.
2016-12-23 15:22:06 -08:00
Qi Luo
a01d484087 [docker-base] Update git submodule hash (#150) 2016-12-21 20:30:26 -08:00
Qi Luo
2380359059 Add apt update in Dockerfile, since cached lists file may be obsoleted (#149)
[docker]: Add apt update in Dockerfile, since cached lists file may be obsoleted
2016-12-21 18:20:46 -08:00