shill: Perform modem disconnect based on modem state.

The cellular state may not accurately reflect whether the underlying
modem is connecting/connected.  If CellularCapabilityUniversal::Connect()
is called and while that call is still in progress, a call is made to
CellularCapabilityUniversal::StopModem(), the cellular state does not
indicate that the modem is connecting so StopModem() does not
attempt to disconnect.  It's better to use the modem state to determine
if we need to disconnect the modem.

Also in this CL is a check to ignore stale modem Connected state
transitions.  The stale state transition can occur when the modem is
asked to connect but is then quickly disabled.  In this case, the
Connected state can show up after the modem has been disabled.

BUG=chromium-os:32241
TEST=Unit tests, cellular_Smoke, cellular_ModemControl

Change-Id: I7cc3316a287729529b097ca41c579b7ea6ecefdb
Reviewed-on: https://gerrit.chromium.org/gerrit/28441
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Thieu Le <thieule@chromium.org>
Commit-Ready: Thieu Le <thieule@chromium.org>
5 files changed
tree: 52520da8453f64882fe770681f0fc049de6e1994
  1. dbus_bindings/
  2. doc/
  3. .gitignore
  4. accessor_interface.h
  5. adaptor_interfaces.h
  6. arp_packet.cc
  7. arp_packet.h
  8. arp_packet_unittest.cc
  9. async_connection.cc
  10. async_connection.h
  11. async_connection_unittest.cc
  12. byte_string.cc
  13. byte_string.h
  14. byte_string_unittest.cc
  15. callbacks.h
  16. cellular.cc
  17. cellular.h
  18. cellular_capability.cc
  19. cellular_capability.h
  20. cellular_capability_cdma.cc
  21. cellular_capability_cdma.h
  22. cellular_capability_cdma_unittest.cc
  23. cellular_capability_classic.cc
  24. cellular_capability_classic.h
  25. cellular_capability_classic_unittest.cc
  26. cellular_capability_gsm.cc
  27. cellular_capability_gsm.h
  28. cellular_capability_gsm_unittest.cc
  29. cellular_capability_universal.cc
  30. cellular_capability_universal.h
  31. cellular_capability_universal_unittest.cc
  32. cellular_error.cc
  33. cellular_error.h
  34. cellular_service.cc
  35. cellular_service.h
  36. cellular_service_unittest.cc
  37. cellular_unittest.cc
  38. connection.cc
  39. connection.h
  40. connection_unittest.cc
  41. control_interface.h
  42. crypto_des_cbc.cc
  43. crypto_des_cbc.h
  44. crypto_des_cbc_unittest.cc
  45. crypto_interface.h
  46. crypto_provider.cc
  47. crypto_provider.h
  48. crypto_provider_unittest.cc
  49. crypto_rot47.cc
  50. crypto_rot47.h
  51. crypto_rot47_unittest.cc
  52. dbus_adaptor.cc
  53. dbus_adaptor.h
  54. dbus_adaptor_unittest.cc
  55. dbus_control.cc
  56. dbus_control.h
  57. dbus_manager.cc
  58. dbus_manager.h
  59. dbus_manager_unittest.cc
  60. dbus_objectmanager_proxy.cc
  61. dbus_objectmanager_proxy.h
  62. dbus_objectmanager_proxy_interface.h
  63. dbus_properties.cc
  64. dbus_properties.h
  65. dbus_properties_proxy.cc
  66. dbus_properties_proxy.h
  67. dbus_properties_proxy_interface.h
  68. dbus_properties_unittest.cc
  69. dbus_property_matchers.h
  70. dbus_service_proxy.cc
  71. dbus_service_proxy.h
  72. dbus_service_proxy_interface.h
  73. default_profile.cc
  74. default_profile.h
  75. default_profile_unittest.cc
  76. device.cc
  77. device.h
  78. device_dbus_adaptor.cc
  79. device_dbus_adaptor.h
  80. device_info.cc
  81. device_info.h
  82. device_info_unittest.cc
  83. device_stub.h
  84. device_unittest.cc
  85. dhcp_config.cc
  86. dhcp_config.h
  87. dhcp_config_unittest.cc
  88. dhcp_provider.cc
  89. dhcp_provider.h
  90. dhcp_provider_unittest.cc
  91. dhcp_proxy_interface.h
  92. dhcpcd_proxy.cc
  93. dhcpcd_proxy.h
  94. dns_client.cc
  95. dns_client.h
  96. dns_client_unittest.cc
  97. endpoint.cc
  98. endpoint.h
  99. ephemeral_profile.cc
  100. ephemeral_profile.h
  101. error.cc
  102. error.h
  103. error_unittest.cc
  104. ethernet.cc
  105. ethernet.h
  106. ethernet_service.cc
  107. ethernet_service.h
  108. event_dispatcher.cc
  109. event_dispatcher.h
  110. glib.cc
  111. glib.h
  112. glib_io_input_handler.cc
  113. glib_io_input_handler.h
  114. glib_io_ready_handler.cc
  115. glib_io_ready_handler.h
  116. HACKING
  117. hook_table.cc
  118. hook_table.h
  119. hook_table_unittest.cc
  120. http_proxy.cc
  121. http_proxy.h
  122. http_proxy_unittest.cc
  123. http_request.cc
  124. http_request.h
  125. http_request_unittest.cc
  126. http_url.cc
  127. http_url.h
  128. http_url_unittest.cc
  129. ieee80211.h
  130. io_handler.h
  131. ip_address.cc
  132. ip_address.h
  133. ip_address_unittest.cc
  134. ipconfig.cc
  135. ipconfig.h
  136. ipconfig_dbus_adaptor.cc
  137. ipconfig_dbus_adaptor.h
  138. ipconfig_unittest.cc
  139. key_file_store.cc
  140. key_file_store.h
  141. key_file_store_unittest.cc
  142. key_value_store.cc
  143. key_value_store.h
  144. key_value_store_matcher.h
  145. key_value_store_unittest.cc
  146. l2tp_ipsec_driver.cc
  147. l2tp_ipsec_driver.h
  148. l2tp_ipsec_driver_unittest.cc
  149. LICENSE
  150. link_monitor.cc
  151. link_monitor.h
  152. link_monitor_unittest.cc
  153. Makefile
  154. manager.cc
  155. manager.h
  156. manager_dbus_adaptor.cc
  157. manager_dbus_adaptor.h
  158. manager_unittest.cc
  159. metrics.cc
  160. metrics.h
  161. metrics_unittest.cc
  162. minijail.cc
  163. minijail.h
  164. mm1_modem_modem3gpp_proxy.cc
  165. mm1_modem_modem3gpp_proxy.h
  166. mm1_modem_modem3gpp_proxy_interface.h
  167. mm1_modem_modemcdma_proxy.cc
  168. mm1_modem_modemcdma_proxy.h
  169. mm1_modem_modemcdma_proxy_interface.h
  170. mm1_modem_proxy.cc
  171. mm1_modem_proxy.h
  172. mm1_modem_proxy_interface.h
  173. mm1_modem_simple_proxy.cc
  174. mm1_modem_simple_proxy.h
  175. mm1_modem_simple_proxy_interface.h
  176. mm1_sim_proxy.cc
  177. mm1_sim_proxy.h
  178. mm1_sim_proxy_interface.h
  179. mock_adaptors.cc
  180. mock_adaptors.h
  181. mock_ares.cc
  182. mock_ares.h
  183. mock_async_connection.cc
  184. mock_async_connection.h
  185. mock_cellular.cc
  186. mock_cellular.h
  187. mock_cellular_service.cc
  188. mock_cellular_service.h
  189. mock_connection.cc
  190. mock_connection.h
  191. mock_control.cc
  192. mock_control.h
  193. mock_dbus_manager.cc
  194. mock_dbus_manager.h
  195. mock_dbus_objectmanager_proxy.cc
  196. mock_dbus_objectmanager_proxy.h
  197. mock_dbus_properties_proxy.cc
  198. mock_dbus_properties_proxy.h
  199. mock_dbus_service_proxy.cc
  200. mock_dbus_service_proxy.h
  201. mock_device.cc
  202. mock_device.h
  203. mock_device_info.cc
  204. mock_device_info.h
  205. mock_dhcp_config.cc
  206. mock_dhcp_config.h
  207. mock_dhcp_provider.cc
  208. mock_dhcp_provider.h
  209. mock_dhcp_proxy.cc
  210. mock_dhcp_proxy.h
  211. mock_dns_client.cc
  212. mock_dns_client.h
  213. mock_event_dispatcher.cc
  214. mock_event_dispatcher.h
  215. mock_glib.cc
  216. mock_glib.h
  217. mock_http_request.cc
  218. mock_http_request.h
  219. mock_ipconfig.cc
  220. mock_ipconfig.h
  221. mock_log.cc
  222. mock_log.h
  223. mock_log_unittest.cc
  224. mock_manager.cc
  225. mock_manager.h
  226. mock_metrics.cc
  227. mock_metrics.h
  228. mock_minijail.cc
  229. mock_minijail.h
  230. mock_mm1_modem_modem3gpp_proxy.cc
  231. mock_mm1_modem_modem3gpp_proxy.h
  232. mock_mm1_modem_modemcdma_proxy.cc
  233. mock_mm1_modem_modemcdma_proxy.h
  234. mock_mm1_modem_proxy.cc
  235. mock_mm1_modem_proxy.h
  236. mock_mm1_modem_simple_proxy.cc
  237. mock_mm1_modem_simple_proxy.h
  238. mock_mm1_sim_proxy.cc
  239. mock_mm1_sim_proxy.h
  240. mock_modem.cc
  241. mock_modem.h
  242. mock_modem_cdma_proxy.cc
  243. mock_modem_cdma_proxy.h
  244. mock_modem_gsm_card_proxy.cc
  245. mock_modem_gsm_card_proxy.h
  246. mock_modem_gsm_network_proxy.cc
  247. mock_modem_gsm_network_proxy.h
  248. mock_modem_info.cc
  249. mock_modem_info.h
  250. mock_modem_manager_proxy.cc
  251. mock_modem_manager_proxy.h
  252. mock_modem_proxy.cc
  253. mock_modem_proxy.h
  254. mock_modem_simple_proxy.cc
  255. mock_modem_simple_proxy.h
  256. mock_nss.cc
  257. mock_nss.h
  258. mock_openvpn_driver.cc
  259. mock_openvpn_driver.h
  260. mock_openvpn_management_server.cc
  261. mock_openvpn_management_server.h
  262. mock_portal_detector.cc
  263. mock_portal_detector.h
  264. mock_power_manager.cc
  265. mock_power_manager.h
  266. mock_power_manager_proxy.cc
  267. mock_power_manager_proxy.h
  268. mock_process_killer.cc
  269. mock_process_killer.h
  270. mock_profile.cc
  271. mock_profile.h
  272. mock_property_store.cc
  273. mock_property_store.h
  274. mock_proxy_factory.cc
  275. mock_proxy_factory.h
  276. mock_resolver.cc
  277. mock_resolver.h
  278. mock_routing_table.cc
  279. mock_routing_table.h
  280. mock_rtnl_handler.cc
  281. mock_rtnl_handler.h
  282. mock_service.cc
  283. mock_service.h
  284. mock_sockets.cc
  285. mock_sockets.h
  286. mock_store.cc
  287. mock_store.h
  288. mock_supplicant_bss_proxy.cc
  289. mock_supplicant_bss_proxy.h
  290. mock_supplicant_interface_proxy.cc
  291. mock_supplicant_interface_proxy.h
  292. mock_supplicant_process_proxy.cc
  293. mock_supplicant_process_proxy.h
  294. mock_time.cc
  295. mock_time.h
  296. mock_vpn.cc
  297. mock_vpn.h
  298. mock_vpn_driver.cc
  299. mock_vpn_driver.h
  300. mock_vpn_provider.cc
  301. mock_vpn_provider.h
  302. mock_vpn_service.cc
  303. mock_vpn_service.h
  304. mock_wifi.cc
  305. mock_wifi.h
  306. mock_wifi_service.cc
  307. mock_wifi_service.h
  308. mock_wimax.cc
  309. mock_wimax.h
  310. mock_wimax_device_proxy.cc
  311. mock_wimax_device_proxy.h
  312. mock_wimax_manager_proxy.cc
  313. mock_wimax_manager_proxy.h
  314. mock_wimax_network_proxy.cc
  315. mock_wimax_network_proxy.h
  316. mock_wimax_provider.cc
  317. mock_wimax_provider.h
  318. mock_wimax_service.cc
  319. mock_wimax_service.h
  320. modem.cc
  321. modem.h
  322. modem_1.cc
  323. modem_1_unittest.cc
  324. modem_cdma_proxy.cc
  325. modem_cdma_proxy.h
  326. modem_cdma_proxy_interface.h
  327. modem_classic.cc
  328. modem_gsm_card_proxy.cc
  329. modem_gsm_card_proxy.h
  330. modem_gsm_card_proxy_interface.h
  331. modem_gsm_network_proxy.cc
  332. modem_gsm_network_proxy.h
  333. modem_gsm_network_proxy_interface.h
  334. modem_info.cc
  335. modem_info.h
  336. modem_info_unittest.cc
  337. modem_manager.cc
  338. modem_manager.h
  339. modem_manager_proxy.cc
  340. modem_manager_proxy.h
  341. modem_manager_proxy_interface.h
  342. modem_manager_unittest.cc
  343. modem_proxy.cc
  344. modem_proxy.h
  345. modem_proxy_interface.h
  346. modem_simple_proxy.cc
  347. modem_simple_proxy.h
  348. modem_simple_proxy_interface.h
  349. modem_unittest.cc
  350. nice_mock_control.cc
  351. nice_mock_control.h
  352. nss.cc
  353. nss.h
  354. nss_unittest.cc
  355. openvpn_driver.cc
  356. openvpn_driver.h
  357. openvpn_driver_unittest.cc
  358. openvpn_management_server.cc
  359. openvpn_management_server.h
  360. openvpn_management_server_unittest.cc
  361. portal_detector.cc
  362. portal_detector.h
  363. portal_detector_unittest.cc
  364. power_manager.cc
  365. power_manager.h
  366. power_manager_proxy.cc
  367. power_manager_proxy.h
  368. power_manager_proxy_interface.h
  369. power_manager_unittest.cc
  370. process_killer.cc
  371. process_killer.h
  372. process_killer_unittest.cc
  373. profile.cc
  374. profile.h
  375. profile_dbus_adaptor.cc
  376. profile_dbus_adaptor.h
  377. profile_dbus_property_exporter.cc
  378. profile_dbus_property_exporter.h
  379. profile_dbus_property_exporter_unittest.cc
  380. profile_unittest.cc
  381. property_accessor.h
  382. property_accessor_unittest.cc
  383. property_iterator.h
  384. property_store.cc
  385. property_store.h
  386. property_store_inspector.cc
  387. property_store_inspector.h
  388. property_store_unittest.cc
  389. property_store_unittest.h
  390. provider_db_unittest.bfd
  391. proxy_factory.cc
  392. proxy_factory.h
  393. refptr_types.h
  394. resolver.cc
  395. resolver.h
  396. resolver_unittest.cc
  397. routing_table.cc
  398. routing_table.h
  399. routing_table_entry.h
  400. routing_table_unittest.cc
  401. rpc_task.cc
  402. rpc_task.h
  403. rpc_task_dbus_adaptor.cc
  404. rpc_task_dbus_adaptor.h
  405. rpc_task_unittest.cc
  406. rtnl_handler.cc
  407. rtnl_handler.h
  408. rtnl_handler_unittest.cc
  409. rtnl_listener.cc
  410. rtnl_listener.h
  411. rtnl_listener_unittest.cc
  412. rtnl_message.cc
  413. rtnl_message.h
  414. rtnl_message_unittest.cc
  415. scope_logger.cc
  416. scope_logger.h
  417. scope_logger_unittest.cc
  418. service.cc
  419. service.h
  420. service_dbus_adaptor.cc
  421. service_dbus_adaptor.h
  422. service_sorter.h
  423. service_under_test.cc
  424. service_under_test.h
  425. service_unittest.cc
  426. shill.conf
  427. shill_ares.cc
  428. shill_ares.h
  429. shill_config.cc
  430. shill_config.h
  431. shill_daemon.cc
  432. shill_daemon.h
  433. shill_main.cc
  434. shill_test_config.cc
  435. shill_test_config.h
  436. shill_time.cc
  437. shill_time.h
  438. shill_unittest.cc
  439. sockets.cc
  440. sockets.h
  441. static_ip_parameters.cc
  442. static_ip_parameters.h
  443. static_ip_parameters_unittest.cc
  444. store_interface.h
  445. supplicant_bss_proxy.cc
  446. supplicant_bss_proxy.h
  447. supplicant_bss_proxy_interface.h
  448. supplicant_interface_proxy.cc
  449. supplicant_interface_proxy.h
  450. supplicant_interface_proxy_interface.h
  451. supplicant_process_proxy.cc
  452. supplicant_process_proxy.h
  453. supplicant_process_proxy_interface.h
  454. technology.cc
  455. technology.h
  456. technology_unittest.cc
  457. TESTING
  458. testrunner.cc
  459. virtio_ethernet.cc
  460. virtio_ethernet.h
  461. vpn.cc
  462. vpn.h
  463. vpn_driver.cc
  464. vpn_driver.h
  465. vpn_driver_unittest.cc
  466. vpn_provider.cc
  467. vpn_provider.h
  468. vpn_provider_unittest.cc
  469. vpn_service.cc
  470. vpn_service.h
  471. vpn_service_unittest.cc
  472. vpn_unittest.cc
  473. wifi.cc
  474. wifi.h
  475. wifi_endpoint.cc
  476. wifi_endpoint.h
  477. wifi_endpoint_unittest.cc
  478. wifi_service.cc
  479. wifi_service.h
  480. wifi_service_unittest.cc
  481. wifi_unittest.cc
  482. wimax.cc
  483. wimax.h
  484. wimax_device_proxy.cc
  485. wimax_device_proxy.h
  486. wimax_device_proxy_interface.h
  487. wimax_manager_proxy.cc
  488. wimax_manager_proxy.h
  489. wimax_manager_proxy_interface.h
  490. wimax_network_proxy.cc
  491. wimax_network_proxy.h
  492. wimax_network_proxy_interface.h
  493. wimax_provider.cc
  494. wimax_provider.h
  495. wimax_provider_unittest.cc
  496. wimax_service.cc
  497. wimax_service.h
  498. wimax_service_unittest.cc
  499. wimax_unittest.cc
  500. wpa_supplicant.cc
  501. wpa_supplicant.h