Commit ac3cb9da authored by Jukka Rissanen's avatar Jukka Rissanen Committed by Benjamin Cabé
Browse files

net: Change the net_linkaddr struct to not use pointers



Previously the net_linkaddr struct had pointers to the link address.
This is error prone and difficult to handle if cloning the packet as
those pointers can point to wrong place. Mitigate this issue by
allocating the space for link address in net_linkaddr struct. This will
increase the size of the net_pkt by 4 octets for IEEE 802.15.4 where the
link address length is 8, but there no increase in size if link address
is 6 bytes like in Ethernet/Wi-Fi.

Signed-off-by: default avatarJukka Rissanen <jukka.rissanen@nordicsemi.no>
parent fedd815c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -938,8 +938,8 @@ struct net_pkt *dsa_ksz8xxx_xmit_pkt(struct net_if *iface, struct net_pkt *pkt)
	struct net_buf *buf;
	size_t len, pad = 0;

	lladst.len = sizeof(hdr->dst.addr);
	lladst.addr = &hdr->dst.addr[0];
	(void)net_linkaddr_create(&lladst, hdr->dst.addr, sizeof(hdr->dst.addr),
				  NET_LINK_ETHERNET);

	len = net_pkt_get_len(pkt);
	/*
+2 −2
Original line number Diff line number Diff line
@@ -202,8 +202,8 @@ static int eth_send(const struct device *dev, struct net_pkt *pkt)

static struct net_linkaddr *eth_get_mac(struct eth_context *ctx)
{
	ctx->ll_addr.addr = ctx->mac_addr;
	ctx->ll_addr.len = sizeof(ctx->mac_addr);
	(void)net_linkaddr_set(&ctx->ll_addr, ctx->mac_addr,
			       sizeof(ctx->mac_addr));

	return &ctx->ll_addr;
}
+1 −2
Original line number Diff line number Diff line
@@ -976,8 +976,7 @@ static int ppp_driver_init(const struct device *dev)

static inline struct net_linkaddr *ppp_get_mac(struct ppp_driver_context *ppp)
{
	ppp->ll_addr.addr = ppp->mac_addr;
	ppp->ll_addr.len = sizeof(ppp->mac_addr);
	(void)net_linkaddr_set(&ppp->ll_addr, ppp->mac_addr, sizeof(ppp->mac_addr));

	return &ppp->ll_addr;
}
+2 −2
Original line number Diff line number Diff line
@@ -366,8 +366,8 @@ int slip_init(const struct device *dev)

static inline struct net_linkaddr *slip_get_mac(struct slip_context *slip)
{
	slip->ll_addr.addr = slip->mac_addr;
	slip->ll_addr.len = sizeof(slip->mac_addr);
	(void)net_linkaddr_set(&slip->ll_addr, slip->mac_addr,
			       sizeof(slip->mac_addr));

	return &slip->ll_addr;
}
+1 −1
Original line number Diff line number Diff line
@@ -296,7 +296,7 @@ struct ieee802154_context {
	uint8_t ext_addr[IEEE802154_MAX_ADDR_LENGTH];

	/** Link layer address (in big endian) */
	struct net_linkaddr_storage linkaddr;
	struct net_linkaddr linkaddr;

#ifdef CONFIG_NET_L2_IEEE802154_SECURITY
	/** Security context */
Loading