net: ipv4: Refactor IPv4 header length handling
Change the length to uint16_t and work with it through standard htons/ntohs() macros. Signed-off-by: Oleg Zhurakivskyy <oleg.zhurakivskyy@intel.com>
This commit is contained in:
parent
33e06441ba
commit
fbac80bb94
9 changed files with 13 additions and 19 deletions
|
@ -286,7 +286,7 @@ struct net_ipv6_frag_hdr {
|
||||||
struct net_ipv4_hdr {
|
struct net_ipv4_hdr {
|
||||||
u8_t vhl;
|
u8_t vhl;
|
||||||
u8_t tos;
|
u8_t tos;
|
||||||
u8_t len[2];
|
u16_t len;
|
||||||
u8_t id[2];
|
u8_t id[2];
|
||||||
u8_t offset[2];
|
u8_t offset[2];
|
||||||
u8_t ttl;
|
u8_t ttl;
|
||||||
|
|
|
@ -867,8 +867,7 @@ enum net_verdict net_conn_input(enum net_ip_protocol proto, struct net_pkt *pkt)
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_NET_IPV4) &&
|
if (IS_ENABLED(CONFIG_NET_IPV4) &&
|
||||||
net_pkt_family(pkt) == AF_INET) {
|
net_pkt_family(pkt) == AF_INET) {
|
||||||
data_len = NET_IPV4_HDR(pkt)->len[0] * 256 +
|
data_len = ntohs(NET_IPV4_HDR(pkt)->len);
|
||||||
NET_IPV4_HDR(pkt)->len[1];
|
|
||||||
} else if (IS_ENABLED(CONFIG_NET_IPV6) &&
|
} else if (IS_ENABLED(CONFIG_NET_IPV6) &&
|
||||||
net_pkt_family(pkt) == AF_INET6) {
|
net_pkt_family(pkt) == AF_INET6) {
|
||||||
data_len = NET_IPV6_HDR(pkt)->len[0] * 256 +
|
data_len = NET_IPV6_HDR(pkt)->len[0] * 256 +
|
||||||
|
|
|
@ -70,8 +70,7 @@ void net_ipv4_finalize(struct net_pkt *pkt, u8_t next_header_proto)
|
||||||
|
|
||||||
total_len = net_pkt_get_len(pkt);
|
total_len = net_pkt_get_len(pkt);
|
||||||
|
|
||||||
NET_IPV4_HDR(pkt)->len[0] = total_len >> 8;
|
NET_IPV4_HDR(pkt)->len = htons(total_len);
|
||||||
NET_IPV4_HDR(pkt)->len[1] = total_len & 0xff;
|
|
||||||
|
|
||||||
NET_IPV4_HDR(pkt)->chksum = 0;
|
NET_IPV4_HDR(pkt)->chksum = 0;
|
||||||
|
|
||||||
|
@ -109,7 +108,7 @@ enum net_verdict net_ipv4_process_pkt(struct net_pkt *pkt)
|
||||||
{
|
{
|
||||||
struct net_ipv4_hdr *hdr = NET_IPV4_HDR(pkt);
|
struct net_ipv4_hdr *hdr = NET_IPV4_HDR(pkt);
|
||||||
int real_len = net_pkt_get_len(pkt);
|
int real_len = net_pkt_get_len(pkt);
|
||||||
int pkt_len = (hdr->len[0] << 8) + hdr->len[1];
|
int pkt_len = ntohs(hdr->len);
|
||||||
enum net_verdict verdict = NET_DROP;
|
enum net_verdict verdict = NET_DROP;
|
||||||
|
|
||||||
if (real_len != pkt_len) {
|
if (real_len != pkt_len) {
|
||||||
|
|
|
@ -467,8 +467,7 @@ u16_t net_calc_chksum(struct net_pkt *pkt, u8_t proto)
|
||||||
switch (net_pkt_family(pkt)) {
|
switch (net_pkt_family(pkt)) {
|
||||||
#if defined(CONFIG_NET_IPV4)
|
#if defined(CONFIG_NET_IPV4)
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
upper_layer_len = (NET_IPV4_HDR(pkt)->len[0] << 8) +
|
upper_layer_len = ntohs(NET_IPV4_HDR(pkt)->len) -
|
||||||
NET_IPV4_HDR(pkt)->len[1] -
|
|
||||||
net_pkt_ipv6_ext_len(pkt) -
|
net_pkt_ipv6_ext_len(pkt) -
|
||||||
net_pkt_ip_hdr_len(pkt);
|
net_pkt_ip_hdr_len(pkt);
|
||||||
|
|
||||||
|
|
|
@ -99,8 +99,7 @@ static inline void ethernet_update_length(struct net_if *iface,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (net_pkt_family(pkt) == AF_INET) {
|
if (net_pkt_family(pkt) == AF_INET) {
|
||||||
len = ((NET_IPV4_HDR(pkt)->len[0] << 8) +
|
len = ntohs(NET_IPV4_HDR(pkt)->len);
|
||||||
NET_IPV4_HDR(pkt)->len[1]);
|
|
||||||
} else {
|
} else {
|
||||||
len = ((NET_IPV6_HDR(pkt)->len[0] << 8) +
|
len = ((NET_IPV6_HDR(pkt)->len[0] << 8) +
|
||||||
NET_IPV6_HDR(pkt)->len[1]) +
|
NET_IPV6_HDR(pkt)->len[1]) +
|
||||||
|
|
|
@ -97,7 +97,7 @@ static size_t ecm_eth_size(void *ecm_pkt, size_t len)
|
||||||
switch (ntohs(hdr->type)) {
|
switch (ntohs(hdr->type)) {
|
||||||
case NET_ETH_PTYPE_IP:
|
case NET_ETH_PTYPE_IP:
|
||||||
case NET_ETH_PTYPE_ARP:
|
case NET_ETH_PTYPE_ARP:
|
||||||
ip_len = sys_get_be16(((struct net_ipv4_hdr *)ip_data)->len);
|
ip_len = ntohs(((struct net_ipv4_hdr *)ip_data)->len);
|
||||||
break;
|
break;
|
||||||
case NET_ETH_PTYPE_IPV6:
|
case NET_ETH_PTYPE_IPV6:
|
||||||
ip_len = sys_get_be16(((struct net_ipv6_hdr *)ip_data)->len);
|
ip_len = sys_get_be16(((struct net_ipv6_hdr *)ip_data)->len);
|
||||||
|
|
|
@ -233,8 +233,7 @@ static void set_ipv4_header(struct net_pkt *pkt)
|
||||||
length = sizeof(offer) + sizeof(struct net_ipv4_hdr) +
|
length = sizeof(offer) + sizeof(struct net_ipv4_hdr) +
|
||||||
sizeof(struct net_udp_hdr);
|
sizeof(struct net_udp_hdr);
|
||||||
|
|
||||||
ipv4->len[1] = length;
|
ipv4->len = htons(length);
|
||||||
ipv4->len[0] = length >> 8;
|
|
||||||
|
|
||||||
memset(ipv4->id, 0, 4); /* id and offset */
|
memset(ipv4->id, 0, 4); /* id and offset */
|
||||||
|
|
||||||
|
|
|
@ -278,9 +278,8 @@ static void setup_ipv4_tcp(struct net_pkt *pkt,
|
||||||
|
|
||||||
ipv4.vhl = 0x45;
|
ipv4.vhl = 0x45;
|
||||||
ipv4.tos = 0;
|
ipv4.tos = 0;
|
||||||
ipv4.len[0] = 0;
|
ipv4.len = htons(NET_TCPH_LEN + sizeof(data) +
|
||||||
ipv4.len[1] = NET_TCPH_LEN + sizeof(data) +
|
sizeof(struct net_ipv4_hdr));
|
||||||
sizeof(struct net_ipv4_hdr);
|
|
||||||
|
|
||||||
ipv4.proto = IPPROTO_TCP;
|
ipv4.proto = IPPROTO_TCP;
|
||||||
|
|
||||||
|
|
|
@ -318,9 +318,9 @@ static void setup_ipv4_udp(struct net_pkt *pkt,
|
||||||
{
|
{
|
||||||
NET_IPV4_HDR(pkt)->vhl = 0x45;
|
NET_IPV4_HDR(pkt)->vhl = 0x45;
|
||||||
NET_IPV4_HDR(pkt)->tos = 0;
|
NET_IPV4_HDR(pkt)->tos = 0;
|
||||||
NET_IPV4_HDR(pkt)->len[0] = 0;
|
NET_IPV4_HDR(pkt)->len = htons(NET_UDPH_LEN +
|
||||||
NET_IPV4_HDR(pkt)->len[1] = NET_UDPH_LEN +
|
sizeof(struct net_ipv4_hdr) +
|
||||||
sizeof(struct net_ipv4_hdr) + strlen(payload);
|
strlen(payload));
|
||||||
|
|
||||||
NET_IPV4_HDR(pkt)->proto = IPPROTO_UDP;
|
NET_IPV4_HDR(pkt)->proto = IPPROTO_UDP;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue