diff --git a/subsys/net/lib/ptp/msg.c b/subsys/net/lib/ptp/msg.c index c26ee175f1d..a46d30be4aa 100644 --- a/subsys/net/lib/ptp/msg.c +++ b/subsys/net/lib/ptp/msg.c @@ -284,13 +284,12 @@ struct ptp_msg *ptp_msg_from_pkt(struct net_pkt *pkt) hdr = net_udp_get_hdr(pkt, NULL); } - payload = ntohs(hdr->len) - NET_UDPH_LEN; - if (!hdr) { LOG_ERR("Couldn't retrieve UDP header from the net packet"); return NULL; } + payload = ntohs(hdr->len) - NET_UDPH_LEN; port = ntohs(hdr->dst_port); if (port != PTP_SOCKET_PORT_EVENT && port != PTP_SOCKET_PORT_GENERAL) { diff --git a/subsys/net/lib/ptp/port.c b/subsys/net/lib/ptp/port.c index f92186628e5..1c6750a918c 100644 --- a/subsys/net/lib/ptp/port.c +++ b/subsys/net/lib/ptp/port.c @@ -88,8 +88,9 @@ static int port_msg_send(struct ptp_port *port, struct ptp_msg *msg, enum ptp_so static void port_timer_set_timeout(struct k_timer *timer, uint8_t factor, int8_t log_seconds) { - uint64_t timeout = log_seconds < 0 ? (NSEC_PER_SEC * factor) >> (log_seconds * -1) : - (NSEC_PER_SEC * factor) << log_seconds; + uint64_t timeout = log_seconds < 0 ? + (uint64_t)((NSEC_PER_SEC * factor) >> (log_seconds * -1)) : + (uint64_t)((NSEC_PER_SEC * factor) << log_seconds); k_timer_start(timer, K_NSEC(timeout), K_NO_WAIT); } @@ -102,14 +103,14 @@ static void port_timer_set_timeout_random(struct k_timer *timer, uint64_t timeout, random_ns; if (log_seconds < 0) { - timeout = (NSEC_PER_SEC * min_factor) >> -log_seconds; - random_ns = NSEC_PER_SEC >> -log_seconds; + timeout = (uint64_t)((NSEC_PER_SEC * min_factor) >> -log_seconds); + random_ns = (uint64_t)(NSEC_PER_SEC >> -log_seconds); } else { - timeout = (NSEC_PER_SEC * min_factor) << log_seconds; - random_ns = (span * NSEC_PER_SEC) << log_seconds; + timeout = (uint64_t)((NSEC_PER_SEC * min_factor) << log_seconds); + random_ns = (uint64_t)((span * NSEC_PER_SEC) << log_seconds); } - timeout = timeout + (random_ns * (sys_rand32_get() % (1 << 15) + 1) >> 15); + timeout = (uint64_t)(timeout + (random_ns * (sys_rand32_get() % (1 << 15) + 1) >> 15)); k_timer_start(timer, K_NSEC(timeout), K_NO_WAIT); } @@ -970,14 +971,14 @@ static void port_link_monitor(struct net_mgmt_event_callback *cb, enum ptp_port_event event = PTP_EVT_NONE; struct ptp_port *port = ptp_clock_port_from_iface(iface); - int iface_state = mgmt_event == NET_EVENT_IF_UP ? PORT_LINK_UP : PORT_LINK_DOWN; + uint8_t iface_state = mgmt_event == NET_EVENT_IF_UP ? PORT_LINK_UP : PORT_LINK_DOWN; if (!port) { return; } if (iface_state & port->link_status) { - port->link_status = port->link_status; + port->link_status = iface_state; } else { port->link_status = iface_state | PORT_LINK_CHANGED; LOG_DBG("Port %d link %s", @@ -1014,7 +1015,7 @@ void ptp_port_init(struct net_if *iface, void *user_data) return; } - port = ports + dds->n_ports; + port = &ports[dds->n_ports]; port->iface = iface; port->best = NULL; @@ -1360,8 +1361,9 @@ int ptp_port_add_foreign_tt(struct ptp_port *port, struct ptp_msg *msg) port->port_ds.id.port_number, port_id_str(&msg->header.src_port_id)); - k_mem_slab_alloc(&foreign_tts_slab, (void **)&foreign, K_NO_WAIT); - if (!foreign) { + int ret = k_mem_slab_alloc(&foreign_tts_slab, (void **)&foreign, K_NO_WAIT); + + if (ret) { LOG_ERR("Couldn't allocate memory for new foreign timeTransmitter"); return 0; } diff --git a/subsys/net/lib/ptp/tlv.c b/subsys/net/lib/ptp/tlv.c index 70285915b89..22bec57fd0b 100644 --- a/subsys/net/lib/ptp/tlv.c +++ b/subsys/net/lib/ptp/tlv.c @@ -51,7 +51,7 @@ static int tlv_mgmt_post_recv(struct ptp_tlv_mgmt *mgmt_tlv, uint16_t length) enum ptp_mgmt_id id = (enum ptp_mgmt_id)mgmt_tlv->id; struct ptp_tlv_container *container; uint8_t *data; - uint16_t data_length; + int32_t data_length; switch (id) { case PTP_MGMT_NULL_PTP_MANAGEMENT: diff --git a/subsys/net/lib/ptp/transport.c b/subsys/net/lib/ptp/transport.c index 64d396e4c69..3543a1faf32 100644 --- a/subsys/net/lib/ptp/transport.c +++ b/subsys/net/lib/ptp/transport.c @@ -127,7 +127,7 @@ static int transport_udp_ipv4_open(struct net_if *iface, uint16_t port) } tos &= ~0xFC; - tos = CONFIG_PTP_DSCP_VALUE << 2; + tos |= CONFIG_PTP_DSCP_VALUE << 2; length = sizeof(tos); if (zsock_setsockopt(socket, IPPROTO_IP, IP_TOS, &tos, length)) { @@ -175,7 +175,7 @@ static int transport_udp_ipv6_open(struct net_if *iface, uint16_t port) } tclass &= ~0xFC; - tclass = CONFIG_PTP_DSCP_VALUE << 2; + tclass |= CONFIG_PTP_DSCP_VALUE << 2; length = sizeof(tclass); if (zsock_setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, &tclass, length)) { @@ -318,6 +318,8 @@ int ptp_transport_recv(struct ptp_port *port, struct ptp_msg *msg, enum ptp_sock int ptp_transport_protocol_addr(struct ptp_port *port, uint8_t *addr) { + __ASSERT_NO_MSG(addr); + int length = 0; if (IS_ENABLED(CONFIG_PTP_UDP_IPv4_PROTOCOL)) {