Lines Matching refs:msg

82 static int port_msg_send(struct ptp_port *port, struct ptp_msg *msg, enum ptp_socket idx)  in port_msg_send()  argument
84 ptp_msg_pre_send(msg); in port_msg_send()
86 return ptp_transport_send(port, msg, idx); in port_msg_send()
158 struct ptp_msg *req, *msg = ptp_msg_from_pkt(pkt); in port_delay_req_timestamp_cb() local
161 if (!port || !msg) { in port_delay_req_timestamp_cb()
165 msg->header.src_port_id.port_number = ntohs(msg->header.src_port_id.port_number); in port_delay_req_timestamp_cb()
167 if (!ptp_port_id_eq(&port->port_ds.id, &msg->header.src_port_id) || in port_delay_req_timestamp_cb()
168 ptp_msg_type(msg) != PTP_MSG_DELAY_REQ) { in port_delay_req_timestamp_cb()
178 if (req->header.sequence_id != msg->header.sequence_id) { in port_delay_req_timestamp_cb()
196 ntohs(msg->header.sequence_id)); in port_delay_req_timestamp_cb()
207 struct ptp_msg *msg = ptp_msg_from_pkt(pkt); in port_sync_timestamp_cb() local
209 if (!port || !msg) { in port_sync_timestamp_cb()
213 msg->header.src_port_id.port_number = ntohs(msg->header.src_port_id.port_number); in port_sync_timestamp_cb()
215 if (ptp_port_id_eq(&port->port_ds.id, &msg->header.src_port_id) && in port_sync_timestamp_cb()
216 ptp_msg_type(msg) == PTP_MSG_SYNC) { in port_sync_timestamp_cb()
254 struct ptp_msg *msg = ptp_msg_alloc(); in port_announce_msg_transmit() local
257 if (!msg) { in port_announce_msg_transmit()
261 msg->header.type_major_sdo_id = PTP_MSG_ANNOUNCE; in port_announce_msg_transmit()
262 msg->header.version = PTP_VERSION; in port_announce_msg_transmit()
263 msg->header.msg_length = sizeof(struct ptp_announce_msg); in port_announce_msg_transmit()
264 msg->header.domain_number = dds->domain; in port_announce_msg_transmit()
265 msg->header.flags[1] = tpds->flags; in port_announce_msg_transmit()
266 msg->header.src_port_id = port->port_ds.id; in port_announce_msg_transmit()
267 msg->header.sequence_id = port->seq_id.announce++; in port_announce_msg_transmit()
268 msg->header.log_msg_interval = port->port_ds.log_sync_interval; in port_announce_msg_transmit()
270 msg->announce.current_utc_offset = tpds->current_utc_offset; in port_announce_msg_transmit()
271 msg->announce.gm_priority1 = pds->gm_priority1; in port_announce_msg_transmit()
272 msg->announce.gm_clk_quality = pds->gm_clk_quality; in port_announce_msg_transmit()
273 msg->announce.gm_priority2 = pds->gm_priority2; in port_announce_msg_transmit()
274 msg->announce.gm_id = pds->gm_id; in port_announce_msg_transmit()
275 msg->announce.steps_rm = cds->steps_rm; in port_announce_msg_transmit()
276 msg->announce.time_src = tpds->time_src; in port_announce_msg_transmit()
278 ret = port_msg_send(port, msg, PTP_SOCKET_GENERAL); in port_announce_msg_transmit()
279 ptp_msg_unref(msg); in port_announce_msg_transmit()
292 struct ptp_msg *msg = ptp_msg_alloc(); in port_delay_req_msg_transmit() local
295 if (!msg) { in port_delay_req_msg_transmit()
299 msg->header.type_major_sdo_id = PTP_MSG_DELAY_REQ; in port_delay_req_msg_transmit()
300 msg->header.version = PTP_VERSION; in port_delay_req_msg_transmit()
301 msg->header.msg_length = sizeof(struct ptp_delay_req_msg); in port_delay_req_msg_transmit()
302 msg->header.domain_number = dds->domain; in port_delay_req_msg_transmit()
303 msg->header.src_port_id = port->port_ds.id; in port_delay_req_msg_transmit()
304 msg->header.sequence_id = port->seq_id.delay++; in port_delay_req_msg_transmit()
305 msg->header.log_msg_interval = DEFAULT_LOG_MSG_INTERVAL; in port_delay_req_msg_transmit()
312 sys_slist_append(&port->delay_req_list, &msg->node); in port_delay_req_msg_transmit()
313 ret = port_msg_send(port, msg, PTP_SOCKET_EVENT); in port_delay_req_msg_transmit()
315 sys_slist_find_and_remove(&port->delay_req_list, &msg->node); in port_delay_req_msg_transmit()
316 ptp_msg_unref(msg); in port_delay_req_msg_transmit()
328 struct ptp_msg *msg = ptp_msg_alloc(); in port_sync_msg_transmit() local
331 if (!msg) { in port_sync_msg_transmit()
335 msg->header.type_major_sdo_id = PTP_MSG_SYNC; in port_sync_msg_transmit()
336 msg->header.version = PTP_VERSION; in port_sync_msg_transmit()
337 msg->header.msg_length = sizeof(struct ptp_sync_msg); in port_sync_msg_transmit()
338 msg->header.domain_number = dds->domain; in port_sync_msg_transmit()
339 msg->header.flags[0] = PTP_MSG_TWO_STEP_FLAG; in port_sync_msg_transmit()
340 msg->header.flags[1] = tpds->flags; in port_sync_msg_transmit()
341 msg->header.src_port_id = port->port_ds.id; in port_sync_msg_transmit()
342 msg->header.sequence_id = port->seq_id.sync; in port_sync_msg_transmit()
343 msg->header.log_msg_interval = port->port_ds.log_sync_interval; in port_sync_msg_transmit()
350 ret = port_msg_send(port, msg, PTP_SOCKET_EVENT); in port_sync_msg_transmit()
351 ptp_msg_unref(msg); in port_sync_msg_transmit()
385 struct ptp_msg *msg; in foreign_clock_cleanup() local
389 msg = (struct ptp_msg *)k_fifo_get(&foreign->messages, K_NO_WAIT); in foreign_clock_cleanup()
390 ptp_msg_unref(msg); in foreign_clock_cleanup()
398 msg = (struct ptp_msg *)k_fifo_peek_head(&foreign->messages); in foreign_clock_cleanup()
400 if (msg->header.log_msg_interval <= -31) { in foreign_clock_cleanup()
402 } else if (msg->header.log_msg_interval >= 31) { in foreign_clock_cleanup()
404 } else if (msg->header.log_msg_interval > 0) { in foreign_clock_cleanup()
406 (1 << msg->header.log_msg_interval) * NSEC_PER_SEC; in foreign_clock_cleanup()
409 (1 << (-msg->header.log_msg_interval)); in foreign_clock_cleanup()
412 timestamp = msg->timestamp.host.second * NSEC_PER_SEC + in foreign_clock_cleanup()
413 msg->timestamp.host.nanosecond; in foreign_clock_cleanup()
420 msg = (struct ptp_msg *)k_fifo_get(&foreign->messages, K_NO_WAIT); in foreign_clock_cleanup()
421 ptp_msg_unref(msg); in foreign_clock_cleanup()
428 struct ptp_msg *msg; in port_clear_foreign_clock_records() local
431 msg = (struct ptp_msg *)k_fifo_get(&foreign->messages, K_NO_WAIT); in port_clear_foreign_clock_records()
432 ptp_msg_unref(msg); in port_clear_foreign_clock_records()
440 struct ptp_msg *msg; in port_delay_req_cleanup() local
443 SYS_SLIST_FOR_EACH_CONTAINER(&port->delay_req_list, msg, node) { in port_delay_req_cleanup()
444 timestamp = msg->timestamp.host.second * NSEC_PER_SEC + in port_delay_req_cleanup()
445 msg->timestamp.host.nanosecond; in port_delay_req_cleanup()
451 ptp_msg_unref(msg); in port_delay_req_cleanup()
452 sys_slist_remove(&port->delay_req_list, prev, &msg->node); in port_delay_req_cleanup()
453 prev = &msg->node; in port_delay_req_cleanup()
460 struct ptp_msg *msg; in port_clear_delay_req() local
462 SYS_SLIST_FOR_EACH_CONTAINER(&port->delay_req_list, msg, node) { in port_clear_delay_req()
463 ptp_msg_unref(msg); in port_clear_delay_req()
464 sys_slist_remove(&port->delay_req_list, prev, &msg->node); in port_clear_delay_req()
465 prev = &msg->node; in port_clear_delay_req()
469 static void port_sync_fup_ooo_handle(struct ptp_port *port, struct ptp_msg *msg) in port_sync_fup_ooo_handle() argument
473 if (ptp_msg_type(msg) != PTP_MSG_FOLLOW_UP && in port_sync_fup_ooo_handle()
474 ptp_msg_type(msg) != PTP_MSG_SYNC) { in port_sync_fup_ooo_handle()
479 port->last_sync_fup = msg; in port_sync_fup_ooo_handle()
480 ptp_msg_ref(msg); in port_sync_fup_ooo_handle()
485 ptp_msg_type(msg) == PTP_MSG_FOLLOW_UP && in port_sync_fup_ooo_handle()
486 msg->header.sequence_id == last->header.sequence_id) { in port_sync_fup_ooo_handle()
490 msg->timestamp.protocol, in port_sync_fup_ooo_handle()
492 msg->header.correction); in port_sync_fup_ooo_handle()
497 ptp_msg_type(msg) == PTP_MSG_SYNC && in port_sync_fup_ooo_handle()
498 msg->header.sequence_id == last->header.sequence_id) { in port_sync_fup_ooo_handle()
501 msg->timestamp.host, in port_sync_fup_ooo_handle()
503 msg->header.correction, in port_sync_fup_ooo_handle()
510 port->last_sync_fup = msg; in port_sync_fup_ooo_handle()
511 ptp_msg_ref(msg); in port_sync_fup_ooo_handle()
515 static int port_announce_msg_process(struct ptp_port *port, struct ptp_msg *msg) in port_announce_msg_process() argument
520 if (msg->announce.steps_rm >= dds->max_steps_rm) { in port_announce_msg_process()
539 ret = ptp_port_add_foreign_tt(port, msg); in port_announce_msg_process()
549 ret = ptp_port_update_current_time_transmitter(port, msg); in port_announce_msg_process()
558 static void port_sync_msg_process(struct ptp_port *port, struct ptp_msg *msg) in port_sync_msg_process() argument
566 if (!ptp_msg_current_parent(msg)) { in port_sync_msg_process()
570 if (port->port_ds.log_sync_interval != msg->header.log_msg_interval) { in port_sync_msg_process()
571 port->port_ds.log_sync_interval = msg->header.log_msg_interval; in port_sync_msg_process()
574 msg->header.correction += port->port_ds.delay_asymmetry; in port_sync_msg_process()
576 if (!(msg->header.flags[0] & PTP_MSG_TWO_STEP_FLAG)) { in port_sync_msg_process()
578 msg->timestamp.host, in port_sync_msg_process()
579 msg->timestamp.protocol, in port_sync_msg_process()
580 msg->header.correction, in port_sync_msg_process()
591 port_sync_fup_ooo_handle(port, msg); in port_sync_msg_process()
594 static void port_follow_up_msg_process(struct ptp_port *port, struct ptp_msg *msg) in port_follow_up_msg_process() argument
602 if (!ptp_msg_current_parent(msg)) { in port_follow_up_msg_process()
606 port_sync_fup_ooo_handle(port, msg); in port_follow_up_msg_process()
609 static int port_delay_req_msg_process(struct ptp_port *port, struct ptp_msg *msg) in port_delay_req_msg_process() argument
629 resp->header.correction = msg->header.correction; in port_delay_req_msg_process()
631 resp->header.sequence_id = msg->header.sequence_id; in port_delay_req_msg_process()
634 resp->delay_resp.receive_timestamp.seconds_high = msg->timestamp.host._sec.high; in port_delay_req_msg_process()
635 resp->delay_resp.receive_timestamp.seconds_low = msg->timestamp.host._sec.low; in port_delay_req_msg_process()
636 resp->delay_resp.receive_timestamp.nanoseconds = msg->timestamp.host.nanosecond; in port_delay_req_msg_process()
637 resp->delay_resp.req_port_id = msg->header.src_port_id; in port_delay_req_msg_process()
639 if (msg->header.flags[0] & PTP_MSG_UNICAST_FLAG) { in port_delay_req_msg_process()
655 static void port_delay_resp_msg_process(struct ptp_port *port, struct ptp_msg *msg) in port_delay_resp_msg_process() argument
666 if (!ptp_port_id_eq(&msg->delay_resp.req_port_id, &port->port_ds.id)) { in port_delay_resp_msg_process()
672 if (msg->header.sequence_id == ntohs(req->header.sequence_id)) { in port_delay_resp_msg_process()
683 t4 = msg->timestamp.protocol.second * NSEC_PER_SEC + msg->timestamp.protocol.nanosecond; in port_delay_resp_msg_process()
684 t4c = t4 - (msg->header.correction >> 16); in port_delay_resp_msg_process()
691 port->port_ds.log_min_delay_req_interval = msg->header.log_msg_interval; in port_delay_resp_msg_process()
1049 struct ptp_msg *msg; in ptp_port_event_gen() local
1056 msg = ptp_msg_alloc(); in ptp_port_event_gen()
1057 if (!msg) { in ptp_port_event_gen()
1061 cnt = ptp_transport_recv(port, msg, idx); in ptp_port_event_gen()
1064 ptp_msg_unref(msg); in ptp_port_event_gen()
1068 ret = ptp_msg_post_recv(port, msg, cnt); in ptp_port_event_gen()
1070 ptp_msg_unref(msg); in ptp_port_event_gen()
1074 if (ptp_port_id_eq(&msg->header.src_port_id, &port->port_ds.id)) { in ptp_port_event_gen()
1075 ptp_msg_unref(msg); in ptp_port_event_gen()
1079 switch (ptp_msg_type(msg)) { in ptp_port_event_gen()
1081 port_sync_msg_process(port, msg); in ptp_port_event_gen()
1084 if (port_delay_req_msg_process(port, msg)) { in ptp_port_event_gen()
1096 port_follow_up_msg_process(port, msg); in ptp_port_event_gen()
1099 port_delay_resp_msg_process(port, msg); in ptp_port_event_gen()
1102 if (port_announce_msg_process(port, msg)) { in ptp_port_event_gen()
1110 if (ptp_clock_management_msg_process(port, msg)) { in ptp_port_event_gen()
1118 ptp_msg_unref(msg); in ptp_port_event_gen()
1347 int ptp_port_add_foreign_tt(struct ptp_port *port, struct ptp_msg *msg) in ptp_port_add_foreign_tt() argument
1354 if (ptp_port_id_eq(&msg->header.src_port_id, &foreign->dataset.sender)) { in ptp_port_add_foreign_tt()
1362 port_id_str(&msg->header.src_port_id)); in ptp_port_add_foreign_tt()
1373 &msg->header.src_port_id, in ptp_port_add_foreign_tt()
1385 ptp_msg_ref(msg); in ptp_port_add_foreign_tt()
1388 k_fifo_put(&foreign->messages, (void *)msg); in ptp_port_add_foreign_tt()
1392 diff = ptp_msg_announce_cmp(&msg->announce, &last->announce); in ptp_port_add_foreign_tt()
1408 struct ptp_msg *msg = (struct ptp_msg *)k_fifo_get(&foreign->messages, in ptp_port_free_foreign_tts() local
1411 ptp_msg_unref(msg); in ptp_port_free_foreign_tts()
1418 int ptp_port_update_current_time_transmitter(struct ptp_port *port, struct ptp_msg *msg) in ptp_port_update_current_time_transmitter() argument
1423 !ptp_port_id_eq(&msg->header.src_port_id, &foreign->dataset.sender)) { in ptp_port_update_current_time_transmitter()
1424 return ptp_port_add_foreign_tt(port, msg); in ptp_port_update_current_time_transmitter()
1428 ptp_msg_ref(msg); in ptp_port_update_current_time_transmitter()
1430 k_fifo_put(&foreign->messages, (void *)msg); in ptp_port_update_current_time_transmitter()
1441 return ptp_msg_announce_cmp(&msg->announce, &last->announce); in ptp_port_update_current_time_transmitter()
1449 struct ptp_msg *msg, in ptp_port_management_msg_process() argument
1453 uint16_t target_port = msg->management.target_port_id.port_number; in ptp_port_management_msg_process()
1459 if (ptp_mgmt_action(msg) == PTP_MGMT_SET) { in ptp_port_management_msg_process()
1460 ret = port_management_set(port, msg, tlv); in ptp_port_management_msg_process()
1462 ret = ptp_port_management_resp(port, msg, tlv); in ptp_port_management_msg_process()
1468 int ptp_port_management_error(struct ptp_port *port, struct ptp_msg *msg, enum ptp_mgmt_err err) in ptp_port_management_error() argument
1473 struct ptp_tlv_mgmt *mgmt = (struct ptp_tlv_mgmt *)msg->management.suffix; in ptp_port_management_error()
1475 struct ptp_msg *resp = port_management_resp_prepare(port, msg); in ptp_port_management_error()