Lines Matching +full:super +full:- +full:frames

1 // SPDX-License-Identifier: GPL-2.0-or-later
11 * Donald Becker, <becker@super.org>
22 * Alan Cox : Frames with >=MAX_ROUTE record routes, strict routes or loose routes
24 * Alan Cox : Frames to bad broadcast subnets are dumped
33 * Gerhard Koerting: Forward fragmented frames correctly.
34 * Gerhard Koerting: Fixes to my fix of the above 8-).
57 * Alan Cox : IP options adjust sk->priority.
76 * Alan Cox : Loopback didn't work right in original ip_build_xmit - fixed it.
79 * Alan Cox : Set saddr on raw output frames as per BSD.
151 u8 protocol = ip_hdr(skb)->protocol; in ip_call_ra_chain()
153 struct net_device *dev = skb->dev; in ip_call_ra_chain()
156 for (ra = rcu_dereference(net->ipv4.ra_chain); ra; ra = rcu_dereference(ra->next)) { in ip_call_ra_chain()
157 struct sock *sk = ra->sk; in ip_call_ra_chain()
162 if (sk && inet_sk(sk)->inet_num == protocol && in ip_call_ra_chain()
163 (!sk->sk_bound_dev_if || in ip_call_ra_chain()
164 sk->sk_bound_dev_if == dev->ifindex)) { in ip_call_ra_chain()
197 if (!ipprot->no_policy) { in ip_protocol_deliver_rcu()
205 ret = INDIRECT_CALL_2(ipprot->handler, tcp_v4_rcv, udp_rcv, in ip_protocol_deliver_rcu()
208 protocol = -ret; in ip_protocol_deliver_rcu()
233 ip_protocol_deliver_rcu(net, skb, ip_hdr(skb)->protocol); in ip_local_deliver_finish()
247 struct net *net = dev_net(skb->dev); in ip_local_deliver()
255 net, NULL, skb, skb->dev, NULL, in ip_local_deliver()
270 --ANK (980813) in ip_rcv_options()
278 opt = &(IPCB(skb)->opt); in ip_rcv_options()
279 opt->optlen = iph->ihl*4 - sizeof(struct iphdr); in ip_rcv_options()
286 if (unlikely(opt->srr)) { in ip_rcv_options()
292 net_info_ratelimited("source route option %pI4 -> %pI4\n", in ip_rcv_options()
293 &iph->saddr, in ip_rcv_options()
294 &iph->daddr); in ip_rcv_options()
311 return hint && !skb_dst(skb) && ip_hdr(hint)->daddr == iph->daddr && in ip_can_use_hint()
312 ip_hdr(hint)->tos == iph->tos; in ip_can_use_hint()
326 drop_reason = ip_route_use_hint(skb, iph->daddr, iph->saddr, in ip_rcv_finish_core()
333 if (READ_ONCE(net->ipv4.sysctl_ip_early_demux) && in ip_rcv_finish_core()
335 !skb->sk && in ip_rcv_finish_core()
337 switch (iph->protocol) { in ip_rcv_finish_core()
339 if (READ_ONCE(net->ipv4.sysctl_tcp_early_demux)) { in ip_rcv_finish_core()
342 /* must reload iph, skb->head might have changed */ in ip_rcv_finish_core()
347 if (READ_ONCE(net->ipv4.sysctl_udp_early_demux)) { in ip_rcv_finish_core()
352 /* must reload iph, skb->head might have changed */ in ip_rcv_finish_core()
364 drop_reason = ip_route_input_noref(skb, iph->daddr, iph->saddr, in ip_rcv_finish_core()
373 IPCB(skb)->flags |= IPSKB_NOPOLICY; in ip_rcv_finish_core()
377 if (unlikely(skb_dst(skb)->tclassid)) { in ip_rcv_finish_core()
379 u32 idx = skb_dst(skb)->tclassid; in ip_rcv_finish_core()
381 st[idx&0xFF].o_bytes += skb->len; in ip_rcv_finish_core()
383 st[(idx>>16)&0xFF].i_bytes += skb->len; in ip_rcv_finish_core()
387 if (iph->ihl > 5 && ip_rcv_options(skb, dev)) in ip_rcv_finish_core()
391 if (rt->rt_type == RTN_MULTICAST) { in ip_rcv_finish_core()
392 __IP_UPD_PO_STATS(net, IPSTATS_MIB_INMCAST, skb->len); in ip_rcv_finish_core()
393 } else if (rt->rt_type == RTN_BROADCAST) { in ip_rcv_finish_core()
394 __IP_UPD_PO_STATS(net, IPSTATS_MIB_INBCAST, skb->len); in ip_rcv_finish_core()
395 } else if (skb->pkt_type == PACKET_BROADCAST || in ip_rcv_finish_core()
396 skb->pkt_type == PACKET_MULTICAST) { in ip_rcv_finish_core()
401 * When a host sends a datagram to a link-layer broadcast in ip_rcv_finish_core()
406 * via a link-layer broadcast (see Section 2.4) but does not in ip_rcv_finish_core()
411 * this is 802.11 protecting against cross-station spoofing (the in ip_rcv_finish_core()
412 * so-called "hole-196" attack) so do it for both. in ip_rcv_finish_core()
435 struct net_device *dev = skb->dev; in ip_rcv_finish()
463 if (skb->pkt_type == PACKET_OTHERHOST) { in ip_rcv_core()
464 dev_core_stats_rx_otherhost_dropped_inc(skb->dev); in ip_rcv_core()
469 __IP_UPD_PO_STATS(net, IPSTATS_MIB_IN, skb->len); in ip_rcv_core()
494 if (iph->ihl < 5 || iph->version != 4) in ip_rcv_core()
501 IPSTATS_MIB_NOECTPKTS + (iph->tos & INET_ECN_MASK), in ip_rcv_core()
502 max_t(unsigned short, 1, skb_shinfo(skb)->gso_segs)); in ip_rcv_core()
504 if (!pskb_may_pull(skb, iph->ihl*4)) in ip_rcv_core()
509 if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl))) in ip_rcv_core()
513 if (skb->len < len) { in ip_rcv_core()
517 } else if (len < (iph->ihl*4)) in ip_rcv_core()
522 * Note this now means skb->len holds ntohs(iph->tot_len). in ip_rcv_core()
530 skb->transport_header = skb->network_header + iph->ihl*4; in ip_rcv_core()
534 IPCB(skb)->iif = skb->skb_iif; in ip_rcv_core()
586 IPCB(skb)->flags & IPSKB_MULTIPATH) in ip_extract_route_hint()
599 struct net_device *dev = skb->dev; in ip_list_rcv_finish()
615 dst_rtable(dst)->rt_type); in ip_list_rcv_finish()
624 list_add_tail(&skb->list, &sublist); in ip_list_rcv_finish()
648 struct net_device *dev = skb->dev; in ip_list_rcv()
665 list_add_tail(&skb->list, &sublist); in ip_list_rcv()