net: Let's use inline function for type checking for net_nbuf
Using macros does not let the compiler verifying about the type we are providing, which usually give an error easier to understand. Also, this will let the compiler deciding how to actually optimize (inline or not) the code. Change-Id: Iba49590b620ef0a1bd0ed5621453524fcfea747c Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
parent
b70a4f501a
commit
b8e3415264
14 changed files with 291 additions and 149 deletions
|
@ -273,7 +273,7 @@ static inline int slip_input_byte(struct slip_context *slip,
|
|||
}
|
||||
net_buf_frag_add(slip->rx, slip->last);
|
||||
|
||||
net_nbuf_ll_reserve(slip->rx) = slip->ll_reserve;
|
||||
net_nbuf_set_ll_reserve(slip->rx, slip->ll_reserve);
|
||||
slip->ptr = net_nbuf_ip_data(slip->rx) - slip->ll_reserve;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,9 @@
|
|||
|
||||
#include <net/net_core.h>
|
||||
#include <net/net_linkaddr.h>
|
||||
#include <net/net_ip.h>
|
||||
#include <net/net_if.h>
|
||||
#include <net/net_context.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -82,35 +85,187 @@ struct net_nbuf {
|
|||
|
||||
/** @cond ignore */
|
||||
|
||||
/* Value returned by nbuf_len() contains length of all the protocol headers,
|
||||
* like IP and UDP, and the length of the user payload.
|
||||
*/
|
||||
#define net_nbuf_len(buf) ((buf)->len)
|
||||
|
||||
/* This returns pointer to start of the protocol IP header */
|
||||
#define net_nbuf_ip_data(buf) ((buf)->frags->data)
|
||||
#define net_nbuf_udp_data(buf) (&(buf)->frags->data[net_nbuf_ip_hdr_len(buf)])
|
||||
#define net_nbuf_tcp_data(buf) (&(buf)->frags->data[net_nbuf_ip_hdr_len(buf)])
|
||||
#define net_nbuf_icmp_data(buf) (&(buf)->frags->data[net_nbuf_ip_hdr_len(buf) +\
|
||||
net_nbuf_ext_len(buf)])
|
||||
/* The interface real ll address */
|
||||
static inline struct net_linkaddr *net_nbuf_ll_if(struct net_buf *buf)
|
||||
{
|
||||
return net_if_get_link_addr(
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->iface);
|
||||
}
|
||||
|
||||
/* These two return only the application data length without
|
||||
* IP and other protocol header length.
|
||||
*/
|
||||
#define net_nbuf_appdata(buf) (((struct net_nbuf *) \
|
||||
net_buf_user_data((buf)))->appdata)
|
||||
#define net_nbuf_appdatalen(buf) (((struct net_nbuf *) \
|
||||
net_buf_user_data((buf)))->appdatalen)
|
||||
#define net_nbuf_reserve(buf) (((struct net_nbuf *) \
|
||||
net_buf_user_data((buf)))->reserve)
|
||||
#define net_nbuf_ll_reserve(buf) (((struct net_nbuf *) \
|
||||
net_buf_user_data((buf)))->ll_reserve)
|
||||
#define net_nbuf_ll(buf) (net_nbuf_ip_data(buf) - net_nbuf_ll_reserve(buf))
|
||||
static inline struct net_context *net_nbuf_context(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->context;
|
||||
}
|
||||
|
||||
#define net_nbuf_ll_src(buf) \
|
||||
(&(((struct net_nbuf *)net_buf_user_data((buf)))->lladdr_src))
|
||||
#define net_nbuf_ll_dst(buf) \
|
||||
(&(((struct net_nbuf *)net_buf_user_data((buf)))->lladdr_dst))
|
||||
static inline void net_nbuf_set_context(struct net_buf *buf,
|
||||
struct net_context *ctx)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->context = ctx;
|
||||
}
|
||||
|
||||
static inline struct net_if *net_nbuf_iface(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->iface;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_iface(struct net_buf *buf, struct net_if *iface)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->iface = iface;
|
||||
}
|
||||
|
||||
static inline enum net_nbuf_type net_nbuf_type(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->type;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_type(struct net_buf *buf, uint8_t type)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->type = type;
|
||||
}
|
||||
|
||||
static inline uint8_t net_nbuf_family(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->family;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_family(struct net_buf *buf, uint8_t family)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->family = family;
|
||||
}
|
||||
|
||||
static inline uint8_t net_nbuf_ip_hdr_len(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *) net_buf_user_data(buf))->ip_hdr_len;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_ip_hdr_len(struct net_buf *buf, uint8_t len)
|
||||
{
|
||||
((struct net_nbuf *) net_buf_user_data(buf))->ip_hdr_len = len;
|
||||
}
|
||||
|
||||
static inline uint8_t net_nbuf_ext_len(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->ext_len;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_ext_len(struct net_buf *buf, uint8_t len)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->ext_len = len;
|
||||
}
|
||||
|
||||
static inline uint8_t net_nbuf_ext_bitmap(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->ext_bitmap;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_ext_bitmap(struct net_buf *buf, uint8_t bm)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->ext_bitmap = bm;
|
||||
}
|
||||
|
||||
static inline uint8_t *net_nbuf_next_hdr(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->next_hdr;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_next_hdr(struct net_buf *buf, uint8_t *hdr)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->next_hdr = hdr;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_NET_IPV6)
|
||||
static inline uint8_t net_nbuf_ext_opt_len(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->ext_opt_len;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_ext_opt_len(struct net_buf *buf, uint8_t len)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->ext_opt_len = len;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline uint16_t net_nbuf_get_len(struct net_buf *buf)
|
||||
{
|
||||
return buf->len;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_len(struct net_buf *buf, uint16_t len)
|
||||
{
|
||||
buf->len = len;
|
||||
}
|
||||
|
||||
static inline uint8_t *net_nbuf_ip_data(struct net_buf *buf)
|
||||
{
|
||||
return buf->frags->data;
|
||||
}
|
||||
|
||||
static inline uint8_t *net_nbuf_udp_data(struct net_buf *buf)
|
||||
{
|
||||
return &buf->frags->data[net_nbuf_ip_hdr_len(buf)];
|
||||
}
|
||||
|
||||
static inline uint8_t *net_nbuf_tcp_data(struct net_buf *buf)
|
||||
{
|
||||
return &buf->frags->data[net_nbuf_ip_hdr_len(buf)];
|
||||
}
|
||||
|
||||
static inline uint8_t *net_nbuf_icmp_data(struct net_buf *buf)
|
||||
{
|
||||
return &buf->frags->data[net_nbuf_ip_hdr_len(buf) +
|
||||
net_nbuf_ext_len(buf)];
|
||||
}
|
||||
|
||||
static inline uint8_t *net_nbuf_appdata(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->appdata;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_appdata(struct net_buf *buf, uint8_t *data)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->appdata = data;
|
||||
}
|
||||
|
||||
static inline uint16_t net_nbuf_appdatalen(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->appdatalen;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_appdatalen(struct net_buf *buf, uint16_t len)
|
||||
{
|
||||
((struct net_nbuf *)net_buf_user_data(buf))->appdatalen = len;
|
||||
}
|
||||
|
||||
static inline uint16_t net_nbuf_reserve(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *)net_buf_user_data(buf))->reserve;
|
||||
}
|
||||
|
||||
static inline uint8_t net_nbuf_ll_reserve(struct net_buf *buf)
|
||||
{
|
||||
return ((struct net_nbuf *) net_buf_user_data(buf))->ll_reserve;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_set_ll_reserve(struct net_buf *buf, uint8_t len)
|
||||
{
|
||||
((struct net_nbuf *) net_buf_user_data(buf))->ll_reserve = len;
|
||||
}
|
||||
|
||||
static inline uint8_t *net_nbuf_ll(struct net_buf *buf)
|
||||
{
|
||||
return net_nbuf_ip_data(buf) - net_nbuf_ll_reserve(buf);
|
||||
}
|
||||
|
||||
static inline struct net_linkaddr *net_nbuf_ll_src(struct net_buf *buf)
|
||||
{
|
||||
return &((struct net_nbuf *)net_buf_user_data(buf))->lladdr_src;
|
||||
}
|
||||
|
||||
static inline struct net_linkaddr *net_nbuf_ll_dst(struct net_buf *buf)
|
||||
{
|
||||
return &((struct net_nbuf *)net_buf_user_data(buf))->lladdr_dst;
|
||||
}
|
||||
|
||||
static inline void net_nbuf_ll_clear(struct net_buf *buf)
|
||||
{
|
||||
|
@ -127,37 +282,18 @@ static inline void net_nbuf_ll_swap(struct net_buf *buf)
|
|||
net_nbuf_ll_dst(buf)->addr = addr;
|
||||
}
|
||||
|
||||
/* The interface real ll address */
|
||||
#define net_nbuf_ll_if(buf) \
|
||||
net_if_get_link_addr(((struct net_nbuf *)net_buf_user_data(buf))->iface)
|
||||
|
||||
#define net_nbuf_context(buf) \
|
||||
(((struct net_nbuf *)net_buf_user_data((buf)))->context)
|
||||
#define net_nbuf_iface(buf) \
|
||||
(((struct net_nbuf *)net_buf_user_data((buf)))->iface)
|
||||
#define net_nbuf_type(ptr) (((struct net_nbuf *)net_buf_user_data((ptr)))->type)
|
||||
#define net_nbuf_family(ptr) (((struct net_nbuf *) \
|
||||
net_buf_user_data((ptr)))->family)
|
||||
#define net_nbuf_ip_hdr_len(buf) (((struct net_nbuf *) \
|
||||
net_buf_user_data((buf)))->ip_hdr_len)
|
||||
#define net_nbuf_ext_len(buf) \
|
||||
(((struct net_nbuf *)net_buf_user_data((buf)))->ext_len)
|
||||
#define net_nbuf_ext_bitmap(buf) \
|
||||
(((struct net_nbuf *)net_buf_user_data((buf)))->ext_bitmap)
|
||||
#define net_nbuf_next_hdr(buf) \
|
||||
(((struct net_nbuf *)net_buf_user_data((buf)))->next_hdr)
|
||||
#define net_nbuf_ext_opt_len(buf) \
|
||||
(((struct net_nbuf *)net_buf_user_data((buf)))->ext_opt_len)
|
||||
|
||||
#define NET_IPV6_BUF(buf) ((struct net_ipv6_hdr *)net_nbuf_ip_data(buf))
|
||||
#define NET_IPV4_BUF(buf) ((struct net_ipv4_hdr *)net_nbuf_ip_data(buf))
|
||||
#define NET_ICMP_BUF(buf) ((struct net_icmp_hdr *)net_nbuf_icmp_data(buf))
|
||||
#define NET_UDP_BUF(buf) ((struct net_udp_hdr *)(net_nbuf_udp_data(buf)))
|
||||
|
||||
#define net_nbuf_set_src_ipv6_addr(buf) \
|
||||
net_if_select_src(net_context_get_if(nbuf_context(buf)), \
|
||||
&NET_IPV6_BUF(buf)->src, \
|
||||
&NET_IPV6_BUF(buf)->dst)
|
||||
static inline void net_nbuf_set_src_ipv6_addr(struct net_buf *buf)
|
||||
{
|
||||
net_if_ipv6_select_src_addr(net_context_get_iface(
|
||||
net_nbuf_context(buf)),
|
||||
&NET_IPV6_BUF(buf)->src);
|
||||
}
|
||||
|
||||
/* @endcond */
|
||||
|
||||
#if defined(CONFIG_NETWORK_IP_STACK_DEBUG_NET_BUF)
|
||||
|
|
|
@ -92,7 +92,7 @@ static inline void setup_ipv4_header(struct net_buf *buf, uint8_t extra_len,
|
|||
NET_IPV4_BUF(buf)->offset[0] = NET_IPV4_BUF(buf)->offset[1] = 0;
|
||||
NET_IPV4_BUF(buf)->id[0] = NET_IPV4_BUF(buf)->id[1] = 0;
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv4_hdr);
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv4_hdr));
|
||||
|
||||
NET_ICMP_BUF(buf)->type = icmp_type;
|
||||
NET_ICMP_BUF(buf)->code = icmp_code;
|
||||
|
@ -165,9 +165,9 @@ int net_icmpv4_send_error(struct net_buf *orig, uint8_t type, uint8_t code)
|
|||
}
|
||||
|
||||
net_buf_frag_add(buf, frag);
|
||||
net_nbuf_family(buf) = AF_INET;
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_set_family(buf, AF_INET);
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
|
||||
setup_ipv4_header(buf, extra_len, net_if_ipv4_get_ttl(iface),
|
||||
type, code);
|
||||
|
|
|
@ -110,7 +110,7 @@ static inline void setup_ipv6_header(struct net_buf *buf, uint8_t extra_len,
|
|||
NET_IPV6_BUF(buf)->nexthdr = IPPROTO_ICMPV6;
|
||||
NET_IPV6_BUF(buf)->hop_limit = hop_limit;
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv6_hdr));
|
||||
|
||||
NET_ICMP_BUF(buf)->type = icmp_type;
|
||||
NET_ICMP_BUF(buf)->code = icmp_code;
|
||||
|
@ -175,10 +175,10 @@ int net_icmpv6_send_error(struct net_buf *orig, uint8_t type, uint8_t code)
|
|||
}
|
||||
|
||||
net_buf_frag_add(buf, frag);
|
||||
net_nbuf_family(buf) = AF_INET6;
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_family(buf, AF_INET6);
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
setup_ipv6_header(buf, extra_len, net_if_ipv6_get_hop_limit(iface),
|
||||
type, code);
|
||||
|
|
|
@ -364,7 +364,7 @@ static enum net_verdict handle_ns_input(struct net_buf *buf)
|
|||
goto drop;
|
||||
}
|
||||
|
||||
net_nbuf_ext_opt_len(buf) = sizeof(struct net_icmpv6_ns_hdr);
|
||||
net_nbuf_set_ext_opt_len(buf, sizeof(struct net_icmpv6_ns_hdr));
|
||||
hdr = NET_ICMPV6_ND_OPT_HDR_BUF(buf);
|
||||
|
||||
/* The parsing gets tricky if the ND struct is split
|
||||
|
@ -398,7 +398,8 @@ static enum net_verdict handle_ns_input(struct net_buf *buf)
|
|||
break;
|
||||
}
|
||||
|
||||
net_nbuf_ext_opt_len(buf) += hdr->len << 3;
|
||||
net_nbuf_set_ext_opt_len(buf, net_nbuf_ext_opt_len(buf) +
|
||||
(hdr->len << 3));
|
||||
}
|
||||
|
||||
ifaddr = net_if_ipv6_addr_lookup_by_iface(net_nbuf_iface(buf),
|
||||
|
@ -479,7 +480,7 @@ send_na:
|
|||
llao_len = get_llao_len(net_nbuf_iface(buf));
|
||||
|
||||
net_nbuf_ll_swap(buf);
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
setup_headers(buf, sizeof(struct net_icmpv6_na_hdr) + llao_len,
|
||||
NET_ICMPV6_NA);
|
||||
|
@ -497,9 +498,9 @@ send_na:
|
|||
NET_ICMP_BUF(buf)->chksum = 0;
|
||||
NET_ICMP_BUF(buf)->chksum = ~net_calc_chksum_icmpv6(buf);
|
||||
|
||||
net_nbuf_len(buf->frags) = NET_IPV6ICMPH_LEN +
|
||||
sizeof(struct net_icmpv6_na_hdr) +
|
||||
llao_len;
|
||||
net_nbuf_set_len(buf->frags, NET_IPV6ICMPH_LEN +
|
||||
sizeof(struct net_icmpv6_na_hdr) +
|
||||
llao_len);
|
||||
|
||||
if (net_send_data(buf) < 0) {
|
||||
goto drop;
|
||||
|
@ -664,7 +665,7 @@ static enum net_verdict handle_na_input(struct net_buf *buf)
|
|||
goto drop;
|
||||
}
|
||||
|
||||
net_nbuf_ext_opt_len(buf) = sizeof(struct net_icmpv6_na_hdr);
|
||||
net_nbuf_set_ext_opt_len(buf, sizeof(struct net_icmpv6_na_hdr));
|
||||
hdr = NET_ICMPV6_ND_OPT_HDR_BUF(buf);
|
||||
|
||||
/* The parsing gets tricky if the ND struct is split
|
||||
|
@ -693,7 +694,8 @@ static enum net_verdict handle_na_input(struct net_buf *buf)
|
|||
break;
|
||||
}
|
||||
|
||||
net_nbuf_ext_opt_len(buf) += hdr->len << 3;
|
||||
net_nbuf_set_ext_opt_len(buf, net_nbuf_ext_opt_len(buf) +
|
||||
(hdr->len << 3));
|
||||
}
|
||||
|
||||
ifaddr = net_if_ipv6_addr_lookup_by_iface(net_nbuf_iface(buf),
|
||||
|
@ -749,10 +751,10 @@ int net_ipv6_send_ns(struct net_if *iface,
|
|||
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_family(buf) = AF_INET6;
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_family(buf, AF_INET6);
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv6_hdr));
|
||||
|
||||
net_nbuf_ll_clear(buf);
|
||||
|
||||
|
@ -867,10 +869,10 @@ int net_ipv6_send_rs(struct net_if *iface)
|
|||
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_family(buf) = AF_INET6;
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_family(buf, AF_INET6);
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv6_hdr));
|
||||
|
||||
net_nbuf_ll_clear(buf);
|
||||
|
||||
|
@ -1188,7 +1190,7 @@ static enum net_verdict handle_ra_input(struct net_buf *buf)
|
|||
ntohl(NET_ICMPV6_RA_BUF(buf)->retrans_timer));
|
||||
}
|
||||
|
||||
net_nbuf_ext_opt_len(buf) = sizeof(struct net_icmpv6_ra_hdr);
|
||||
net_nbuf_set_ext_opt_len(buf, sizeof(struct net_icmpv6_ra_hdr));
|
||||
hdr = NET_ICMPV6_ND_OPT_HDR_BUF(buf);
|
||||
|
||||
/* The parsing gets tricky if the ND struct is split
|
||||
|
@ -1236,7 +1238,8 @@ static enum net_verdict handle_ra_input(struct net_buf *buf)
|
|||
break;
|
||||
}
|
||||
|
||||
net_nbuf_ext_opt_len(buf) += hdr->len << 3;
|
||||
net_nbuf_set_ext_opt_len(buf, net_nbuf_ext_opt_len(buf) +
|
||||
(hdr->len << 3));
|
||||
}
|
||||
|
||||
router = net_if_ipv6_router_lookup(net_nbuf_iface(buf),
|
||||
|
|
|
@ -127,9 +127,9 @@ static inline struct net_buf *prepare_arp(struct net_if *iface,
|
|||
}
|
||||
|
||||
net_buf_frag_add(buf, frag);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_family(buf) = AF_INET;
|
||||
net_nbuf_ll_reserve(buf) = sizeof(struct net_eth_hdr);
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_family(buf, AF_INET);
|
||||
net_nbuf_set_ll_reserve(buf, sizeof(struct net_eth_hdr));
|
||||
|
||||
hdr = NET_ARP_BUF(buf);
|
||||
eth = NET_ETH_BUF(buf);
|
||||
|
@ -390,9 +390,9 @@ static inline struct net_buf *prepare_arp_reply(struct net_if *iface,
|
|||
}
|
||||
|
||||
net_buf_frag_add(buf, frag);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_family(buf) = AF_INET;
|
||||
net_nbuf_ll_reserve(buf) = sizeof(struct net_eth_hdr);
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_family(buf, AF_INET);
|
||||
net_nbuf_set_ll_reserve(buf, sizeof(struct net_eth_hdr));
|
||||
|
||||
hdr = NET_ARP_BUF(buf);
|
||||
eth = NET_ETH_BUF(buf);
|
||||
|
@ -438,7 +438,8 @@ enum net_verdict net_arp_input(struct net_buf *buf)
|
|||
net_nbuf_ll_reserve(buf))) {
|
||||
NET_DBG("Invalid ARP header (len %d, min %d bytes)",
|
||||
net_buf_frags_len(buf),
|
||||
sizeof(struct net_arp_hdr) - net_nbuf_ll_reserve(buf));
|
||||
sizeof(struct net_arp_hdr) -
|
||||
net_nbuf_ll_reserve(buf));
|
||||
return NET_DROP;
|
||||
}
|
||||
|
||||
|
|
|
@ -64,14 +64,14 @@ static enum net_verdict ethernet_recv(struct net_if *iface,
|
|||
switch (ntohs(hdr->type)) {
|
||||
case NET_ETH_PTYPE_IP:
|
||||
case NET_ETH_PTYPE_ARP:
|
||||
net_nbuf_family(buf) = AF_INET;
|
||||
net_nbuf_set_family(buf, AF_INET);
|
||||
break;
|
||||
case NET_ETH_PTYPE_IPV6:
|
||||
net_nbuf_family(buf) = AF_INET6;
|
||||
net_nbuf_set_family(buf, AF_INET6);
|
||||
break;
|
||||
}
|
||||
|
||||
net_nbuf_ll_reserve(buf) = sizeof(struct net_eth_hdr);
|
||||
net_nbuf_set_ll_reserve(buf, sizeof(struct net_eth_hdr));
|
||||
|
||||
/* Set the pointers to ll src and dst addresses */
|
||||
lladdr = net_nbuf_ll_src(buf);
|
||||
|
|
|
@ -333,7 +333,7 @@ static struct net_buf *net_nbuf_get_reserve(enum net_nbuf_type type,
|
|||
NET_ASSERT(buf->ref);
|
||||
|
||||
dec_free_rx_bufs(buf);
|
||||
net_nbuf_type(buf) = type;
|
||||
net_nbuf_set_type(buf, type);
|
||||
break;
|
||||
case NET_NBUF_TX:
|
||||
buf = net_buf_get(&free_tx_bufs, 0);
|
||||
|
@ -344,7 +344,7 @@ static struct net_buf *net_nbuf_get_reserve(enum net_nbuf_type type,
|
|||
NET_ASSERT(buf->ref);
|
||||
|
||||
dec_free_tx_bufs(buf);
|
||||
net_nbuf_type(buf) = type;
|
||||
net_nbuf_set_type(buf, type);
|
||||
break;
|
||||
case NET_NBUF_DATA:
|
||||
buf = net_buf_get(&free_data_bufs, 0);
|
||||
|
@ -479,8 +479,8 @@ static struct net_buf *net_nbuf_get(enum net_nbuf_type type,
|
|||
}
|
||||
|
||||
if (type != NET_NBUF_DATA) {
|
||||
net_nbuf_context(buf) = context;
|
||||
net_nbuf_ll_reserve(buf) = (uint16_t)reserve;
|
||||
net_nbuf_set_context(buf, context);
|
||||
net_nbuf_set_ll_reserve(buf, (uint8_t)reserve);
|
||||
}
|
||||
|
||||
return buf;
|
||||
|
|
|
@ -190,19 +190,21 @@ static inline enum net_verdict process_ipv6_pkt(struct net_buf *buf)
|
|||
}
|
||||
|
||||
/* Check extension headers */
|
||||
net_nbuf_next_hdr(buf) = &hdr->nexthdr;
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_ext_bitmap(buf) = 0;
|
||||
net_nbuf_set_next_hdr(buf, &hdr->nexthdr);
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
net_nbuf_set_ext_bitmap(buf, 0);
|
||||
|
||||
while (1) {
|
||||
switch (*(net_nbuf_next_hdr(buf))) {
|
||||
|
||||
case IPPROTO_ICMPV6:
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_set_ip_hdr_len(buf,
|
||||
sizeof(struct net_ipv6_hdr));
|
||||
return process_icmpv6_pkt(buf, hdr);
|
||||
|
||||
case IPPROTO_UDP:
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_set_ip_hdr_len(buf,
|
||||
sizeof(struct net_ipv6_hdr));
|
||||
return net_conn_input(IPPROTO_UDP, buf);
|
||||
|
||||
default:
|
||||
|
@ -265,11 +267,11 @@ static inline enum net_verdict process_ipv4_pkt(struct net_buf *buf)
|
|||
|
||||
switch (hdr->proto) {
|
||||
case IPPROTO_ICMP:
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv4_hdr);
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv4_hdr));
|
||||
return process_icmpv4_pkt(buf, hdr);
|
||||
|
||||
case IPPROTO_UDP:
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv4_hdr);
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv4_hdr));
|
||||
return net_conn_input(IPPROTO_UDP, buf);
|
||||
}
|
||||
|
||||
|
@ -307,13 +309,13 @@ static inline enum net_verdict process_data(struct net_buf *buf)
|
|||
#if defined(CONFIG_NET_IPV6)
|
||||
case 0x60:
|
||||
NET_STATS(++net_stats.ipv6.recv);
|
||||
net_nbuf_family(buf) = PF_INET6;
|
||||
net_nbuf_set_family(buf, PF_INET6);
|
||||
return process_ipv6_pkt(buf);
|
||||
#endif
|
||||
#if defined(CONFIG_NET_IPV4)
|
||||
case 0x40:
|
||||
NET_STATS(++net_stats.ipv4.recv);
|
||||
net_nbuf_family(buf) = PF_INET;
|
||||
net_nbuf_set_family(buf, PF_INET);
|
||||
return process_ipv4_pkt(buf);
|
||||
#endif
|
||||
}
|
||||
|
@ -409,7 +411,7 @@ int net_recv_data(struct net_if *iface, struct net_buf *buf)
|
|||
NET_DBG("fifo %p iface %p buf %p len %d", &rx_queue, iface, buf,
|
||||
net_buf_frags_len(buf));
|
||||
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
|
||||
net_buf_put(&rx_queue, buf);
|
||||
|
||||
|
|
|
@ -138,7 +138,7 @@ static inline void net_hexdump_frags(const char *str, struct net_buf *buf)
|
|||
struct net_buf *frag = buf->frags;
|
||||
|
||||
while (frag) {
|
||||
net_hexdump(str, frag->data, net_nbuf_len(frag));
|
||||
net_hexdump(str, frag->data, net_nbuf_get_len(frag));
|
||||
frag = frag->frags;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -205,8 +205,8 @@ static inline struct net_buf *prepare_arp_reply(struct net_if *iface,
|
|||
}
|
||||
|
||||
net_buf_frag_add(buf, frag);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
|
||||
hdr = NET_ARP_BUF(buf);
|
||||
eth = NET_ETH_BUF(buf);
|
||||
|
@ -259,8 +259,8 @@ static inline struct net_buf *prepare_arp_request(struct net_if *iface,
|
|||
}
|
||||
|
||||
net_buf_frag_add(buf, frag);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_ll_reserve(buf) = sizeof(struct net_eth_hdr);
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_ll_reserve(buf, sizeof(struct net_eth_hdr));
|
||||
|
||||
hdr = NET_ARP_BUF(buf);
|
||||
eth = NET_ETH_BUF(buf);
|
||||
|
@ -364,8 +364,8 @@ void main_fiber(void)
|
|||
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
|
||||
ipv4 = (struct net_ipv4_hdr *)net_buf_add(frag,
|
||||
sizeof(struct net_ipv4_hdr));
|
||||
|
@ -438,8 +438,8 @@ void main_fiber(void)
|
|||
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
|
||||
setup_eth_header(iface, buf, &hwaddr, NET_ETH_PTYPE_IP);
|
||||
|
||||
|
@ -666,8 +666,8 @@ void main_fiber(void)
|
|||
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
|
||||
arp_hdr = NET_ARP_BUF(buf);
|
||||
net_buf_add(frag, sizeof(struct net_arp_hdr));
|
||||
|
@ -720,8 +720,8 @@ void main_fiber(void)
|
|||
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_ll_reserve(buf) = sizeof(struct net_eth_hdr);
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_set_ll_reserve(buf, sizeof(struct net_eth_hdr));
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
send_status = -EINVAL;
|
||||
|
||||
arp_hdr = NET_ARP_BUF(buf);
|
||||
|
|
|
@ -90,8 +90,8 @@ static int test_ipv6_multi_frags(void)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
net_nbuf_appdata(buf) = (void *)udp + sizeof(*udp);
|
||||
net_nbuf_appdatalen(buf) = 0;
|
||||
net_nbuf_set_appdata(buf, (void *)udp + sizeof(*udp));
|
||||
net_nbuf_set_appdatalen(buf, 0);
|
||||
}
|
||||
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
@ -216,8 +216,8 @@ static int test_fragment_copy(void)
|
|||
|
||||
memcpy(net_buf_add(frag, 15), example_data, 15);
|
||||
|
||||
net_nbuf_appdata(buf) = (void *)udp + sizeof(*udp) + 15;
|
||||
net_nbuf_appdatalen(buf) = 0;
|
||||
net_nbuf_set_appdata(buf, (void *)udp + sizeof(*udp) + 15);
|
||||
net_nbuf_set_appdatalen(buf, 0);
|
||||
}
|
||||
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
|
|
@ -188,12 +188,12 @@ static void setup_ipv6_udp(struct net_buf *buf,
|
|||
net_ipaddr_copy(&NET_IPV6_BUF(buf)->src, remote_addr);
|
||||
net_ipaddr_copy(&NET_IPV6_BUF(buf)->dst, local_addr);
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv6_hdr));
|
||||
|
||||
NET_UDP_BUF(buf)->src_port = htons(remote_port);
|
||||
NET_UDP_BUF(buf)->dst_port = htons(local_port);
|
||||
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
net_buf_add(buf->frags, net_nbuf_ip_hdr_len(buf) +
|
||||
sizeof(struct net_udp_hdr));
|
||||
|
@ -216,12 +216,12 @@ static void setup_ipv4_udp(struct net_buf *buf,
|
|||
net_ipaddr_copy(&NET_IPV4_BUF(buf)->src, remote_addr);
|
||||
net_ipaddr_copy(&NET_IPV4_BUF(buf)->dst, local_addr);
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv4_hdr);
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv4_hdr));
|
||||
|
||||
NET_UDP_BUF(buf)->src_port = htons(remote_port);
|
||||
NET_UDP_BUF(buf)->dst_port = htons(local_port);
|
||||
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
net_buf_add(buf->frags, net_nbuf_ip_hdr_len(buf) +
|
||||
sizeof(struct net_udp_hdr));
|
||||
|
@ -245,8 +245,8 @@ static bool send_ipv6_udp_msg(struct net_if *iface,
|
|||
frag = net_nbuf_get_reserve_data(0);
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
|
||||
setup_ipv6_udp(buf, src, dst, src_port, dst_port);
|
||||
|
||||
|
@ -293,8 +293,8 @@ static bool send_ipv4_udp_msg(struct net_if *iface,
|
|||
frag = net_nbuf_get_reserve_data(0);
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_iface(buf) = iface;
|
||||
net_nbuf_ll_reserve(buf) = net_buf_headroom(frag);
|
||||
net_nbuf_set_iface(buf, iface);
|
||||
net_nbuf_set_ll_reserve(buf, net_buf_headroom(frag));
|
||||
|
||||
setup_ipv4_udp(buf, src, dst, src_port, dst_port);
|
||||
|
||||
|
|
|
@ -176,9 +176,9 @@ void main(void)
|
|||
return;
|
||||
}
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_family(buf) = AF_INET6;
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv6_hdr));
|
||||
net_nbuf_set_family(buf, AF_INET6);
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
/* We need to zero the ICMP checksum */
|
||||
hdr_len = net_nbuf_ip_hdr_len(buf);
|
||||
|
@ -200,9 +200,9 @@ void main(void)
|
|||
net_buf_frag_add(buf, frag);
|
||||
memcpy(net_buf_add(frag, sizeof(pkt2) / 2), pkt2, sizeof(pkt2) / 2);
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_family(buf) = AF_INET6;
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv6_hdr));
|
||||
net_nbuf_set_family(buf, AF_INET6);
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
hdr_len = net_nbuf_ip_hdr_len(buf);
|
||||
orig_chksum = (frag->data[hdr_len + 2] << 8) + frag->data[hdr_len + 3];
|
||||
|
@ -229,9 +229,9 @@ void main(void)
|
|||
memcpy(net_buf_add(frag, sizeof(pkt3) / 2), pkt3, sizeof(pkt3) / 2);
|
||||
printk("First fragment will have %d bytes\n", sizeof(pkt3) / 2);
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_family(buf) = AF_INET6;
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv6_hdr));
|
||||
net_nbuf_set_family(buf, AF_INET6);
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
hdr_len = net_nbuf_ip_hdr_len(buf);
|
||||
orig_chksum = (frag->data[hdr_len + 2] << 8) + frag->data[hdr_len + 3];
|
||||
|
@ -261,9 +261,9 @@ void main(void)
|
|||
sizeof(struct net_ipv6_hdr));
|
||||
printk("[0] IPv6 fragment will have %d bytes\n", frag->len);
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv6_hdr);
|
||||
net_nbuf_family(buf) = AF_INET6;
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv6_hdr));
|
||||
net_nbuf_set_family(buf, AF_INET6);
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
chunk = 29;
|
||||
datalen = sizeof(pkt3) - sizeof(struct net_ipv6_hdr);
|
||||
|
@ -324,13 +324,13 @@ void main(void)
|
|||
frag = net_nbuf_get_reserve_data(sizeof(struct net_eth_hdr));
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_ll_reserve(buf) = sizeof(struct net_eth_hdr);
|
||||
net_nbuf_set_ll_reserve(buf, sizeof(struct net_eth_hdr));
|
||||
memcpy(net_nbuf_ll(buf), pkt4, sizeof(pkt4));
|
||||
net_buf_add(frag, sizeof(pkt4) - sizeof(struct net_eth_hdr));
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv4_hdr);
|
||||
net_nbuf_family(buf) = AF_INET;
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv4_hdr));
|
||||
net_nbuf_set_family(buf, AF_INET);
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
hdr_len = net_nbuf_ip_hdr_len(buf);
|
||||
orig_chksum = (frag->data[hdr_len + 2] << 8) + frag->data[hdr_len + 3];
|
||||
|
@ -352,13 +352,13 @@ void main(void)
|
|||
frag = net_nbuf_get_reserve_data(sizeof(struct net_eth_hdr));
|
||||
net_buf_frag_add(buf, frag);
|
||||
|
||||
net_nbuf_ll_reserve(buf) = sizeof(struct net_eth_hdr);
|
||||
net_nbuf_set_ll_reserve(buf, sizeof(struct net_eth_hdr));
|
||||
memcpy(net_nbuf_ll(buf), pkt5, sizeof(pkt5));
|
||||
net_buf_add(frag, sizeof(pkt5) - sizeof(struct net_eth_hdr));
|
||||
|
||||
net_nbuf_ip_hdr_len(buf) = sizeof(struct net_ipv4_hdr);
|
||||
net_nbuf_family(buf) = AF_INET;
|
||||
net_nbuf_ext_len(buf) = 0;
|
||||
net_nbuf_set_ip_hdr_len(buf, sizeof(struct net_ipv4_hdr));
|
||||
net_nbuf_set_family(buf, AF_INET);
|
||||
net_nbuf_set_ext_len(buf, 0);
|
||||
|
||||
hdr_len = net_nbuf_ip_hdr_len(buf);
|
||||
orig_chksum = (frag->data[hdr_len + 2] << 8) + frag->data[hdr_len + 3];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue