Lines Matching refs:hdr
350 static inline void lowpan_iphc_tf_set_ecn(struct ipv6hdr *hdr, const u8 *tf) in lowpan_iphc_tf_set_ecn() argument
356 hdr->flow_lbl[0] |= (ecn >> 2); in lowpan_iphc_tf_set_ecn()
360 static inline void lowpan_iphc_tf_set_dscp(struct ipv6hdr *hdr, const u8 *tf) in lowpan_iphc_tf_set_dscp() argument
366 hdr->priority |= ((dscp & 0x3c) >> 2); in lowpan_iphc_tf_set_dscp()
368 hdr->flow_lbl[0] |= ((dscp & 0x03) << 6); in lowpan_iphc_tf_set_dscp()
372 static inline void lowpan_iphc_tf_set_lbl(struct ipv6hdr *hdr, const u8 *lbl) in lowpan_iphc_tf_set_lbl() argument
383 hdr->flow_lbl[0] |= lbl[0] & 0x0f; in lowpan_iphc_tf_set_lbl()
384 memcpy(&hdr->flow_lbl[1], &lbl[1], 2); in lowpan_iphc_tf_set_lbl()
391 static int lowpan_iphc_tf_decompress(struct sk_buff *skb, struct ipv6hdr *hdr, in lowpan_iphc_tf_decompress() argument
409 lowpan_iphc_tf_set_ecn(hdr, tf); in lowpan_iphc_tf_decompress()
410 lowpan_iphc_tf_set_dscp(hdr, tf); in lowpan_iphc_tf_decompress()
411 lowpan_iphc_tf_set_lbl(hdr, &tf[1]); in lowpan_iphc_tf_decompress()
424 lowpan_iphc_tf_set_ecn(hdr, tf); in lowpan_iphc_tf_decompress()
425 lowpan_iphc_tf_set_lbl(hdr, &tf[0]); in lowpan_iphc_tf_decompress()
437 lowpan_iphc_tf_set_ecn(hdr, tf); in lowpan_iphc_tf_decompress()
438 lowpan_iphc_tf_set_dscp(hdr, tf); in lowpan_iphc_tf_decompress()
461 struct ipv6hdr hdr = {}; in lowpan_header_decompress() local
476 hdr.version = 6; in lowpan_header_decompress()
478 err = lowpan_iphc_tf_decompress(skb, &hdr, in lowpan_header_decompress()
486 if (lowpan_fetch_skb(skb, &hdr.nexthdr, sizeof(hdr.nexthdr))) in lowpan_header_decompress()
490 hdr.nexthdr); in lowpan_header_decompress()
495 hdr.hop_limit = lowpan_ttl_values[iphc0 & LOWPAN_IPHC_HLIM_MASK]; in lowpan_header_decompress()
497 if (lowpan_fetch_skb(skb, &hdr.hop_limit, in lowpan_header_decompress()
498 sizeof(hdr.hop_limit))) in lowpan_header_decompress()
505 err = uncompress_context_based_src_addr(skb, &hdr.saddr, in lowpan_header_decompress()
510 err = uncompress_addr(skb, dev, &hdr.saddr, in lowpan_header_decompress()
524 err = lowpan_uncompress_multicast_daddr(skb, &hdr.daddr, in lowpan_header_decompress()
531 err = uncompress_addr(skb, dev, &hdr.daddr, in lowpan_header_decompress()
534 iphc1 & LOWPAN_IPHC_DAM_MASK, &hdr.daddr); in lowpan_header_decompress()
541 err = lowpan_nhc_do_uncompression(skb, dev, &hdr); in lowpan_header_decompress()
545 err = skb_cow(skb, sizeof(hdr)); in lowpan_header_decompress()
553 hdr.payload_len = htons(lowpan_802154_cb(skb)->d_size - in lowpan_header_decompress()
556 hdr.payload_len = htons(skb->len); in lowpan_header_decompress()
559 hdr.payload_len = htons(skb->len); in lowpan_header_decompress()
568 hdr.version, ntohs(hdr.payload_len), hdr.nexthdr, in lowpan_header_decompress()
569 hdr.hop_limit, &hdr.daddr); in lowpan_header_decompress()
571 skb_push(skb, sizeof(hdr)); in lowpan_header_decompress()
573 skb_copy_to_linear_data(skb, &hdr, sizeof(hdr)); in lowpan_header_decompress()
575 raw_dump_table(__func__, "raw header dump", (u8 *)&hdr, sizeof(hdr)); in lowpan_header_decompress()
617 static inline u8 lowpan_iphc_get_tc(const struct ipv6hdr *hdr) in lowpan_iphc_get_tc() argument
624 dscp = (hdr->priority << 2) | ((hdr->flow_lbl[0] & 0xc0) >> 6); in lowpan_iphc_get_tc()
626 ecn = (hdr->flow_lbl[0] & 0x30); in lowpan_iphc_get_tc()
634 static inline bool lowpan_iphc_is_flow_lbl_zero(const struct ipv6hdr *hdr) in lowpan_iphc_is_flow_lbl_zero() argument
636 return ((!(hdr->flow_lbl[0] & 0x0f)) && in lowpan_iphc_is_flow_lbl_zero()
637 !hdr->flow_lbl[1] && !hdr->flow_lbl[2]); in lowpan_iphc_is_flow_lbl_zero()
643 static u8 lowpan_iphc_tf_compress(u8 **hc_ptr, const struct ipv6hdr *hdr) in lowpan_iphc_tf_compress() argument
646 u8 tc = lowpan_iphc_get_tc(hdr), tf[4], val; in lowpan_iphc_tf_compress()
651 if (lowpan_iphc_is_flow_lbl_zero(hdr)) { in lowpan_iphc_tf_compress()
677 memcpy(&tf[0], &hdr->flow_lbl[0], 3); in lowpan_iphc_tf_compress()
699 memcpy(&tf[1], &hdr->flow_lbl[0], 3); in lowpan_iphc_tf_compress()
746 struct ipv6hdr *hdr; in lowpan_header_compress() local
753 hdr = ipv6_hdr(skb); in lowpan_header_compress()
758 hdr->version, ntohs(hdr->payload_len), hdr->nexthdr, in lowpan_header_compress()
759 hdr->hop_limit, &hdr->daddr); in lowpan_header_compress()
781 iphc0 |= lowpan_iphc_tf_compress(&hc_ptr, hdr); in lowpan_header_compress()
788 ret = lowpan_nhc_check_compression(skb, hdr, &hc_ptr); in lowpan_header_compress()
790 lowpan_push_hc_data(&hc_ptr, &hdr->nexthdr, in lowpan_header_compress()
791 sizeof(hdr->nexthdr)); in lowpan_header_compress()
801 switch (hdr->hop_limit) { in lowpan_header_compress()
812 lowpan_push_hc_data(&hc_ptr, &hdr->hop_limit, in lowpan_header_compress()
813 sizeof(hdr->hop_limit)); in lowpan_header_compress()
816 addr_type = ipv6_addr_type(&hdr->saddr); in lowpan_header_compress()
823 iphc1 |= lowpan_compress_addr_64(&hc_ptr, &hdr->saddr, in lowpan_header_compress()
826 &hdr->saddr, iphc1); in lowpan_header_compress()
829 lowpan_push_hc_data(&hc_ptr, hdr->saddr.s6_addr, 16); in lowpan_header_compress()
833 addr_type = ipv6_addr_type(&hdr->daddr); in lowpan_header_compress()
838 iphc1 |= lowpan_iphc_mcast_addr_compress(&hc_ptr, &hdr->daddr); in lowpan_header_compress()
842 iphc1 |= lowpan_compress_addr_64(&hc_ptr, &hdr->daddr, in lowpan_header_compress()
845 "iphc1 0x%02x\n", &hdr->daddr, iphc1); in lowpan_header_compress()
847 pr_debug("dest address unicast %pI6c\n", &hdr->daddr); in lowpan_header_compress()
848 lowpan_push_hc_data(&hc_ptr, hdr->daddr.s6_addr, 16); in lowpan_header_compress()
854 ret = lowpan_nhc_do_compression(skb, hdr, &hc_ptr); in lowpan_header_compress()