425 Commits

Author SHA1 Message Date
FUJITA Tomonori
f2c6dfe106 set setup.py install_requires properly
Let's enable pip to solve the dependency.

The code is taken from OpenStack.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-30 15:54:12 +09:00
Isaku Yamahata
1150dc49c4 python/ovs/stream: Fix Stream.connect() retval for incomplete connection.
This code is a backport from the upstream OVS (commit dcb66da):

If the loop condition in Stream.connect() was false, which is especially
likely for TCP connections, then Stream.connect() would return None,
which violates its documented behavior.  This commit fixes the problem.

Reported-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-30 14:51:10 +09:00
Isaku Yamahata
dae4bc4dc3 Revert "contrib/ovs/stream.py: TypeError: bad operand type for unary -: 'NoneType'"
This reverts commit c3a41d06a654ea81cdc79d7bda5106d05f2e1deb.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-30 14:48:18 +09:00
YAMADA Hideki
c5c7dc9cfe ryu/log: bugfix
$ ryu-manager --log_file $HOME/ryu.log
Traceback (most recent call last):
(...)
  File "/usr/local/lib/python2.7/dist-packages/ryu-1.1-py2.7.egg/ryu/log.py", line 74, in init_log
    logging.addHandler(logging.handlers.WatchedFileHandler(log_file))
AttributeError: 'module' object has no attribute 'addHandler'

$ ryu-manager --log_file $HOME/ryu.log
Traceback (most recent call last):
(...)
  File "/usr/local/lib/python2.7/dist-packages/ryu-1.4-py2.7.egg/ryu/log.py", line 74, in init_log
    log.addHandler(logging.handlers.WatchedFileHandler(log_file))
AttributeError: 'module' object has no attribute 'handlers'

$ ryu-manager --log_file $HOME/ryu.log
Traceback (most recent call last):
(...)
  File "/usr/local/lib/python2.7/dist-packages/ryu-1.4-py2.7.egg/ryu/log.py", line 76, in init_log
    mode = int(FLAGS.log_file_mnode, 8)
  File "/usr/local/lib/python2.7/dist-packages/gflags.py", line 810, in __getattr__
    raise AttributeError(name)
AttributeError: log_file_mnode

$ ryu-manager --log_dir $HOME/log/
Traceback (most recent call last):
(...)
  File "/usr/local/lib/python2.7/dist-packages/ryu-1.4-py2.7.egg/ryu/log.py", line 54, in _get_log_file
    return os.path.join(FLAGS.logdir,
  File "/usr/local/lib/python2.7/dist-packages/gflags.py", line 810, in __getattr__
    raise AttributeError(name)
AttributeError: logdir

Signed-off-by: YAMADA Hideki <yamada.hideki@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-28 08:02:15 +09:00
OHMURA Kei
c7d4aa7475 ofctl_v1_0: update and clean up
- add ip match support
- add match_to_str() and actions_to_str() instead of action_to_str()

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-26 07:06:54 +09:00
FUJITA Tomonori
3dcb33bb1e enable OF1.3 support
Ryu sucessfully connects to CPqD OF1.3 switch.

https://github.com/CPqD/ofsoftswitch13

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:09 +09:00
FUJITA Tomonori
91df9a3890 of1.3: fix OFPMP_FLOW
FlowStats works now.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:05 +09:00
FUJITA Tomonori
fad94da2d4 of1.3: support OFPMatch
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:05 +09:00
FUJITA Tomonori
4152e5d229 Add workaround to switch_features_handler for OF1.3
hacky workaround, will be removed. OF1.3 doesn't have ports. An
application should not depend on them. But there might be such bad
applications so let's keep this workaround for while.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:05 +09:00
FUJITA Tomonori
2bd4e3003c of1.3: fix OFPPacketQueue
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3_parser.py", line 2649, in OFPPacketQueue
    @clasmethod
NameError: name 'clasmethod' is not defined

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:05 +09:00
FUJITA Tomonori
11dad834a0 of1.3: fix OFPSetAsyn
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3_parser.py", line 1555, in <module>
  @_set_msg_type(ofproto_v1_3.OFPT_SET_ASYNC)
AttributeError: 'module' object has no attribute 'OFPT_SET_ASYNC'

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:05 +09:00
FUJITA Tomonori
569756639b of1.3: fix OFPQueueProp
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3_parser.py", line 1398, in register_queue_property
  return _register_queue_property
NameError: global name '_register_queue_property' is not defined

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:04 +09:00
FUJITA Tomonori
cdf42180a6 of1.3: fix OFPMeterFeaturesStatsRequest
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3_parser.py", line 1265, in <module>
  @_set_stats_type(ofproto_v1_3.OFPMP_METER_FEATUERS, OFPMeterFeaturesStats)
AttributeError: 'module' object has no attribute 'OFPMP_METER_FEATUERS'

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:04 +09:00
FUJITA Tomonori
4498217d79 of1.3: fix OFPMeterConfigStatsReply
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3_parser.py", line 1246, in <module>
  @_set_stats_type(ofproto_v1_3.OFPMP_METER_CONFIG, OFPMeterCOnfigStats)
NameError: name 'OFPMeterCOnfigStats' is not defined

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:04 +09:00
FUJITA Tomonori
eaf7d478a2 of1.3: fix OFPPortStatsReply
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3_parser.py", line 976, in <module>
  @_set_msg_type(ofproto_v1_3.OFPT_STATS_REPLY)
AttributeError: 'module' object has no attribute 'OFPT_STATS_REPLY'

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:04 +09:00
FUJITA Tomonori
183b624638 of1.3: fix OFPMP_AGGREGATE
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3_parser.py", line 898, in <module>
  @_set_stats_type(ofproto_v1_3.OFPST_AGGREGATE, OFPAggregateStats)
AttributeError: 'module' object has no attribute 'OFPST_AGGREGATE'

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:38:04 +09:00
FUJITA Tomonori
180cbe7609 of1.3: fix OFP_DESC_PACK_STR
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3.py", line 533, in <module>
  DESC_STR_LEN + 'c'
TypeError: cannot concatenate 'str' and 'int' objects

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:37:47 +09:00
FUJITA Tomonori
2b7d08f2ef of1.3: fix OFP_METER_BAND_DSCP_REMARK_PACK_STR assert
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3.py", line 480, in <module>
  OFP_METER_BAND_DSCP_REMARK_SIZE)
