@@ -225,11 +225,19 @@ def _init_device_result_handler(self):
225225 server_port = server_port , rpc_timeout_sec = timeout )
226226 else :
227227 # TODO: Make this all configured form run_trigger not device_reporting
228- handler = SessionServer (server_port = server_port )
229- handler . start ( )
228+ handler = SessionServer (on_session = self . _on_session ,
229+ server_port = server_port )
230230 return handler
231231 return None
232232
233+ def _on_session (self , request ):
234+ with self ._event_lock :
235+ LOGGER .info ('New session started for %s %s/%s' ,
236+ request .device_mac , request .device_vlan , request .assigned_vlan )
237+ device = self ._devices .create_if_absent (request .device_mac )
238+ device .dhcp_mode = DhcpMode .EXTERNAL
239+ self ._remote_trigger (device , request .device_vlan , request .assigned_vlan )
240+
233241 def _send_heartbeat (self ):
234242 message = {
235243 'name' : 'status' ,
@@ -270,6 +278,9 @@ def initialize(self):
270278 LOGGER .info ('Waiting for system to settle...' )
271279 time .sleep (3 )
272280
281+ if self ._device_result_handler :
282+ self ._device_result_handler .start ()
283+
273284 LOGGER .debug ('Done with initialization' )
274285
275286 def cleanup (self ):
@@ -394,10 +405,7 @@ def _handle_port_learn(self, dpid, port, target_mac):
394405
395406 def _handle_device_learn (self , target_mac , vid ):
396407 LOGGER .info ('Learned %s on vid %s' , target_mac , vid )
397- if not self ._devices .get (target_mac ):
398- device = self ._devices .new_device (target_mac , vlan = vid )
399- else :
400- device = self ._devices .get (target_mac )
408+ device = self ._devices .create_if_absent (target_mac , vlan = vid )
401409 device .dhcp_mode = DhcpMode .EXTERNAL
402410
403411 # For keeping track of remote port events
@@ -420,17 +428,20 @@ def _handle_remote_port_state(self, device, port_event):
420428 device .port .active = False
421429 return
422430
423- device .port .flapping_start = 0
424- device .port .active = True
431+ self ._remote_trigger (device , port_event .device_vlan , port_event .assigned_vlan )
432+
433+ def _remote_trigger (self , device , device_vlan , assigned_vlan ):
434+ device .port .flapping_start = 0
435+ device .port .active = True
425436
426- device .vlan = port_event . device_vlan
427- device .assigned = port_event . assigned_vlan
437+ device .vlan = device_vlan
438+ device .assigned = assigned_vlan
428439
429- LOGGER .info ('Processing remote state %s %s/%s' , device ,
430- device .vlan , device .assigned )
431- self ._target_set_trigger (device , remote_trigger = True )
432- if device .gateway :
433- self ._direct_device_traffic (device , device .gateway .port_set )
440+ LOGGER .info ('Processing remote state %s %s/%s' , device ,
441+ device .vlan , device .assigned )
442+ self ._target_set_trigger (device , remote_trigger = True )
443+ if device .gateway :
444+ self ._direct_device_traffic (device , device .gateway .port_set )
434445
435446 def _queue_callback (self , callback ):
436447 with self ._event_lock :
@@ -507,7 +518,7 @@ def _terminate(self):
507518 for device in self ._devices .get_triggered_devices ():
508519 self .target_set_error (device , DaqException ('terminated' ))
509520 if self ._device_result_handler :
510- self ._device_result_handler .terminate ()
521+ self ._device_result_handler .stop ()
511522
512523 def _module_heartbeat (self ):
513524 # Should probably be converted to a separate thread to timeout any blocking fn calls
0 commit comments