mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-03 23:26:40 +07:00
6lowpan: udp use lowpan_fetch_skb function
Cleanup the lowpan_uncompress_udp_header function to use the lowpan_fetch_skb function. Signed-off-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
573701ce37
commit
1672a36b73
@ -265,40 +265,37 @@ lowpan_uncompress_multicast_daddr(struct sk_buff *skb,
|
|||||||
static int
|
static int
|
||||||
uncompress_udp_header(struct sk_buff *skb, struct udphdr *uh)
|
uncompress_udp_header(struct sk_buff *skb, struct udphdr *uh)
|
||||||
{
|
{
|
||||||
u8 tmp;
|
bool fail;
|
||||||
|
u8 tmp = 0, val = 0;
|
||||||
|
|
||||||
if (!uh)
|
if (!uh)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (lowpan_fetch_skb_u8(skb, &tmp))
|
fail = lowpan_fetch_skb(skb, &tmp, 1);
|
||||||
goto err;
|
|
||||||
|
|
||||||
if ((tmp & LOWPAN_NHC_UDP_MASK) == LOWPAN_NHC_UDP_ID) {
|
if ((tmp & LOWPAN_NHC_UDP_MASK) == LOWPAN_NHC_UDP_ID) {
|
||||||
pr_debug("UDP header uncompression\n");
|
pr_debug("UDP header uncompression\n");
|
||||||
switch (tmp & LOWPAN_NHC_UDP_CS_P_11) {
|
switch (tmp & LOWPAN_NHC_UDP_CS_P_11) {
|
||||||
case LOWPAN_NHC_UDP_CS_P_00:
|
case LOWPAN_NHC_UDP_CS_P_00:
|
||||||
memcpy(&uh->source, &skb->data[0], 2);
|
fail |= lowpan_fetch_skb(skb, &uh->source, 2);
|
||||||
memcpy(&uh->dest, &skb->data[2], 2);
|
fail |= lowpan_fetch_skb(skb, &uh->dest, 2);
|
||||||
skb_pull(skb, 4);
|
|
||||||
break;
|
break;
|
||||||
case LOWPAN_NHC_UDP_CS_P_01:
|
case LOWPAN_NHC_UDP_CS_P_01:
|
||||||
memcpy(&uh->source, &skb->data[0], 2);
|
fail |= lowpan_fetch_skb(skb, &uh->source, 2);
|
||||||
uh->dest = htons(skb->data[2] +
|
fail |= lowpan_fetch_skb(skb, &val, 1);
|
||||||
LOWPAN_NHC_UDP_8BIT_PORT);
|
uh->dest = htons(val + LOWPAN_NHC_UDP_8BIT_PORT);
|
||||||
skb_pull(skb, 3);
|
|
||||||
break;
|
break;
|
||||||
case LOWPAN_NHC_UDP_CS_P_10:
|
case LOWPAN_NHC_UDP_CS_P_10:
|
||||||
uh->source = htons(skb->data[0] +
|
fail |= lowpan_fetch_skb(skb, &val, 1);
|
||||||
LOWPAN_NHC_UDP_8BIT_PORT);
|
uh->source = htons(val + LOWPAN_NHC_UDP_8BIT_PORT);
|
||||||
memcpy(&uh->dest, &skb->data[1], 2);
|
fail |= lowpan_fetch_skb(skb, &uh->dest, 2);
|
||||||
skb_pull(skb, 3);
|
|
||||||
break;
|
break;
|
||||||
case LOWPAN_NHC_UDP_CS_P_11:
|
case LOWPAN_NHC_UDP_CS_P_11:
|
||||||
|
fail |= lowpan_fetch_skb(skb, &val, 1);
|
||||||
uh->source = htons(LOWPAN_NHC_UDP_4BIT_PORT +
|
uh->source = htons(LOWPAN_NHC_UDP_4BIT_PORT +
|
||||||
(skb->data[0] >> 4));
|
(val >> 4));
|
||||||
uh->dest = htons(LOWPAN_NHC_UDP_4BIT_PORT +
|
uh->dest = htons(LOWPAN_NHC_UDP_4BIT_PORT +
|
||||||
(skb->data[0] & 0x0f));
|
(val & 0x0f));
|
||||||
skb_pull(skb, 1);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pr_debug("ERROR: unknown UDP format\n");
|
pr_debug("ERROR: unknown UDP format\n");
|
||||||
@ -314,8 +311,7 @@ uncompress_udp_header(struct sk_buff *skb, struct udphdr *uh)
|
|||||||
pr_debug_ratelimited("checksum elided currently not supported\n");
|
pr_debug_ratelimited("checksum elided currently not supported\n");
|
||||||
goto err;
|
goto err;
|
||||||
} else {
|
} else {
|
||||||
memcpy(&uh->check, &skb->data[0], 2);
|
fail |= lowpan_fetch_skb(skb, &uh->check, 2);
|
||||||
skb_pull(skb, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -330,6 +326,9 @@ uncompress_udp_header(struct sk_buff *skb, struct udphdr *uh)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fail)
|
||||||
|
goto err;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
err:
|
err:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
Loading…
Reference in New Issue
Block a user