Skip to content

Latest commit

 

History

History
269 lines (259 loc) · 23.3 KB

File metadata and controls

269 lines (259 loc) · 23.3 KB
src/resolve/resolved.c                                                      
+-----+                                                                      
| run |                                                                      
+-|---+                                                                      
  |    +--------------------+                                                
  |--> | service_parse_argv |                                                
  |    +--------------------+                                                
  |    +------------------+                                                  
  |--> | mkdir_safe_label | "/run/systemd/resolve"                           
  |    +------------------+                                                  
  |    +-------------+                                                       
  |--> | manager_new | setup manager, register callbacks for inotify and rtnl
  |    +-------------+                                                       
  |    +---------------+                                                     
  |--> | manager_start | (skip)                                              
  |    +---------------+                                                     
  |    +---------------------------+                                         
  |--> | manager_write_resolv_conf | update resolv.conf                      
  |    +---------------------------+                                         
  |    +---------------------------+                                         
  |--> | manager_check_resolv_conf | (skip)                                  
  |    +---------------------------+                                         
  |    +------------------------------+                                      
  |--> | capability_bounding_set_drop | (skip)                               
  |    +------------------------------+                                      
  |    +--------------+                                                      
  |--> | notify_start |                                                      
  |    +--------------+                                                      
  |    +---------------+                                                     
  +--> | sd_event_loop |                                                     
       +---------------+                                                     
src/resolve/resolved-manager.c                                                                                          
+-------------+                                                                                                          
| manager_new | : setup manager, register callbacks for inotify and rtnl                                                 
+-|-----------+                                                                                                          
  |                                                                                                                      
  |--> alloc and setup manager                                                                                           
  |                                                                                                                      
  |    +---------------------------+                                                                                     
  |--> | manager_parse_config_file | parse /etc/systemd/resolved.conf                                                    
  |    +---------------------------+                                                                                     
  |    +------------------+                                                                                              
  |--> | sd_event_default |                                                                                              
  |    +------------------+                                                                                              
  |    +-----------------------+                                                                                         
  |--> | sd_event_set_watchdog | given arg b, arm or unarm watchdog of event                                             
  |    +-----------------------+                                                                                         
  |    +------------------------+                                                                                        
  |--> | manager_watch_hostname | setup monitor for "/proc/sys/kernel/hostname", get hostname thru uname                 
  |    +------------------------+                                                                                        
  |    +------------+                                                                                                    
  |--> | dnssd_load | (find no *.dnssd)                                                                                  
  |    +------------+                                                                                                    
  |    +---------------+                                                                                                 
  |--> | dns_scope_new | alloc scope, add to manager                                                                     
  |    +---------------+                                                                                                 
  |    +--------------------------------+                                                                                
  |--> | manager_network_monitor_listen | setup monitor for /run/systemd/netif/links/                                    
  |    +--------------------------------+                                                                                
  |    +---------------------+                                                                                           
  |--> | manager_rtnl_listen | open socket, register matches, get all links/addresses and process them                   
  |    +---------------------+                                                                                           
  |    +---------------------+                                                                                           
  +--> | manager_connect_bus | register vtables, request name "org.freedesktop.login1", register callbacks for match rule
       +---------------------+                                                                                           
src/resolve/resolved-manager.c                                                                    
+------------------------+                                                                         
| manager_watch_hostname | : setup monitor for "/proc/sys/kernel/hostname", get hostname thru uname
+-|----------------------+                                                                         
  |    +-----------------+                                                                         
  |--> | sd_event_add_io |                                                                         
  |    +-----------------+ +--------------------+                                                  
  |                        | on_hostname_change |                                                  
  |                        +--------------------+                                                  
  |                                                                                                
  |    +---------------------+                                                                     
  +--> | determine_hostnames | get hostname thru uname                                             
       +---------------------+                                                                     
src/resolve/resolved-manager.c                          
+---------------------+                                  
| determine_hostnames | : get hostname thru uname        
+|--------------------+                                  
 |    +-------------------------+                        
 +--> | resolve_system_hostname | get hostname thru uname
      +-------------------------+                        
src/resolve/resolved-dns-scope.c                              
+---------------+                                              
| dns_scope_new | : alloc scope, add to manager                
+-|-------------+                                              
  |                                                            
  |--> alloc scope                                             
  |                                                            
  |--> add scope to manager                                    
  |                                                            
  |    +----------------------------+                          
  |--> | dns_scope_llmnr_membership | (do nothing in our case) 
  |    +----------------------------+  (do nothing in our case)
  |    +---------------------------+                           
  +--> | dns_scope_mdns_membership |                           
       +---------------------------+                           
src/resolve/resolved-manager.c                                                                                  
+--------------------------------+                                                                               
| manager_network_monitor_listen | : setup monitor for /run/systemd/netif/links/                                 
+-|------------------------------+                                                                               
  |    +------------------------+                                                                                
  |--> | sd_network_monitor_new | setup inotify watching "/run/systemd/netif/links/"                             
  |    +------------------------+                                                                                
  |    +---------------------------+                                                                             
  |--> | sd_network_monitor_get_fd | get inotify fd                                                              
  |    +---------------------------+                                                                             
  |    +-------------------------------+                                                                         
  |--> | sd_network_monitor_get_events | return 'pollin'                                                         
  |    +-------------------------------+                                                                         
  |    +-----------------+                                                                                       
  +--> | sd_event_add_io |                                                                                       
       +-----------------+ +------------------+                                                                  
                           | on_network_event | update links in manager, update resolv.conf, emit property change
                           +------------------+                                                                  