AssertionError

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:37:47 +09:00
FUJITA Tomonori
0f348cdbf4 of1.3: fix OFP_TABLE_MOD_PACK_STR assert
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3.py", line 383, in <module>
  assert (calcsize(OFP_TABLE_MOD_PACK_STR + OFP_HEADER_SIZE) ==
TypeError: cannot concatenate 'str' and 'int' objects

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:37:46 +09:00
FUJITA Tomonori
b1ffa1a3d5 of1.3: fix OFP_OXM_EXPERIMENTER_HEADER_SIZE assert
File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3.py", line 233, in <module>
  OFP_OXM_EXPERIMENTER_HEADER_SIZE) == OFP_OXM_EXPERIMENTER_HEADER_SIZE

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-23 11:37:45 +09:00
Isaku Yamahata
b2f725c6df contrib/ovs: TypeError: bad operand type for unary -: 'NoneType'
This fixes the following exception:
When Stream.__scs_connecting doesn't change self.state, Stream.connect()
returns None as implicit return value. Thus, the following exception is raised.

conf_switch_set_handler 00003247b5e63145 ovsdb_addr tcp:172.17.60.198:6634
_ovsdb_update 00003247b5e63145 tcp:172.17.60.198:6634 172.17.60.198
_add_tunnel_ports <ryu.app.tunnel_port_updater.TunnelDP object at 0x14a5950> set([])
172.17.60.198 - - [2012-11-21 15:01:00] "PUT /v1.0/conf/switches/00003247b5e63145/ovsdb_addr HTTP/1.1" 201 120 0.267351
remote tcp:172.17.60.198:6634
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/gevent/greenlet.py", line 390, in run
    result = self._run(*self.args, **self.kwargs)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/app/tunnel_port_updater.py", line 289, in _serve_loop
    self._init()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/app/tunnel_port_updater.py", line 125, in _init
    self.ovs_bridge.init()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/bridge.py", line 103, in init
    self.br_name = self._get_bridge_name()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/bridge.py", line 111, in _get_bridge_name
    self.run_command([command])
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/bridge.py", line 99, in run_command
    self.vsctl.run_command(commands, self.timeout, self.exception)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 1006, in run_command
    self._run_command(commands)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 999, in _run_command
    self._do_main(commands)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 918, in _do_main
    self._init_schema_helper()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 805, in _init_schema_helper
    vswitch_idl.OVSREC_DB_NAME)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 793, in _rpc_get_schema_json
    error, reply = rpc.transact_block(request)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/jsonrpc.py", line 306, in transact_block
    error = self.send(request)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/jsonrpc.py", line 240, in send
    self.run()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/jsonrpc.py", line 200, in run
    retval = self.stream.send(self.output)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/stream.py", line 213, in send
    return -retval
TypeError: bad operand type for unary -: 'NoneType'
<Greenlet at 0x133fd10: <bound method TunnelDP._serve_loop of <ryu.app.tunnel_port_updater.TunnelDP object at 0x14a5950>>> failed with TypeError

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-22 18:25:17 +09:00
Sriram Natarajan
00ddd8906d of1.2: fix some error constant typos
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-21 13:23:21 +09:00
OHMURA Kei
91b4f9f5fa packet lib: add arp constants
Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-20 07:41:59 +09:00
OHMURA Kei
c1dfc53488 add TLS support
This patch supports TLS connection to encrypt OF channel.

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-16 08:30:00 +09:00
HIYAMA Manabu
6afa1c35ec of1.2: Fix MTVlanVid() parser and serializer
- The OFPVID_PRESENT bit indicate the presence of a valid VLAN_ID.
- Reflect to unittests.

Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-06 20:16:33 +09:00
FUJITA Tomonori
6e14f983bc don't use select.POLL* constants
MacOS doesn't have POLL* constants (poll isn't supported by all OSes,
I guess).

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-05 21:10:06 +09:00
OHMURA Kei
5ccf13809c ofctl_v1_0: update get_flow_stats() to dump actions
Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-05 14:51:52 +09:00
Isaku Yamahata
d347dce3c4 wsgi/routes: add regex pattern for each REST component
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-03 15:57:05 +09:00
Isaku Yamahata
4b90f751ca contrib/ovs/dirs: replace @variables@ which is replaced by configure
Normally dirs.py is created from dirs.py.template by configure script.
Create it manually for our own copy.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
2012-11-03 15:02:57 +09:00
Isaku Yamahata
8aefef51bd import ovs python binding library
From changeset 8087f5ff825cae3a699e5a60ca6dd0deb10fc8e5
dirs.py.template needs to be adopted for Ryu environment.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
2012-11-03 15:02:57 +09:00
Isaku Yamahata
0ae9c29687 prepare contrib directory which holds third party library
- create ryu/contrib directory
- adjust module load path for third party library and prioritize our own copy
  than system's
