Lines Matching refs:pkt
59 int net_ipv6_create(struct net_pkt *pkt, in net_ipv6_create() argument
67 ipv6_hdr = (struct net_ipv6_hdr *)net_pkt_get_data(pkt, &ipv6_access); in net_ipv6_create()
73 net_ipv6_set_dscp(&tc, net_pkt_ip_dscp(pkt)); in net_ipv6_create()
74 net_ipv6_set_ecn(&tc, net_pkt_ip_ecn(pkt)); in net_ipv6_create()
87 ipv6_hdr->hop_limit = net_pkt_ipv6_hop_limit(pkt); in net_ipv6_create()
90 if (net_pkt_context(pkt) != NULL) { in net_ipv6_create()
92 net_context_get_ipv6_mcast_hop_limit(net_pkt_context(pkt)); in net_ipv6_create()
95 net_if_ipv6_get_mcast_hop_limit(net_pkt_iface(pkt)); in net_ipv6_create()
98 if (net_pkt_context(pkt) != NULL) { in net_ipv6_create()
100 net_context_get_ipv6_hop_limit(net_pkt_context(pkt)); in net_ipv6_create()
103 net_if_ipv6_get_hop_limit(net_pkt_iface(pkt)); in net_ipv6_create()
111 net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr)); in net_ipv6_create()
112 net_pkt_set_ipv6_ext_len(pkt, 0); in net_ipv6_create()
114 return net_pkt_set_data(pkt, &ipv6_access); in net_ipv6_create()
117 int net_ipv6_finalize(struct net_pkt *pkt, uint8_t next_header_proto) in net_ipv6_finalize() argument
122 net_pkt_set_overwrite(pkt, true); in net_ipv6_finalize()
124 ipv6_hdr = (struct net_ipv6_hdr *)net_pkt_get_data(pkt, &ipv6_access); in net_ipv6_finalize()
129 ipv6_hdr->len = htons(net_pkt_get_len(pkt) - in net_ipv6_finalize()
132 if (net_pkt_ipv6_next_hdr(pkt) != 255U) { in net_ipv6_finalize()
133 ipv6_hdr->nexthdr = net_pkt_ipv6_next_hdr(pkt); in net_ipv6_finalize()
138 net_pkt_set_data(pkt, &ipv6_access); in net_ipv6_finalize()
140 if (net_pkt_ipv6_next_hdr(pkt) != 255U && in net_ipv6_finalize()
141 net_pkt_skip(pkt, net_pkt_ipv6_ext_len(pkt))) { in net_ipv6_finalize()
147 return net_udp_finalize(pkt, false); in net_ipv6_finalize()
150 return net_tcp_finalize(pkt, false); in net_ipv6_finalize()
152 return net_icmpv6_finalize(pkt, false); in net_ipv6_finalize()
158 static inline bool ipv6_drop_on_unknown_option(struct net_pkt *pkt, in ipv6_drop_on_unknown_option() argument
192 net_icmpv6_send_error(pkt, NET_ICMPV6_PARAM_PROBLEM, in ipv6_drop_on_unknown_option()
201 static inline int ipv6_handle_ext_hdr_options(struct net_pkt *pkt, in ipv6_handle_ext_hdr_options() argument
211 if (net_pkt_read_u8(pkt, &val)) { in ipv6_handle_ext_hdr_options()
229 opt_type_offset = net_pkt_get_current_offset(pkt); in ipv6_handle_ext_hdr_options()
234 if (net_pkt_read_u8(pkt, &opt_type)) { in ipv6_handle_ext_hdr_options()
239 if (net_pkt_read_u8(pkt, &opt_len)) { in ipv6_handle_ext_hdr_options()
252 net_pkt_skip(pkt, opt_len); in ipv6_handle_ext_hdr_options()
265 if (ipv6_drop_on_unknown_option(pkt, hdr, in ipv6_handle_ext_hdr_options()
270 if (net_pkt_skip(pkt, opt_len)) { in ipv6_handle_ext_hdr_options()
306 static void ipv6_no_route_info(struct net_pkt *pkt, in ipv6_no_route_info() argument
311 pkt, net_sprint_ipv6_addr(src), in ipv6_no_route_info()
316 static enum net_verdict ipv6_route_packet(struct net_pkt *pkt, in ipv6_route_packet() argument
328 found = net_route_get_info(net_pkt_iface(pkt), in ipv6_route_packet()
340 ipv6_no_route_info(pkt, (struct in6_addr *)hdr->src, in ipv6_route_packet()
348 net_pkt_set_orig_iface(pkt, net_pkt_iface(pkt)); in ipv6_route_packet()
351 net_pkt_set_iface(pkt, route->iface); in ipv6_route_packet()
355 net_pkt_orig_iface(pkt) != net_pkt_iface(pkt) && in ipv6_route_packet()
356 !net_if_flag_is_set(net_pkt_orig_iface(pkt), NET_IF_IPV6_NO_ND)) { in ipv6_route_packet()
362 pkt, net_pkt_orig_iface(pkt), in ipv6_route_packet()
363 net_pkt_iface(pkt)); in ipv6_route_packet()
365 add_route(net_pkt_orig_iface(pkt), in ipv6_route_packet()
369 ret = net_route_packet(pkt, nexthop); in ipv6_route_packet()
373 pkt, net_sprint_ipv6_addr(nexthop), in ipv6_route_packet()
374 net_pkt_iface(pkt), ret); in ipv6_route_packet()
383 ret = net_route_packet_if(pkt, iface); in ipv6_route_packet()
387 pkt, net_pkt_iface(pkt), ret); in ipv6_route_packet()
394 net_sprint_ipv6_addr(&hdr->dst), pkt); in ipv6_route_packet()
401 static inline enum net_verdict ipv6_route_packet(struct net_pkt *pkt, in ipv6_route_packet() argument
404 ARG_UNUSED(pkt); in ipv6_route_packet()
407 NET_DBG("DROP: Packet %p not for me", pkt); in ipv6_route_packet()
415 static enum net_verdict ipv6_forward_mcast_packet(struct net_pkt *pkt, in ipv6_forward_mcast_packet() argument
433 routed = net_route_mcast_forward_packet(pkt, hdr); in ipv6_forward_mcast_packet()
474 enum net_verdict net_ipv6_input(struct net_pkt *pkt, bool is_loopback) in net_ipv6_input() argument
479 struct net_if *pkt_iface = net_pkt_iface(pkt); in net_ipv6_input()
481 int real_len = net_pkt_get_len(pkt); in net_ipv6_input()
494 net_pkt_cursor_backup(pkt, &hdr_start); in net_ipv6_input()
499 hdr = (struct net_ipv6_hdr *)net_pkt_get_data(pkt, &ipv6_access); in net_ipv6_input()
511 net_pkt_update_length(pkt, pkt_len); in net_ipv6_input()
570 net_pkt_set_ip_dscp(pkt, net_ipv6_get_dscp(tc)); in net_ipv6_input()
571 net_pkt_set_ip_ecn(pkt, net_ipv6_get_ecn(tc)); in net_ipv6_input()
575 net_pkt_set_ipv6_next_hdr(pkt, hdr->nexthdr); in net_ipv6_input()
576 net_pkt_set_ipv6_ext_len(pkt, 0); in net_ipv6_input()
577 net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv6_hdr)); in net_ipv6_input()
578 net_pkt_set_ipv6_hop_limit(pkt, NET_IPV6_HDR(pkt)->hop_limit); in net_ipv6_input()
579 net_pkt_set_family(pkt, PF_INET6); in net_ipv6_input()
581 if (!net_pkt_filter_ip_recv_ok(pkt)) { in net_ipv6_input()
588 net_ipv6_is_addr_mcast((struct in6_addr *)hdr->dst) && !net_pkt_forwarding(pkt)) { in net_ipv6_input()
596 if (ipv6_forward_mcast_packet(pkt, hdr) == NET_DROP) { in net_ipv6_input()
604 if (ipv6_route_packet(pkt, hdr) == NET_OK) { in net_ipv6_input()
623 ipv6_no_route_info(pkt, (struct in6_addr *)hdr->src, in net_ipv6_input()
659 net_pkt_acknowledge_data(pkt, &ipv6_access); in net_ipv6_input()
665 net_pkt_set_ipv6_hdr_prev(pkt, prev_hdr_offset); in net_ipv6_input()
684 prev_hdr_offset = net_pkt_get_current_offset(pkt); in net_ipv6_input()
686 if (net_pkt_read_u8(pkt, &nexthdr)) { in net_ipv6_input()
733 pkt, in net_ipv6_input()
734 net_pkt_get_current_offset(pkt) - 1); in net_ipv6_input()
735 return net_ipv6_handle_fragment_hdr(pkt, hdr, in net_ipv6_input()
746 exthdr_len = ipv6_handle_ext_hdr_options(pkt, hdr, pkt_len); in net_ipv6_input()
757 net_pkt_set_ipv6_hdr_prev(pkt, prev_hdr_offset); in net_ipv6_input()
760 net_pkt_set_ipv6_ext_len(pkt, ext_len); in net_ipv6_input()
764 verdict = net_icmpv6_input(pkt, hdr); in net_ipv6_input()
767 proto_hdr.tcp = net_tcp_input(pkt, &tcp_access); in net_ipv6_input()
775 proto_hdr.udp = net_udp_input(pkt, &udp_access); in net_ipv6_input()
792 net_pkt_set_remote_address(pkt, (struct sockaddr *)&remote_addr, in net_ipv6_input()
796 net_pkt_cursor_restore(pkt, &hdr_start); in net_ipv6_input()
797 net_pkt_pull(pkt, net_pkt_ip_hdr_len(pkt) + in net_ipv6_input()
798 net_pkt_ipv6_ext_len(pkt)); in net_ipv6_input()
800 tunnel_iface = net_ipip_get_virtual_interface(net_pkt_iface(pkt)); in net_ipv6_input()
802 return net_if_l2(tunnel_iface)->recv(net_pkt_iface(pkt), pkt); in net_ipv6_input()
818 verdict = net_conn_input(pkt, &ip, current_hdr, &proto_hdr); in net_ipv6_input()
832 net_icmpv6_send_error(pkt, NET_ICMPV6_PARAM_PROBLEM, in net_ipv6_input()
834 net_pkt_get_current_offset(pkt) - 1); in net_ipv6_input()