src/resolve/resolved-manager.c                                                         
+------------------+                                                                    
| on_network_event | : update links in manager, update resolv.conf, emit property change
+-|----------------+                                                                    
  |    +--------------------------+                                                     
  |--> | sd_network_monitor_flush | given inotify events, add or remove watch           
  |    +--------------------------+                                                     
  |                                                                                     
  |--> for each link in manager                                                         
  |    |                                                                                
  |    |    +-------------+                                                             
  |    +--> | link_update | given msg, update link                                      
  |         +-------------+                                                             
  |    +---------------------------+                                                    
  |--> | manager_write_resolv_conf | update resolv.conf                                 
  |    +---------------------------+                                                    
  |    +----------------------+                                                         
  +--> | manager_send_changed | emit property change of 'DNS'                           
       +----------------------+                                                         
src/resolve/resolved-resolv-conf.c                                                                
+---------------------------+                                                                      
| manager_write_resolv_conf | : update resolv.conf                                                 
+-|-------------------------+                                                                      
  |    +--------------------------+                                                                
  |--> | manager_read_resolv_conf | parse /etc/resolv.conf, alloc dns server/domain, add to manager
  |    +--------------------------+                                                                
  |    +-----------------------------+                                                             
  |--> | manager_compile_dns_servers | find servers from manager/links, add to arg dns             
  |    +-----------------------------+                                                             
  |    +--------------------------------+                                                          
  |--> | manager_compile_search_domains | find domains from manager/links, add to arg dns          
  |    +--------------------------------+                                                          
  |    +-----------------------+                                                                   
  |--> | fopen_temporary_label | open a temporary file                                             
  |    +-----------------------+                                                                   
  |    +-----------------------------------+                                                       
  |--> | write_uplink_resolv_conf_contents | write resolve content to the file                     
  |    +-----------------------------------+                                                       
  |    +---------------------+                                                                     
  +--> | conservative_rename | rename the file to "/run/systemd/resolve/resolv.conf"               
       +---------------------+                                                                     
src/resolve/resolved-resolv-conf.c                                                                   
+--------------------------+                                                                          
| manager_read_resolv_conf | : parse /etc/resolv.conf, alloc dns server/domain, add to manager        
+-|------------------------+                                                                          
  |                                                                                                   
  |--> open "/etc/resolv.conf"                                                                        
  |                                                                                                   
  |--> endless loop (break when nothing to read)                                                      
  |    |                                                                                              
  |    |    +-----------+                                                                             
  |    |--> | read_line |                                                                             
  |    |    +-----------+                                                                             
  |    |                                                                                              
  |    |--> get value of "nameserver", alloc 'dns server' and add to manager                          
  |    |                                                                                              
  |    +--> get value of "domain", alloc 'dns search domain' and add to manager                       
  |                                                                                                   
  |    +------------------------+                                                                     
  |--> | manager_set_dns_server | appoint the first server as current dns server, emit property change
  |    +------------------------+                                                                     
  |    +-------------------------------+                                                              
  +--> | dns_server_reset_features_all | reset all servers                                            
       +-------------------------------+                                                              
src/resolve/resolved-manager.c                                                                                
+---------------------+                                                                                        
| manager_rtnl_listen | : open socket, register matches, get all links/addresses and process them              
+-|-------------------+                                                                                        
  |    +-----------------+                                                                                     
  |--> | sd_netlink_open | open netlink socket                                                                 
  |    +-----------------+                                                                                     
  |    +-------------------------+                                                                             
  |--> | sd_netlink_attach_event | setup two sources: "netlink-receive-message" & "netlink-timer", add to event
  |    +-------------------------+                                                                             
  |    +----------------------+                                                                                
  +--> | sd_netlink_add_match | 'new link' & 'del link'                                                        
  |    +----------------------+ +----------------------+                                                       
  |                             | manager_process_link |                                                       
  |                             +----------------------+                                                       
  |    +----------------------+                                                                                
  |--> | sd_netlink_add_match | 'new addr' & 'del addr'                                                        
  |    +----------------------+ +-------------------------+                                                    
  |                             | manager_process_address |                                                    
  |                             +-------------------------+                                                    
  |                                                                                                            
  |--> send rtnl request to get all links                                                                      
  |                                                                                                            
  |--> for each reply (link)                                                                                   
  |    |                                                                                                       
  |    |    +----------------------+                                                                           
  |    +--> | manager_process_link | handle 'new link' or 'del link'                                           
  |         +----------------------+                                                                           
  |                                                                                                            
  |--> send rtnl request to get all addresses                                                                  
  |                                                                                                            
  +--> for each reply (address)                                                                                
       |                                                                                                       
       |    +-------------------------+                                                                        
       +--> | manager_process_address | handle 'new addr' or 'del addr'                                        
            +-------------------------+                                                                        
src/resolve/resolved-bus.c                                                                                         
+---------------------+                                                                                             
| manager_connect_bus | : register vtables, request name "org.freedesktop.login1", register callbacks for match rule
+-|-------------------+                                                                                             
  |    +---------------------------------------------+                                                              
  |--> | bus_open_system_watch_bind_with_description |                                                              
  |    +---------------------------------------------+                                                              
  |    +------------------------+                                                                                   
  |--> | bus_add_implementation | register manager_object and vtable to dbus                                        
  |    +------------------------+                                                                                   
  |    +---------------------------+                                                                                
  |--> | sd_bus_request_name_async | "org.freedesktop.resolve1"                                                     
  |    +---------------------------+                                                                                
  |    +---------------------+                                                                                      
  |--> | sd_bus_attach_event |                                                                                      
  |    +---------------------+                                                                                      
  |    +---------------------------+                                                                                
  +--> | sd_bus_match_signal_async | register match callback for org.freedesktop.login1                             
       +---------------------------+