Lines Matching refs:pckt
233 bool is_ipv6, struct packet_description *pckt) in parse_udp() argument
236 bool is_icmp = !((pckt->flags & (1 << 0)) == 0); in parse_udp()
244 pckt->flow.port16[0] = udp->source; in parse_udp()
245 pckt->flow.port16[1] = udp->dest; in parse_udp()
247 pckt->flow.port16[0] = udp->dest; in parse_udp()
248 pckt->flow.port16[1] = udp->source; in parse_udp()
255 bool is_ipv6, struct packet_description *pckt) in parse_tcp() argument
258 bool is_icmp = !((pckt->flags & (1 << 0)) == 0); in parse_tcp()
266 pckt->flags |= (1 << 1); in parse_tcp()
268 pckt->flow.port16[0] = tcp->source; in parse_tcp()
269 pckt->flow.port16[1] = tcp->dest; in parse_tcp()
271 pckt->flow.port16[0] = tcp->dest; in parse_tcp()
272 pckt->flow.port16[1] = tcp->source; in parse_tcp()
279 struct packet_description *pckt, in encap_v6() argument
307 ip_suffix = pckt->flow.srcv6[3] ^ pckt->flow.port16[0]; in encap_v6()
322 struct packet_description *pckt, in encap_v4() argument
326 __u32 ip_suffix = bpf_ntohs(pckt->flow.port16[0]); in encap_v4()
336 ip_suffix ^= pckt->flow.src; in encap_v4()
485 struct packet_description *pckt) in parse_icmpv6() argument
501 pckt->flow.proto = ip6h->nexthdr; in parse_icmpv6()
502 pckt->flags |= (1 << 0); in parse_icmpv6()
503 memcpy(pckt->flow.srcv6, ip6h->daddr.in6_u.u6_addr32, 16); in parse_icmpv6()
504 memcpy(pckt->flow.dstv6, ip6h->saddr.in6_u.u6_addr32, 16); in parse_icmpv6()
510 struct packet_description *pckt) in parse_icmp() argument
528 pckt->flow.proto = iph->protocol; in parse_icmp()
529 pckt->flags |= (1 << 0); in parse_icmp()
530 pckt->flow.src = iph->daddr; in parse_icmp()
531 pckt->flow.dst = iph->saddr; in parse_icmp()
536 __u32 get_packet_hash(struct packet_description *pckt, in get_packet_hash() argument
540 return jhash_2words(jhash(pckt->flow.srcv6, 16, 12), in get_packet_hash()
541 pckt->flow.ports, 24); in get_packet_hash()
543 return jhash_2words(pckt->flow.src, pckt->flow.ports, in get_packet_hash()
549 struct packet_description *pckt, in get_packet_dst() argument
561 pckt->flow.port16[0] = pckt->flow.port16[1]; in get_packet_dst()
562 memset(pckt->flow.srcv6, 0, 16); in get_packet_dst()
564 hash = get_packet_hash(pckt, hash_16bytes); in get_packet_dst()
592 if (pckt->flow.proto == IPPROTO_UDP) in get_packet_dst()
595 bpf_map_update_elem(lru_map, &pckt->flow, &new_dst_lru, 0); in get_packet_dst()
602 struct packet_description *pckt, in connection_table_lookup() argument
610 dst_lru = bpf_map_lookup_elem(lru_map, &pckt->flow); in connection_table_lookup()
613 if (pckt->flow.proto == IPPROTO_UDP) { in connection_table_lookup()
628 static int process_l3_headers_v6(struct packet_description *pckt, in process_l3_headers_v6() argument
642 pckt->flow.proto = *protocol; in process_l3_headers_v6()
648 action = parse_icmpv6(data, data_end, off, pckt); in process_l3_headers_v6()
652 memcpy(pckt->flow.srcv6, ip6h->saddr.in6_u.u6_addr32, 16); in process_l3_headers_v6()
653 memcpy(pckt->flow.dstv6, ip6h->daddr.in6_u.u6_addr32, 16); in process_l3_headers_v6()
659 static int process_l3_headers_v4(struct packet_description *pckt, in process_l3_headers_v4() argument
674 pckt->flow.proto = *protocol; in process_l3_headers_v4()
680 action = parse_icmp(data, data_end, off, pckt); in process_l3_headers_v4()
684 pckt->flow.src = iph->saddr; in process_l3_headers_v4()
685 pckt->flow.dst = iph->daddr; in process_l3_headers_v4()
696 struct packet_description pckt = { }; in process_packet() local
713 action = process_l3_headers_v6(&pckt, &protocol, off, in process_packet()
716 action = process_l3_headers_v4(&pckt, &protocol, off, in process_packet()
720 protocol = pckt.flow.proto; in process_packet()
722 if (!parse_tcp(data, data_end, is_ipv6, &pckt)) in process_packet()
725 if (!parse_udp(data, data_end, is_ipv6, &pckt)) in process_packet()
732 memcpy(vip.vipv6, pckt.flow.dstv6, 16); in process_packet()
734 vip.vip = pckt.flow.dst; in process_packet()
735 vip.port = pckt.flow.port16[1]; in process_packet()
736 vip.proto = pckt.flow.proto; in process_packet()
744 pckt.flow.port16[1] = 0; in process_packet()
754 pckt.flow.port16[0] = 0; in process_packet()
755 if (!(pckt.flags & (1 << 1)) && !(vip_info->flags & (1 << 1))) in process_packet()
756 connection_table_lookup(&dst, &pckt, lru_map); in process_packet()
759 if (pckt.flow.proto == IPPROTO_TCP) { in process_packet()
765 if (pckt.flags & (1 << 1)) in process_packet()
770 if (!get_packet_dst(&dst, &pckt, vip_info, is_ipv6, lru_map)) in process_packet()
779 if (!encap_v6(xdp, cval, &pckt, dst, pkt_bytes)) in process_packet()
782 if (!encap_v4(xdp, cval, &pckt, dst, pkt_bytes)) in process_packet()