1 # Copyright (c) 2009, 2010, 2012 Nicira, Inc.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at:
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 from __future__
import print_function
34 def do_force_reconnect(_
):
35 r
.force_reconnect(now
)
38 def error_from_string(s
):
41 elif s
== "ECONNREFUSED":
42 return errno
.ECONNREFUSED
44 return ovs
.reconnect
.EOF
46 sys
.stderr
.write("unknown error '%s'\n" % s
)
50 def do_disconnected(arg
):
51 r
.disconnected(now
, error_from_string(arg
))
58 def do_connect_failed(arg
):
59 r
.connect_failed(now
, error_from_string(arg
))
78 elif action
== ovs
.reconnect
.CONNECT
:
79 print(" should connect")
80 elif action
== ovs
.reconnect
.DISCONNECT
:
81 print(" should disconnect")
82 elif action
== ovs
.reconnect
.PROBE
:
83 print(" should send probe")
95 timeout
= r
.timeout(now
)
96 if timeout
is not None and timeout
>= 0:
97 print(" advance %d ms" % timeout
)
103 def do_set_max_tries(arg
):
104 r
.set_max_tries(int(arg
))
107 def do_set_backoff_free_tries(arg
):
108 r
.set_backoff_free_tries(int(arg
))
111 def diff_stats(old
, new
, delta
):
112 if (old
.state
!= new
.state
or
113 old
.state_elapsed
!= new
.state_elapsed
or
114 old
.backoff
!= new
.backoff
):
115 print(" in %s for %d ms (%d ms backoff)"
116 % (new
.state
, new
.state_elapsed
, new
.backoff
))
118 if (old
.creation_time
!= new
.creation_time
or
119 old
.last_activity
!= new
.last_activity
or
120 old
.last_connected
!= new
.last_connected
):
121 print(" created %d, last activity %d, last connected %d"
122 % (new
.creation_time
, new
.last_activity
, new
.last_connected
))
124 if (old
.n_successful_connections
!= new
.n_successful_connections
or
125 old
.n_attempted_connections
!= new
.n_attempted_connections
or
126 old
.seqno
!= new
.seqno
):
127 print(" %d successful connections out of %d attempts, seqno %d"
128 % (new
.n_successful_connections
, new
.n_attempted_connections
,
131 if (old
.is_connected
!= new
.is_connected
):
136 print(" %sconnected" % negate
)
138 if (old
.last_connected
!= new
.last_connected
or
139 (new
.msec_since_connect
is not None and
140 old
.msec_since_connect
!= new
.msec_since_connect
- delta
) or
141 (old
.total_connected_duration
!= new
.total_connected_duration
- delta
142 and not (old
.total_connected_duration
== 0 and
143 new
.total_connected_duration
== 0))):
144 print(" last connected %d ms ago, connected %d ms total"
145 % (new
.msec_since_connect
, new
.total_connected_duration
))
147 if (old
.last_disconnected
!= new
.last_disconnected
or
148 (new
.msec_since_disconnect
is not None and
149 old
.msec_since_disconnect
!= new
.msec_since_disconnect
- delta
)):
150 print(" disconnected at %d ms (%d ms ago)"
151 % (new
.last_disconnected
, new
.msec_since_disconnect
))
154 def do_set_passive(_
):
155 r
.set_passive(True, now
)
162 def do_listen_error(arg
):
163 r
.listen_error(now
, int(arg
))
166 def do_receive_attempted(arg
):
168 r
.receive_attempted(now
)
169 elif arg
== "LLONG_MAX":
170 r
.receive_attempted(None)
172 sys
.stderr
.write("receive-attempted: bad argument %s\n" % arg
)
179 "disable": do_disable
,
180 "force-reconnect": do_force_reconnect
,
181 "disconnected": do_disconnected
,
182 "connecting": do_connecting
,
183 "connect-failed": do_connect_failed
,
184 "connected": do_connected
,
185 "activity": do_activity
,
187 "advance": do_advance
,
188 "timeout": do_timeout
,
189 "set-max-tries": do_set_max_tries
,
190 "set-backoff-free-tries": do_set_backoff_free_tries
,
191 "passive": do_set_passive
,
192 "listening": do_listening
,
193 "listen-error": do_listen_error
,
194 "receive-attempted": do_receive_attempted
201 r
= ovs
.reconnect
.Reconnect(now
)
203 prev
= r
.get_stats(now
)
204 print("### t=%d ###" % now
)
206 old_max_tries
= r
.get_max_tries()
208 line
= sys
.stdin
.readline()
225 commands
[command
](op
)
229 print("### t=%d ###" % now
)
231 cur
= r
.get_stats(now
)
232 diff_stats(prev
, cur
, now
- old_time
)
234 if r
.get_max_tries() != old_max_tries
:
235 old_max_tries
= r
.get_max_tries()
236 print(" %d tries left" % old_max_tries
)
241 if __name__
== '__main__':