shill: Configures netlink broadcast messaging with raw sockets.

This CL provides an interface for software to request the netlink
message_type and available multicast groups corresponding to a netlink
family name.  The new software completely replaces the old event_type
stuff that utilized libnl to get this information (and, as such, it is
the last nail in the coffin of using libnl for netlink communication
with the kernel).  |NetlinkMessage|s now get their message_type from
Config80211.

Also includes code to handle multi-part responses to a netlink message.

BUG=chromium:218211
TEST=unittests and manual tests.  The manual tests consist of:
  - Start shill with log=-10/wifi.  On the target, in a shell window,
    do the following:
      o stop shill
      o shill --log-level=-10 --log-scopes=wifi
  - Wait five seconds (the code will do everything it needs to at
    startup).
  - Look in /var/log/net.log and verify the following:
      o a CTRL_CMD_GETFAMILY message is sent to the kernel (just search
        for the 'CTRL_CMD_GETFAMILY' string.
      o a CTRL_CMD_NEWFAMILY message is received from the kernel
      o after those messages, verify that one or more
        NL80211_CMD_TRIGGER_SCAN messages received from the kernel.

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