net/gptp: Switch GPTP to new net_pkt API

Allocation and a minor writing logic needed to be changed.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
Tomasz Bursztyka 2019-01-11 12:35:12 +01:00 committed by Jukka Rissanen
parent 970e234965
commit 44964c735e

View File

@ -143,40 +143,33 @@ out:
#if defined(CONFIG_NET_DEBUG_NET_PKT_ALLOC)
static struct net_pkt *setup_gptp_frame_debug(struct net_if *iface,
size_t extra_header,
const char *caller,
int line)
#define setup_gptp_frame(iface) \
setup_gptp_frame_debug(iface, __func__, __LINE__)
#define setup_gptp_frame(iface, extra_header) \
setup_gptp_frame_debug(iface, extra_header, __func__, __LINE__)
#else
static struct net_pkt *setup_gptp_frame(struct net_if *iface)
static struct net_pkt *setup_gptp_frame(struct net_if *iface,
size_t extra_header)
#endif
{
struct net_pkt *pkt;
struct net_buf *frag;
#if defined(CONFIG_NET_DEBUG_NET_PKT_ALLOC)
pkt = net_pkt_alloc_with_buffer_debug(iface, sizeof(struct gptp_hdr) +
extra_header, AF_UNSPEC, 0,
NET_BUF_TIMEOUT, caller, line);
pkt = net_pkt_get_reserve_tx_debug(NET_BUF_TIMEOUT, caller, line);
#else
pkt = net_pkt_get_reserve_tx(NET_BUF_TIMEOUT);
pkt = net_pkt_alloc_with_buffer(iface, sizeof(struct gptp_hdr) +
extra_header, AF_UNSPEC, 0,
NET_BUF_TIMEOUT);
#endif
if (!pkt) {
return NULL;
}
#if defined(CONFIG_NET_DEBUG_NET_PKT_ALLOC)
frag = net_pkt_get_reserve_tx_data_debug(NET_BUF_TIMEOUT, caller,
line);
#else
frag = net_pkt_get_reserve_tx_data(NET_BUF_TIMEOUT);
#endif
if (!frag) {
net_pkt_unref(pkt);
return NULL;
}
net_pkt_frag_add(pkt, frag);
net_pkt_set_iface(pkt, iface);
net_pkt_set_family(pkt, AF_UNSPEC);
net_buf_add(pkt->buffer, sizeof(struct gptp_hdr) + extra_header);
net_pkt_set_gptp(pkt, true);
net_pkt_lladdr_src(pkt)->addr = (u8_t *)net_if_get_link_addr(iface);
@ -185,8 +178,6 @@ static struct net_pkt *setup_gptp_frame(struct net_if *iface)
net_pkt_lladdr_dst(pkt)->addr = (u8_t *)&gptp_multicast_eth_addr;
net_pkt_lladdr_dst(pkt)->len = sizeof(struct net_eth_addr);
net_buf_add(frag, sizeof(struct gptp_hdr));
return pkt;
}
@ -202,7 +193,7 @@ struct net_pkt *gptp_prepare_sync(int port)
iface = GPTP_PORT_IFACE(port);
NET_ASSERT(iface);
pkt = setup_gptp_frame(iface);
pkt = setup_gptp_frame(iface, sizeof(struct gptp_sync));
if (!pkt) {
NET_DBG("Cannot get gPTP frame");
return NULL;
@ -239,8 +230,6 @@ struct net_pkt *gptp_prepare_sync(int port)
/* PTP configuration. */
(void)memset(&sync->reserved, 0, sizeof(sync->reserved));
net_buf_add(pkt->frags, sizeof(struct gptp_sync));
/* Update sequence number. */
port_ds->sync_seq_id++;
@ -259,7 +248,7 @@ struct net_pkt *gptp_prepare_follow_up(int port, struct net_pkt *sync)
iface = GPTP_PORT_IFACE(port);
NET_ASSERT(iface);
pkt = setup_gptp_frame(iface);
pkt = setup_gptp_frame(iface, sizeof(struct gptp_follow_up));
if (!pkt) {
NET_DBG("Cannot get gPTP frame");
return NULL;
@ -296,8 +285,6 @@ struct net_pkt *gptp_prepare_follow_up(int port, struct net_pkt *sync)
/* PTP configuration will be set by the MDSyncSend state machine. */
net_buf_add(pkt->frags, sizeof(struct gptp_follow_up));
return pkt;
}
@ -313,7 +300,7 @@ struct net_pkt *gptp_prepare_pdelay_req(int port)
iface = GPTP_PORT_IFACE(port);
NET_ASSERT(iface);
pkt = setup_gptp_frame(iface);
pkt = setup_gptp_frame(iface, sizeof(struct gptp_pdelay_req));
if (!pkt) {
NET_DBG("Cannot get gPTP frame");
return NULL;
@ -353,8 +340,6 @@ struct net_pkt *gptp_prepare_pdelay_req(int port)
(void)memset(&req->reserved1, 0, sizeof(req->reserved1));
(void)memset(&req->reserved2, 0, sizeof(req->reserved2));
net_buf_add(pkt->frags, sizeof(struct gptp_pdelay_req));
/* Update sequence number. */
port_ds->pdelay_req_seq_id++;
@ -371,7 +356,7 @@ struct net_pkt *gptp_prepare_pdelay_resp(int port,
struct gptp_port_ds *port_ds;
struct net_pkt *pkt;
pkt = setup_gptp_frame(iface);
pkt = setup_gptp_frame(iface, sizeof(struct gptp_pdelay_resp));
if (!pkt) {
NET_DBG("Cannot get gPTP frame");
return NULL;
@ -419,8 +404,6 @@ struct net_pkt *gptp_prepare_pdelay_resp(int port,
memcpy(&pdelay_resp->requesting_port_id,
&query->port_id, sizeof(struct gptp_port_identity));
net_buf_add(pkt->frags, sizeof(struct gptp_pdelay_resp));
return pkt;
}
@ -434,7 +417,8 @@ struct net_pkt *gptp_prepare_pdelay_follow_up(int port,
struct gptp_port_ds *port_ds;
struct net_pkt *pkt;
pkt = setup_gptp_frame(iface);
pkt = setup_gptp_frame(iface,
sizeof(struct gptp_pdelay_resp_follow_up));
if (!pkt) {
NET_DBG("Cannot get gPTP frame");
return NULL;
@ -483,8 +467,6 @@ struct net_pkt *gptp_prepare_pdelay_follow_up(int port,
&pdelay_resp->requesting_port_id,
sizeof(struct gptp_port_identity));
net_buf_add(pkt->frags, sizeof(struct gptp_pdelay_resp_follow_up));
return pkt;
}
@ -504,7 +486,8 @@ struct net_pkt *gptp_prepare_announce(int port)
iface = GPTP_PORT_IFACE(port);
NET_ASSERT(iface);
pkt = setup_gptp_frame(iface);
pkt = setup_gptp_frame(iface, sizeof(struct gptp_announce) - 8 +
ntohs(global_ds->path_trace.len));
if (!pkt) {
NET_DBG("Cannot get gPTP frame");
return NULL;
@ -582,17 +565,25 @@ struct net_pkt *gptp_prepare_announce(int port)
sizeof(struct gptp_announce) - 8 +
ntohs(global_ds->path_trace.len));
net_buf_add(pkt->frags, sizeof(struct gptp_announce) - 8);
ann->tlv.len = global_ds->path_trace.len;
if (net_pkt_append(pkt, ntohs(global_ds->path_trace.len),
&global_ds->path_trace.path_sequence[0][0],
NET_BUF_TIMEOUT) <
ntohs(global_ds->path_trace.len)) {
net_pkt_cursor_init(pkt);
/* setup_gptp_frame() already added all the length, so let's not
* add up more with net_pkt_skip/write_new(), let's just overwrite
*/
net_pkt_set_overwrite(pkt, true);
if (net_pkt_skip(pkt, sizeof(struct gptp_hdr) +
sizeof(struct gptp_announce) - 8) ||
net_pkt_write_new(pkt,
&global_ds->path_trace.path_sequence[0][0],
ntohs(global_ds->path_trace.len))) {
goto fail;
}
net_pkt_set_overwrite(pkt, false);
return pkt;
fail: