Lines Matching full:de

83 	struct nan_de *de;  in nan_de_init()  local
85 de = os_zalloc(sizeof(*de)); in nan_de_init()
86 if (!de) in nan_de_init()
89 os_memcpy(de->nmi, nmi, ETH_ALEN); in nan_de_init()
90 de->ap = ap; in nan_de_init()
91 os_memcpy(&de->cb, cb, sizeof(*cb)); in nan_de_init()
93 return de; in nan_de_init()
107 static void nan_de_service_deinit(struct nan_de *de, struct nan_de_service *srv, in nan_de_service_deinit() argument
112 if (srv->type == NAN_DE_PUBLISH && de->cb.publish_terminated) in nan_de_service_deinit()
113 de->cb.publish_terminated(de->cb.ctx, srv->id, reason); in nan_de_service_deinit()
114 if (srv->type == NAN_DE_SUBSCRIBE && de->cb.subscribe_terminated) in nan_de_service_deinit()
115 de->cb.subscribe_terminated(de->cb.ctx, srv->id, reason); in nan_de_service_deinit()
120 static void nan_de_clear_pending(struct nan_de *de) in nan_de_clear_pending() argument
122 de->listen_freq = 0; in nan_de_clear_pending()
123 de->tx_wait_status_freq = 0; in nan_de_clear_pending()
124 de->tx_wait_end_freq = 0; in nan_de_clear_pending()
128 void nan_de_flush(struct nan_de *de) in nan_de_flush() argument
132 if (!de) in nan_de_flush()
136 nan_de_service_deinit(de, de->service[i], in nan_de_flush()
138 de->service[i] = NULL; in nan_de_flush()
141 de->num_service = 0; in nan_de_flush()
142 nan_de_clear_pending(de); in nan_de_flush()
182 static int nan_de_tx(struct nan_de *de, unsigned int freq, in nan_de_tx() argument
189 if (!de->cb.tx) in nan_de_tx()
192 res = de->cb.tx(de->cb.ctx, freq, wait_time, dst, src, bssid, buf); in nan_de_tx()
196 de->tx_wait_status_freq = freq; in nan_de_tx()
197 de->tx_wait_end_freq = wait_time ? freq : 0; in nan_de_tx()
203 static void nan_de_tx_sdf(struct nan_de *de, struct nan_de_service *srv, in nan_de_tx_sdf() argument
271 nan_de_tx(de, srv->freq, wait_time, dst, de->nmi, wildcard_bssid, buf); in nan_de_tx_sdf()
330 static void nan_de_tx_multicast(struct nan_de *de, struct nan_de_service *srv, in nan_de_tx_multicast() argument
352 nan_de_tx_sdf(de, srv, wait_time, type, nan_network_id, in nan_de_tx_multicast()
358 static void nan_de_add_srv(struct nan_de *de, struct nan_de_service *srv) in nan_de_add_srv() argument
370 de->service[srv->id - 1] = srv; in nan_de_add_srv()
371 de->num_service++; in nan_de_add_srv()
375 static void nan_de_del_srv(struct nan_de *de, struct nan_de_service *srv, in nan_de_del_srv() argument
378 de->service[srv->id - 1] = NULL; in nan_de_del_srv()
379 nan_de_service_deinit(de, srv, reason); in nan_de_del_srv()
380 de->num_service--; in nan_de_del_srv()
381 if (de->num_service == 0) in nan_de_del_srv()
382 nan_de_clear_pending(de); in nan_de_del_srv()
423 static int nan_de_next_multicast(struct nan_de *de, struct nan_de_service *srv, in nan_de_next_multicast() argument
453 if (!de->tx_wait_end_freq && srv->publish.unsolicited && in nan_de_next_multicast()
467 static int nan_de_srv_time_to_next(struct nan_de *de, in nan_de_srv_time_to_next() argument
481 tmp = nan_de_next_multicast(de, srv, now); in nan_de_srv_time_to_next()
555 struct nan_de *de = eloop_ctx; in nan_de_timer() local
564 struct nan_de_service *srv = de->service[i]; in nan_de_timer()
573 nan_de_del_srv(de, srv, NAN_DE_REASON_TIMEOUT); in nan_de_timer()
589 srv_next = nan_de_srv_time_to_next(de, srv, &now); in nan_de_timer()
594 de->listen_freq == 0 && de->ext_listen_freq == 0 && in nan_de_timer()
595 de->tx_wait_end_freq == 0 && in nan_de_timer()
596 nan_de_next_multicast(de, srv, &now) == 0) { in nan_de_timer()
598 nan_de_tx_multicast(de, srv, 0); in nan_de_timer()
601 if (!started && de->cb.listen && in nan_de_timer()
602 de->listen_freq == 0 && de->ext_listen_freq == 0 && in nan_de_timer()
603 de->tx_wait_end_freq == 0 && in nan_de_timer()
618 if (de->cb.listen(de->cb.ctx, srv->freq, duration) == 0) in nan_de_timer()
619 de->listen_freq = srv->freq; in nan_de_timer()
631 de, NULL); in nan_de_timer()
635 static void nan_de_run_timer(struct nan_de *de) in nan_de_run_timer() argument
637 eloop_cancel_timeout(nan_de_timer, de, NULL); in nan_de_run_timer()
638 eloop_register_timeout(0, 0, nan_de_timer, de, NULL); in nan_de_run_timer()
642 void nan_de_deinit(struct nan_de *de) in nan_de_deinit() argument
644 eloop_cancel_timeout(nan_de_timer, de, NULL); in nan_de_deinit()
645 nan_de_flush(de); in nan_de_deinit()
646 os_free(de); in nan_de_deinit()
650 void nan_de_listen_started(struct nan_de *de, unsigned int freq, in nan_de_listen_started() argument
653 if (freq != de->listen_freq) in nan_de_listen_started()
654 de->ext_listen_freq = freq; in nan_de_listen_started()
658 void nan_de_listen_ended(struct nan_de *de, unsigned int freq) in nan_de_listen_ended() argument
660 if (freq == de->ext_listen_freq) in nan_de_listen_ended()
661 de->ext_listen_freq = 0; in nan_de_listen_ended()
663 if (freq == de->listen_freq) { in nan_de_listen_ended()
664 de->listen_freq = 0; in nan_de_listen_ended()
665 nan_de_run_timer(de); in nan_de_listen_ended()
670 void nan_de_tx_status(struct nan_de *de, unsigned int freq, const u8 *dst) in nan_de_tx_status() argument
672 if (freq == de->tx_wait_status_freq) in nan_de_tx_status()
673 de->tx_wait_status_freq = 0; in nan_de_tx_status()
677 void nan_de_tx_wait_ended(struct nan_de *de) in nan_de_tx_wait_ended() argument
679 de->tx_wait_end_freq = 0; in nan_de_tx_wait_ended()
680 nan_de_run_timer(de); in nan_de_tx_wait_ended()
777 static void nan_de_rx_publish(struct nan_de *de, struct nan_de_service *srv, in nan_de_rx_publish() argument
787 nan_de_run_timer(de); in nan_de_rx_publish()
793 nan_de_tx_multicast(de, srv, instance_id); in nan_de_rx_publish()
800 nan_de_transmit(de, srv->id, NULL, NULL, peer_addr, in nan_de_rx_publish()
804 if (de->cb.discovery_result) in nan_de_rx_publish()
805 de->cb.discovery_result( in nan_de_rx_publish()
806 de->cb.ctx, srv->id, srv_proto_type, in nan_de_rx_publish()
848 static void nan_de_rx_subscribe(struct nan_de *de, struct nan_de_service *srv, in nan_de_rx_subscribe() argument
935 nan_de_tx(de, srv->freq, 100, in nan_de_rx_subscribe()
937 de->nmi, wildcard_bssid, buf); in nan_de_rx_subscribe()
942 if (!srv->publish.disable_events && de->cb.replied) in nan_de_rx_subscribe()
943 de->cb.replied(de->cb.ctx, srv->id, peer_addr, instance_id, in nan_de_rx_subscribe()
948 static void nan_de_rx_follow_up(struct nan_de *de, struct nan_de_service *srv, in nan_de_rx_follow_up() argument
970 if (de->cb.receive) in nan_de_rx_follow_up()
971 de->cb.receive(de->cb.ctx, srv->id, instance_id, ssi, ssi_len, in nan_de_rx_follow_up()
976 static void nan_de_rx_sda(struct nan_de *de, const u8 *peer_addr, in nan_de_rx_sda() argument
1066 struct nan_de_service *srv = de->service[i]; in nan_de_rx_sda()
1101 nan_de_rx_publish(de, srv, peer_addr, instance_id, in nan_de_rx_sda()
1107 nan_de_rx_subscribe(de, srv, peer_addr, instance_id, in nan_de_rx_sda()
1114 nan_de_rx_follow_up(de, srv, peer_addr, instance_id, in nan_de_rx_sda()
1122 void nan_de_rx_sdf(struct nan_de *de, const u8 *peer_addr, unsigned int freq, in nan_de_rx_sdf() argument
1129 if (!de->num_service) in nan_de_rx_sdf()
1145 nan_de_rx_sda(de, peer_addr, freq, buf, len, sda, sda_len); in nan_de_rx_sdf()
1150 static int nan_de_get_handle(struct nan_de *de) in nan_de_get_handle() argument
1152 int i = de->next_handle; in nan_de_get_handle()
1154 if (de->num_service >= NAN_DE_MAX_SERVICE) in nan_de_get_handle()
1158 if (!de->service[i]) { in nan_de_get_handle()
1159 de->next_handle = (i + 1) % NAN_DE_MAX_SERVICE; in nan_de_get_handle()
1163 } while (i != de->next_handle); in nan_de_get_handle()
1199 int nan_de_publish(struct nan_de *de, const char *service_name, in nan_de_publish() argument
1218 publish_id = nan_de_get_handle(de); in nan_de_publish()
1264 nan_de_add_srv(de, srv); in nan_de_publish()
1265 nan_de_run_timer(de); in nan_de_publish()
1273 void nan_de_cancel_publish(struct nan_de *de, int publish_id) in nan_de_cancel_publish() argument
1281 srv = de->service[publish_id - 1]; in nan_de_cancel_publish()
1284 nan_de_del_srv(de, srv, NAN_DE_REASON_USER_REQUEST); in nan_de_cancel_publish()
1288 int nan_de_update_publish(struct nan_de *de, int publish_id, in nan_de_update_publish() argument
1297 srv = de->service[publish_id - 1]; in nan_de_update_publish()
1312 int nan_de_subscribe(struct nan_de *de, const char *service_name, in nan_de_subscribe() argument
1325 subscribe_id = nan_de_get_handle(de); in nan_de_subscribe()
1355 nan_de_add_srv(de, srv); in nan_de_subscribe()
1356 nan_de_run_timer(de); in nan_de_subscribe()
1364 void nan_de_cancel_subscribe(struct nan_de *de, int subscribe_id) in nan_de_cancel_subscribe() argument
1370 srv = de->service[subscribe_id - 1]; in nan_de_cancel_subscribe()
1373 nan_de_del_srv(de, srv, NAN_DE_REASON_USER_REQUEST); in nan_de_cancel_subscribe()
1377 int nan_de_transmit(struct nan_de *de, int handle, in nan_de_transmit() argument
1386 srv = de->service[handle - 1]; in nan_de_transmit()
1390 nan_de_tx_sdf(de, srv, 100, NAN_SRV_CTRL_FOLLOW_UP, in nan_de_transmit()