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()
239 ip_protocol_deliver_rcu(net, skb, ip_hdr(skb)->protocol); in ip_local_deliver_finish()
253 struct net *net = dev_net(skb->dev); in ip_local_deliver()
261 net, NULL, skb, skb->dev, NULL, in ip_local_deliver()
276 --ANK (980813) in ip_rcv_options()
284 opt = &(IPCB(skb)->opt); in ip_rcv_options()
285 opt->optlen = iph->ihl*4 - sizeof(struct iphdr); in ip_rcv_options()
292 if (unlikely(opt->srr)) { in ip_rcv_options()
298 net_info_ratelimited("source route option %pI4 -> %pI4\n", in ip_rcv_options()
299 &iph->saddr, in ip_rcv_options()
300 &iph->daddr); in ip_rcv_options()
317 return hint && !skb_dst(skb) && ip_hdr(hint)->daddr == iph->daddr && in ip_can_use_hint()
318 ip_hdr(hint)->tos == iph->tos; in ip_can_use_hint()
332 drop_reason = ip_route_use_hint(skb, iph->daddr, iph->saddr, in ip_rcv_finish_core()
339 if (READ_ONCE(net->ipv4.sysctl_ip_early_demux) && in ip_rcv_finish_core()
341 !skb->sk && in ip_rcv_finish_core()
343 switch (iph->protocol) { in ip_rcv_finish_core()
345 if (READ_ONCE(net->ipv4.sysctl_tcp_early_demux)) { in ip_rcv_finish_core()
348 /* must reload iph, skb->head might have changed */ in ip_rcv_finish_core()
353 if (READ_ONCE(net->ipv4.sysctl_udp_early_demux)) { in ip_rcv_finish_core()
359 /* must reload iph, skb->head might have changed */ in ip_rcv_finish_core()
371 drop_reason = ip_route_input_noref(skb, iph->daddr, iph->saddr, in ip_rcv_finish_core()
380 IPCB(skb)->flags |= IPSKB_NOPOLICY; in ip_rcv_finish_core()
384 if (unlikely(skb_dst(skb)->tclassid)) { in ip_rcv_finish_core()
386 u32 idx = skb_dst(skb)->tclassid; in ip_rcv_finish_core()
388 st[idx&0xFF].o_bytes += skb->len; in ip_rcv_finish_core()
390 st[(idx>>16)&0xFF].i_bytes += skb->len; in ip_rcv_finish_core()
394 if (iph->ihl > 5 && ip_rcv_options(skb, dev)) in ip_rcv_finish_core()
398 if (rt->rt_type == RTN_MULTICAST) { in ip_rcv_finish_core()
399 __IP_UPD_PO_STATS(net, IPSTATS_MIB_INMCAST, skb->len); in ip_rcv_finish_core()
400 } else if (rt->rt_type == RTN_BROADCAST) { in ip_rcv_finish_core()
401 __IP_UPD_PO_STATS(net, IPSTATS_MIB_INBCAST, skb->len); in ip_rcv_finish_core()
402 } else if (skb->pkt_type == PACKET_BROADCAST || in ip_rcv_finish_core()
403 skb->pkt_type == PACKET_MULTICAST) { in ip_rcv_finish_core()
408 * When a host sends a datagram to a link-layer broadcast in ip_rcv_finish_core()
413 * via a link-layer broadcast (see Section 2.4) but does not in ip_rcv_finish_core()
418 * this is 802.11 protecting against cross-station spoofing (the in ip_rcv_finish_core()
419 * so-called "hole-196" attack) so do it for both. in ip_rcv_finish_core()
442 struct net_device *dev = skb->dev; in ip_rcv_finish()
470 if (skb->pkt_type == PACKET_OTHERHOST) { in ip_rcv_core()
471 dev_core_stats_rx_otherhost_dropped_inc(skb->dev); in ip_rcv_core()
476 __IP_UPD_PO_STATS(net, IPSTATS_MIB_IN, skb->len); in ip_rcv_core()
501 if (iph->ihl < 5 || iph->version != 4) in ip_rcv_core()
508 IPSTATS_MIB_NOECTPKTS + (iph->tos & INET_ECN_MASK), in ip_rcv_core()
509 max_t(unsigned short, 1, skb_shinfo(skb)->gso_segs)); in ip_rcv_core()
511 if (!pskb_may_pull(skb, iph->ihl*4)) in ip_rcv_core()
516 if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl))) in ip_rcv_core()
520 if (skb->len < len) { in ip_rcv_core()
524 } else if (len < (iph->ihl*4)) in ip_rcv_core()
529 * Note this now means skb->len holds ntohs(iph->tot_len). in ip_rcv_core()
537 skb->transport_header = skb->network_header + iph->ihl*4; in ip_rcv_core()
541 IPCB(skb)->iif = skb->skb_iif; in ip_rcv_core()
593 IPCB(skb)->flags & IPSKB_MULTIPATH) in ip_extract_route_hint()
606 struct net_device *dev = skb->dev; in ip_list_rcv_finish()
622 dst_rtable(dst)->rt_type); in ip_list_rcv_finish()
631 list_add_tail(&skb->list, &sublist); in ip_list_rcv_finish()
655 struct net_device *dev = skb->dev; in ip_list_rcv()
672 list_add_tail(&skb->list, &sublist); in ip_list_rcv()