- teach ryu-manager ryu/contrib
- run_tests.sh: exclude contrib dir for pep8
  third party files will be included under ryu/contrib.
  Third party files aren't suitable to our pep8 check because they aren't under
  our control.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
2012-11-03 15:02:57 +09:00
HIYAMA Manabu
6eeddaa2a4 of1.2: Fix OFPActionExperimenter parser
Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-01 17:18:55 +09:00
HIYAMA Manabu
4f7b30dad2 packet lib: remove unnecessary ICMP debug message
Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-11-01 13:11:25 +09:00
FUJITA Tomonori
552d77ee17 Ryu 1.4
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
v1.4
2012-10-31 10:36:31 +09:00
OHMURA Kei
56516378e0 ryu/app/ofctl_rest: implements ofctl_rest app
This patch implements REST API for accessing state. This module helps
your debugging and retrieving various statistics. It also supports
flow entry pusher to allow users to manually insert flows into switch.

- get all switch DPIDs connected to the controller
 $ curl http://<controller_ip>:8080/stats/switches

- get the desc stats
 $ curl http://<controller_ip>:8080/stats/desc/<dpid>

- get flows stats
 $ curl http://<controller_ip>:8080/stats/flow/<dpid>

- get ports stats
 $ curl http://<controller_ip>:8080/stats/port/<dpid>

- add a flow entry
 $ curl -d '{"dpid": "1", "cookie":"0", "priority":"32768", \
   "actions":[{"port":2, "type":"OUTPUT"}], "match":{"in_port":1}}' \
   http://<controller_ip>:8080/stats/flowentry

- delete all flows of the switch
 $ curl -X DELETE \
   http://<controller_ip>:8080/stats/flowentry/clear/<dpid>

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-30 11:40:39 +09:00
OHMURA Kei
3e74c789e9 ryu/lib/ofctl_v1_0: introduce OF interface
This patch provides the raw OF interface. We can talk with a switch
by using the OF interface via some protocols such as REST.

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-30 11:39:52 +09:00
HIYAMA Manabu
51b3b9a2bd test: add unittests for packet library
Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-23 13:33:43 +09:00
FUJITA Tomonori
3027becda1 silence unhandled event message
Users misunderstand that this harmful message is critical. Let's
silence it.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-17 03:54:28 +09:00
HIYAMA Manabu
21f29c6f41 test: add unittests for packet library
Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-12 02:29:23 +09:00
HIYAMA Manabu
c92d8be079 packet lib: fix udp header length
Fix the f5d2157 commit.

Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-12 02:28:57 +09:00
HIYAMA Manabu
c42673def1 packet lib: fix ipv4 assertion of option field
Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-12 02:28:32 +09:00
Isaku Yamahata
398d9a4ba3 tools/pip-requires: add routes which is used by wsgi.py module
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-12 02:28:11 +09:00
FUJITA Tomonori
f5d21573a5 packet lib: add unparsed data to Packet.protocols
Easy to access to the data that the library can't parse.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-11 03:34:10 +09:00
FUJITA Tomonori
ef8284dfd1 doc: update packet library
Use Packet class iterator feature

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-06 13:16:18 +09:00
FUJITA Tomonori
fd692d330d packet lib: kill find_protocol in Packet class
- Now easy to know the protocol name and iterate protocols.

- find_protocol doesn't handle the case the same protocols are stacked.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-06 13:16:17 +09:00
FUJITA Tomonori
5a0eea61fa packet lib: set protocol_name in each protocol
With this, it's easy to know the protocol name.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-06 13:16:15 +09:00
FUJITA Tomonori
5fd538ee7f packet lib: make Packet class iterator
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-06 13:16:13 +09:00
OHMURA Kei
9c30012955 packet lib: fix icmp echo serialize
Fix the merge breakage.

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-05 23:37:18 +09:00
FUJITA Tomonori
9314fa4c64 packet lib: add mpls
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-05 19:00:32 +09:00
HIYAMA Manabu
7ad45aa1c1 test: fix unittests for of parser
- use bytearray(n) instead of str().zfill(n)
- test data are more strictly.

Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-05 18:57:59 +09:00