From 487f6e480fe986cf2e3742b73fb93937a6c72551 Mon Sep 17 00:00:00 2001 From: Oleg Hahm <oleg@hobbykeller.org> Date: Sun, 20 Mar 2016 23:07:39 +0100 Subject: [PATCH] gnrc udp: simplify gnrc_udp_hdr_build Directly using 16 bit port numbers instead of casting uint8_t pointers. --- examples/gnrc_networking/udp.c | 13 +++++-------- sys/include/net/gnrc/udp.h | 7 ++----- sys/net/gnrc/application_layer/tftp/gnrc_tftp.c | 3 +-- sys/net/gnrc/application_layer/zep/gnrc_zep.c | 3 +-- sys/net/gnrc/conn/udp/gnrc_conn_udp.c | 3 +-- sys/net/gnrc/netreg/gnrc_netreg.c | 12 ++++++++++-- sys/net/gnrc/transport_layer/udp/gnrc_udp.c | 14 ++++---------- 7 files changed, 24 insertions(+), 31 deletions(-) diff --git a/examples/gnrc_networking/udp.c b/examples/gnrc_networking/udp.c index 9d9758a6f1..d7917ceb85 100644 --- a/examples/gnrc_networking/udp.c +++ b/examples/gnrc_networking/udp.c @@ -34,8 +34,7 @@ static gnrc_netreg_entry_t server = { NULL, GNRC_NETREG_DEMUX_CTX_ALL, KERNEL_PI static void send(char *addr_str, char *port_str, char *data, unsigned int num, unsigned int delay) { - uint8_t port[2]; - uint16_t tmp; + uint16_t port; ipv6_addr_t addr; /* parse destination address */ @@ -44,13 +43,11 @@ static void send(char *addr_str, char *port_str, char *data, unsigned int num, return; } /* parse port */ - tmp = (uint16_t)atoi(port_str); - if (tmp == 0) { + port = (uint16_t)atoi(port_str); + if (port == 0) { puts("Error: unable to parse destination port"); return; } - port[0] = (uint8_t)tmp; - port[1] = tmp >> 8; for (unsigned int i = 0; i < num; i++) { gnrc_pktsnip_t *payload, *udp, *ip; @@ -61,7 +58,7 @@ static void send(char *addr_str, char *port_str, char *data, unsigned int num, return; } /* allocate UDP header, set source port := destination port */ - udp = gnrc_udp_hdr_build(payload, port, 2, port, 2); + udp = gnrc_udp_hdr_build(payload, port, port); if (udp == NULL) { puts("Error: unable to allocate UDP header"); gnrc_pktbuf_release(payload); @@ -81,7 +78,7 @@ static void send(char *addr_str, char *port_str, char *data, unsigned int num, return; } printf("Success: send %u byte to [%s]:%u\n", (unsigned)payload->size, - addr_str, tmp); + addr_str, port); xtimer_usleep(delay); } } diff --git a/sys/include/net/gnrc/udp.h b/sys/include/net/gnrc/udp.h index e92b06e42a..cc8b921fb0 100644 --- a/sys/include/net/gnrc/udp.h +++ b/sys/include/net/gnrc/udp.h @@ -71,17 +71,14 @@ int gnrc_udp_calc_csum(gnrc_pktsnip_t *hdr, gnrc_pktsnip_t *pseudo_hdr); * * @param[in] payload Payload contained in the UDP packet * @param[in] src Source port in host byte order - * @param[in] src_len Length of @p src, must be 2 * @param[in] dst Destination port in host byte order - * @param[in] dst_len Length of @p dst, must be 2 * * @return pointer to the newly created (and allocated) header * @return NULL on `src == NULL`, `dst == NULL`, `src_len != 2`, `dst_len != 2` * or on allocation error */ -gnrc_pktsnip_t *gnrc_udp_hdr_build(gnrc_pktsnip_t *payload, - uint8_t *src, size_t src_len, - uint8_t *dst, size_t dst_len); +gnrc_pktsnip_t *gnrc_udp_hdr_build(gnrc_pktsnip_t *payload, uint16_t src, + uint16_t dst); /** * @brief Initialize and start UDP diff --git a/sys/net/gnrc/application_layer/tftp/gnrc_tftp.c b/sys/net/gnrc/application_layer/tftp/gnrc_tftp.c index 2ef73cf141..d10b61fe91 100644 --- a/sys/net/gnrc/application_layer/tftp/gnrc_tftp.c +++ b/sys/net/gnrc/application_layer/tftp/gnrc_tftp.c @@ -958,8 +958,7 @@ tftp_state _tftp_send(gnrc_pktsnip_t *buf, tftp_context_t *ctxt, size_t len) /* allocate UDP header, set source port := destination port */ src_port.u16 = ctxt->src_port; dst_port.u16 = ctxt->dst_port; - udp = gnrc_udp_hdr_build(buf, src_port.u8, sizeof(src_port), - dst_port.u8, sizeof(dst_port)); + udp = gnrc_udp_hdr_build(buf, src_port.u16, dst_port.u16); if (udp == NULL) { DEBUG("tftp: error unable to allocate UDP header"); gnrc_pktbuf_release(buf); diff --git a/sys/net/gnrc/application_layer/zep/gnrc_zep.c b/sys/net/gnrc/application_layer/zep/gnrc_zep.c index 8faf8f1d58..a63f36df11 100644 --- a/sys/net/gnrc/application_layer/zep/gnrc_zep.c +++ b/sys/net/gnrc/application_layer/zep/gnrc_zep.c @@ -230,8 +230,7 @@ static int _send(gnrc_netdev_t *netdev, gnrc_pktsnip_t *pkt) zep = new_pkt->data; - hdr = gnrc_udp_hdr_build(new_pkt, (uint8_t *)(&(dev->src_port)), sizeof(uint16_t), - (uint8_t *)(&(dev->dst_port)), sizeof(uint16_t)); + hdr = gnrc_udp_hdr_build(new_pkt, dev->src_port, dev->dst_port); if (hdr == NULL) { DEBUG("zep: could not allocate UDP header in pktbuf\n"); diff --git a/sys/net/gnrc/conn/udp/gnrc_conn_udp.c b/sys/net/gnrc/conn/udp/gnrc_conn_udp.c index fe6720e815..e2bee3db13 100644 --- a/sys/net/gnrc/conn/udp/gnrc_conn_udp.c +++ b/sys/net/gnrc/conn/udp/gnrc_conn_udp.c @@ -96,8 +96,7 @@ int conn_udp_sendto(const void *data, size_t len, const void *src, size_t src_le gnrc_pktsnip_t *pkt, *hdr = NULL; pkt = gnrc_pktbuf_add(NULL, (void *)data, len, GNRC_NETTYPE_UNDEF); /* data will only be copied */ - hdr = gnrc_udp_hdr_build(pkt, (uint8_t *)&sport, sizeof(uint16_t), (uint8_t *)&dport, - sizeof(uint16_t)); + hdr = gnrc_udp_hdr_build(pkt, sport, dport); if (hdr == NULL) { gnrc_pktbuf_release(pkt); return -ENOMEM; diff --git a/sys/net/gnrc/netreg/gnrc_netreg.c b/sys/net/gnrc/netreg/gnrc_netreg.c index b0eaadbed7..cfc88763ca 100644 --- a/sys/net/gnrc/netreg/gnrc_netreg.c +++ b/sys/net/gnrc/netreg/gnrc_netreg.c @@ -148,12 +148,20 @@ gnrc_pktsnip_t *gnrc_netreg_hdr_build(gnrc_nettype_t type, gnrc_pktsnip_t *paylo #ifdef MODULE_GNRC_TCP case GNRC_NETTYPE_TCP: - return gnrc_tcp_hdr_build(payload, src, src_len, dst, dst_len); + { + uint16_t src_port = *((uint16_t *)src); + uint16_t dst_port = *((uint16_t *)dst); + return gnrc_tcp_hdr_build(payload, src_port, dst_port); + } #endif #ifdef MODULE_GNRC_UDP case GNRC_NETTYPE_UDP: - return gnrc_udp_hdr_build(payload, src, src_len, dst, dst_len); + { + uint16_t src_port = *((uint16_t *)src); + uint16_t dst_port = *((uint16_t *)dst); + return gnrc_udp_hdr_build(payload, src_port, dst_port); + } #endif default: diff --git a/sys/net/gnrc/transport_layer/udp/gnrc_udp.c b/sys/net/gnrc/transport_layer/udp/gnrc_udp.c index fad3fcddfb..9eaddf75cf 100644 --- a/sys/net/gnrc/transport_layer/udp/gnrc_udp.c +++ b/sys/net/gnrc/transport_layer/udp/gnrc_udp.c @@ -271,18 +271,12 @@ int gnrc_udp_calc_csum(gnrc_pktsnip_t *hdr, gnrc_pktsnip_t *pseudo_hdr) return 0; } -gnrc_pktsnip_t *gnrc_udp_hdr_build(gnrc_pktsnip_t *payload, - uint8_t *src, size_t src_len, - uint8_t *dst, size_t dst_len) +gnrc_pktsnip_t *gnrc_udp_hdr_build(gnrc_pktsnip_t *payload, uint16_t src, + uint16_t dst) { gnrc_pktsnip_t *res; udp_hdr_t *hdr; - /* check parameters */ - if (src == NULL || dst == NULL || - src_len != sizeof(uint16_t) || dst_len != sizeof(uint16_t)) { - return NULL; - } /* allocate header */ res = gnrc_pktbuf_add(payload, NULL, sizeof(udp_hdr_t), GNRC_NETTYPE_UDP); if (res == NULL) { @@ -290,8 +284,8 @@ gnrc_pktsnip_t *gnrc_udp_hdr_build(gnrc_pktsnip_t *payload, } /* initialize header */ hdr = (udp_hdr_t *)res->data; - hdr->src_port = byteorder_htons(*((uint16_t *)src)); - hdr->dst_port = byteorder_htons(*((uint16_t *)dst)); + hdr->src_port = byteorder_htons(src); + hdr->dst_port = byteorder_htons(dst); hdr->checksum = byteorder_htons(0); return res; } -- GitLab