Add a traffic monitor to detect abnormal scenarios.

This CL implements a traffic monitor to detect abnormal scenarios on an
network connection. The traffic monitor can be conditionally enabled on
a device. It starts periodically sampling the receive and transmit byte
counts on a enabled device after the device establishes a connection.
When it sees that there is outgoing traffic but no incoming traffic for
some sampling periods, it invokes a callback to notify such a scenario.

BUG=chromium-os:39433
TEST=Built and ran unit tests.

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