@@ -679,6 +679,19 @@ static uint8_t md_input_netlink_add_json_key_value(const char *key,
679679 return RETVAL_SUCCESS ;
680680}
681681
682+ static void md_input_netlink_handle_system_event (struct md_input_netlink * min ,
683+ struct json_object * obj )
684+ {
685+ //recycle iface event, it contains all fields we need (currently)
686+ memset (min -> mse , 0 , sizeof (md_system_event_t ));
687+ min -> mse -> md_type = META_TYPE_SYSTEM ;
688+
689+ if (md_input_netlink_parse_iface_event (min , obj , min -> mse ) == RETVAL_FAILURE )
690+ return ;
691+
692+ mde_publish_event_obj (min -> parent , (struct md_event * ) min -> mse );
693+ }
694+
682695static void md_input_netlink_handle_event (void * ptr , int32_t fd , uint32_t events )
683696{
684697 struct md_input_netlink * min = ptr ;
@@ -746,6 +759,9 @@ static void md_input_netlink_handle_event(void *ptr, int32_t fd, uint32_t events
746759 case META_TYPE_RADIO :
747760 md_input_netlink_handle_radio_event (min , nlh_obj );
748761 break ;
762+ case META_TYPE_SYSTEM :
763+ md_input_netlink_handle_system_event (min , nlh_obj );
764+ break ;
749765 default :
750766 META_PRINT (min -> parent -> logfile , "Unknown event type\n" );
751767 break ;
@@ -773,7 +789,7 @@ static uint8_t md_input_netlink_config(struct md_input_netlink *min)
773789 backend_event_loop_update (min -> parent -> event_loop , EPOLLIN , EPOLL_CTL_ADD ,
774790 mnl_socket_get_fd (min -> metadata_sock ), min -> event_handle );
775791
776- //TODO: Move to handler
792+ //TODO: guard with check for flag
777793 min -> mce = calloc (sizeof (struct md_conn_event ), 1 );
778794 if (min -> mce == NULL )
779795 return RETVAL_FAILURE ;
@@ -786,6 +802,11 @@ static uint8_t md_input_netlink_config(struct md_input_netlink *min)
786802 if (min -> mre == NULL )
787803 return RETVAL_FAILURE ;
788804
805+ min -> mse = calloc (sizeof (md_system_event_t ), 1 );
806+ if (min -> mre == NULL )
807+ return RETVAL_FAILURE ;
808+
809+
789810 return RETVAL_SUCCESS ;
790811}
791812
@@ -797,14 +818,17 @@ static uint8_t md_input_netlink_init(void *ptr, json_object* config)
797818 json_object * subconfig ;
798819 if (json_object_object_get_ex (config , "netlink" , & subconfig )) {
799820 json_object_object_foreach (subconfig , key , val ) {
800- if (!strcmp (key , "conn" ))
821+ if (!strcmp (key , "conn" )) {
801822 md_nl_mask |= META_TYPE_CONNECTION ;
802- else if (!strcmp (key , "pos" ))
823+ } else if (!strcmp (key , "pos" )) {
803824 md_nl_mask |= META_TYPE_POS ;
804- else if (!strcmp (key , "iface" ))
825+ } else if (!strcmp (key , "iface" )) {
805826 md_nl_mask |= META_TYPE_INTERFACE ;
806- else if (!strcmp (key , "radio" ))
827+ } else if (!strcmp (key , "radio" )) {
807828 md_nl_mask |= META_TYPE_RADIO ;
829+ } else if (!strcmp (key , "system" )) {
830+ md_nl_mask |= META_TYPE_SYSTEM ;
831+ }
808832 }
809833 }
810834
@@ -826,6 +850,7 @@ void md_netlink_usage()
826850 fprintf (stderr , " \"pos\":\t\tReceive netlink position events\n" );
827851 fprintf (stderr , " \"iface\":\t\tReceive netlink interface events\n" );
828852 fprintf (stderr , " \"radio\":\t\tReceive netlink radio events (QXDM + neigh. cells)\n" );
853+ fprintf (stderr , " \"system\":\t\tReceive netlink system (reboot) events\n" );
829854 fprintf (stderr , "},\n" );
830855}
831856
0 commit comments