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.
153 u8 protocol = ip_hdr(skb)->protocol; in ip_call_ra_chain()
155 struct net_device *dev = skb->dev; in ip_call_ra_chain()
158 for (ra = rcu_dereference(net->ipv4.ra_chain); ra; ra = rcu_dereference(ra->next)) { in ip_call_ra_chain()
159 struct sock *sk = ra->sk; in ip_call_ra_chain()
164 if (sk && inet_sk(sk)->inet_num == protocol && in ip_call_ra_chain()
165 (!sk->sk_bound_dev_if || in ip_call_ra_chain()
166 sk->sk_bound_dev_if == dev->ifindex)) { in ip_call_ra_chain()
199 if (!ipprot->no_policy) { in ip_protocol_deliver_rcu()
207 ret = INDIRECT_CALL_2(ipprot->handler, tcp_v4_rcv, udp_rcv, in ip_protocol_deliver_rcu()
210 protocol = -ret; in ip_protocol_deliver_rcu()
241 ip_protocol_deliver_rcu(net, skb, ip_hdr(skb)->protocol); in ip_local_deliver_finish()
255 struct net *net = dev_net(skb->dev); in ip_local_deliver()
263 net, NULL, skb, skb->dev, NULL, in ip_local_deliver()
279 --ANK (980813) in ip_rcv_options()
287 opt = &(IPCB(skb)->opt); in ip_rcv_options()
288 opt->optlen = iph->ihl*4 - sizeof(struct iphdr); in ip_rcv_options()
295 if (unlikely(opt->srr)) { in ip_rcv_options()
301 net_info_ratelimited("source route option %pI4 -> %pI4\n", in ip_rcv_options()
302 &iph->saddr, in ip_rcv_options()
303 &iph->daddr); in ip_rcv_options()
318 return hint && !skb_dst(skb) && ip_hdr(hint)->daddr == iph->daddr && in ip_can_use_hint()
319 ip_hdr(hint)->tos == iph->tos; in ip_can_use_hint()
331 drop_reason = ip_route_use_hint(skb, iph->daddr, iph->saddr, in ip_rcv_finish_core()
337 if (READ_ONCE(net->ipv4.sysctl_ip_early_demux) && in ip_rcv_finish_core()
339 !skb->sk && in ip_rcv_finish_core()
341 switch (iph->protocol) { in ip_rcv_finish_core()
343 if (READ_ONCE(net->ipv4.sysctl_tcp_early_demux)) { in ip_rcv_finish_core()
346 /* must reload iph, skb->head might have changed */ in ip_rcv_finish_core()
351 if (READ_ONCE(net->ipv4.sysctl_udp_early_demux)) { in ip_rcv_finish_core()
356 /* must reload iph, skb->head might have changed */ in ip_rcv_finish_core()
368 drop_reason = ip_route_input_noref(skb, iph->daddr, iph->saddr, in ip_rcv_finish_core()
376 IPCB(skb)->flags |= IPSKB_NOPOLICY; in ip_rcv_finish_core()
380 if (unlikely(skb_dst(skb)->tclassid)) { in ip_rcv_finish_core()
382 u32 idx = skb_dst(skb)->tclassid; in ip_rcv_finish_core()
384 st[idx&0xFF].o_bytes += skb->len; in ip_rcv_finish_core()
386 st[(idx>>16)&0xFF].i_bytes += skb->len; in ip_rcv_finish_core()
390 if (iph->ihl > 5) { in ip_rcv_finish_core()
397 if (rt->rt_type == RTN_MULTICAST) { in ip_rcv_finish_core()
398 __IP_UPD_PO_STATS(net, IPSTATS_MIB_INMCAST, skb->len); in ip_rcv_finish_core()
399 } else if (rt->rt_type == RTN_BROADCAST) { in ip_rcv_finish_core()
400 __IP_UPD_PO_STATS(net, IPSTATS_MIB_INBCAST, skb->len); in ip_rcv_finish_core()
401 } else if (skb->pkt_type == PACKET_BROADCAST || in ip_rcv_finish_core()
402 skb->pkt_type == PACKET_MULTICAST) { in ip_rcv_finish_core()
407 * When a host sends a datagram to a link-layer broadcast in ip_rcv_finish_core()
412 * via a link-layer broadcast (see Section 2.4) but does not in ip_rcv_finish_core()
417 * this is 802.11 protecting against cross-station spoofing (the in ip_rcv_finish_core()
418 * so-called "hole-196" attack) so do it for both. in ip_rcv_finish_core()
441 struct net_device *dev = skb->dev; in ip_rcv_finish()
469 if (skb->pkt_type == PACKET_OTHERHOST) { in ip_rcv_core()
470 dev_core_stats_rx_otherhost_dropped_inc(skb->dev); in ip_rcv_core()
475 __IP_UPD_PO_STATS(net, IPSTATS_MIB_IN, skb->len); in ip_rcv_core()
500 if (iph->ihl < 5 || iph->version != 4) in ip_rcv_core()
507 IPSTATS_MIB_NOECTPKTS + (iph->tos & INET_ECN_MASK), in ip_rcv_core()
508 max_t(unsigned short, 1, skb_shinfo(skb)->gso_segs)); in ip_rcv_core()
510 if (!pskb_may_pull(skb, iph->ihl*4)) in ip_rcv_core()
515 if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl))) in ip_rcv_core()
519 if (skb->len < len) { in ip_rcv_core()
523 } else if (len < (iph->ihl*4)) in ip_rcv_core()
528 * Note this now means skb->len holds ntohs(iph->tot_len). in ip_rcv_core()
536 skb->transport_header = skb->network_header + iph->ihl*4; in ip_rcv_core()
540 IPCB(skb)->iif = skb->skb_iif; in ip_rcv_core()
594 ipv4_is_lbcast(iph->daddr) || in ip_extract_route_hint()
595 ipv4_is_zeronet(iph->daddr) || in ip_extract_route_hint()
596 IPCB(skb)->flags & IPSKB_MULTIPATH) in ip_extract_route_hint()
609 struct net_device *dev = skb->dev; in ip_list_rcv_finish()
633 list_add_tail(&skb->list, &sublist); in ip_list_rcv_finish()
657 struct net_device *dev = skb->dev; in ip_list_rcv()
674 list_add_tail(&skb->list, &sublist); in ip_list_rcv()