Lines Matching refs:tunnel

75 static bool check_6rd(struct ip_tunnel *tunnel, const struct in6_addr *v6dst,
469 struct ip_tunnel *tunnel = netdev_priv(dev); in ipip6_tunnel_uninit() local
470 struct sit_net *sitn = net_generic(tunnel->net, sit_net_id); in ipip6_tunnel_uninit()
475 ipip6_tunnel_unlink(sitn, tunnel); in ipip6_tunnel_uninit()
476 ipip6_tunnel_del_prl(tunnel, NULL); in ipip6_tunnel_uninit()
478 ip_tunnel_dst_reset_all(tunnel); in ipip6_tunnel_uninit()
593 static inline bool is_spoofed_6rd(struct ip_tunnel *tunnel, const __be32 v4addr, in is_spoofed_6rd() argument
597 if (check_6rd(tunnel, v6addr, &v4embed) && v4addr != v4embed) in is_spoofed_6rd()
614 static bool only_dnatted(const struct ip_tunnel *tunnel, in only_dnatted() argument
620 prefix_len = tunnel->ip6rd.prefixlen + 32 in only_dnatted()
621 - tunnel->ip6rd.relay_prefixlen; in only_dnatted()
625 return ipv6_chk_custom_prefix(v6dst, prefix_len, tunnel->dev); in only_dnatted()
631 struct ip_tunnel *tunnel) in packet_is_spoofed() argument
635 if (tunnel->dev->priv_flags & IFF_ISATAP) { in packet_is_spoofed()
636 if (!isatap_chksrc(skb, iph, tunnel)) in packet_is_spoofed()
642 if (tunnel->dev->flags & IFF_POINTOPOINT) in packet_is_spoofed()
647 if (unlikely(is_spoofed_6rd(tunnel, iph->saddr, &ipv6h->saddr))) { in packet_is_spoofed()
654 if (likely(!is_spoofed_6rd(tunnel, iph->daddr, &ipv6h->daddr))) in packet_is_spoofed()
657 if (only_dnatted(tunnel, &ipv6h->daddr)) in packet_is_spoofed()
669 struct ip_tunnel *tunnel; in ipip6_rcv() local
672 tunnel = ipip6_tunnel_lookup(dev_net(skb->dev), skb->dev, in ipip6_rcv()
674 if (tunnel) { in ipip6_rcv()
677 if (tunnel->parms.iph.protocol != IPPROTO_IPV6 && in ipip6_rcv()
678 tunnel->parms.iph.protocol != 0) in ipip6_rcv()
686 if (packet_is_spoofed(skb, iph, tunnel)) { in ipip6_rcv()
687 tunnel->dev->stats.rx_errors++; in ipip6_rcv()
691 __skb_tunnel_rx(skb, tunnel->dev, tunnel->net); in ipip6_rcv()
699 ++tunnel->dev->stats.rx_frame_errors; in ipip6_rcv()
700 ++tunnel->dev->stats.rx_errors; in ipip6_rcv()
705 tstats = this_cpu_ptr(tunnel->dev->tstats); in ipip6_rcv()
731 struct ip_tunnel *tunnel; in ipip_rcv() local
734 tunnel = ipip6_tunnel_lookup(dev_net(skb->dev), skb->dev, in ipip_rcv()
736 if (tunnel) { in ipip_rcv()
737 if (tunnel->parms.iph.protocol != IPPROTO_IPIP && in ipip_rcv()
738 tunnel->parms.iph.protocol != 0) in ipip_rcv()
745 return ip_tunnel_rcv(tunnel, skb, &tpi, log_ecn_error); in ipip_rcv()
759 static bool check_6rd(struct ip_tunnel *tunnel, const struct in6_addr *v6dst, in check_6rd() argument
763 if (ipv6_prefix_equal(v6dst, &tunnel->ip6rd.prefix, in check_6rd()
764 tunnel->ip6rd.prefixlen)) { in check_6rd()
769 pbw0 = tunnel->ip6rd.prefixlen >> 5; in check_6rd()
770 pbi0 = tunnel->ip6rd.prefixlen & 0x1f; in check_6rd()
773 tunnel->ip6rd.relay_prefixlen; in check_6rd()
775 pbi1 = pbi0 - tunnel->ip6rd.relay_prefixlen; in check_6rd()
780 *v4dst = tunnel->ip6rd.relay_prefix | htonl(d); in check_6rd()
793 static inline __be32 try_6rd(struct ip_tunnel *tunnel, in try_6rd() argument
797 check_6rd(tunnel, v6dst, &dst); in try_6rd()
809 struct ip_tunnel *tunnel = netdev_priv(dev); in ipip6_tunnel_xmit() local
810 const struct iphdr *tiph = &tunnel->parms.iph; in ipip6_tunnel_xmit()
812 u8 tos = tunnel->parms.iph.tos; in ipip6_tunnel_xmit()
825 int t_hlen = tunnel->hlen + sizeof(struct iphdr); in ipip6_tunnel_xmit()
861 dst = try_6rd(tunnel, &iph6->daddr); in ipip6_tunnel_xmit()
893 rt = ip_route_output_ports(tunnel->net, &fl4, NULL, in ipip6_tunnel_xmit()
897 tunnel->parms.link); in ipip6_tunnel_xmit()
935 if (tunnel->parms.iph.daddr && skb_dst(skb)) in ipip6_tunnel_xmit()
945 if (tunnel->err_count > 0) { in ipip6_tunnel_xmit()
947 tunnel->err_time + IPTUNNEL_ERR_TIMEO)) { in ipip6_tunnel_xmit()
948 tunnel->err_count--; in ipip6_tunnel_xmit()
951 tunnel->err_count = 0; in ipip6_tunnel_xmit()
979 if (ip_tunnel_encap(skb, tunnel, &protocol, &fl4) < 0) { in ipip6_tunnel_xmit()
988 !net_eq(tunnel->net, dev_net(dev))); in ipip6_tunnel_xmit()
1003 struct ip_tunnel *tunnel = netdev_priv(dev); in ipip_tunnel_xmit() local
1004 const struct iphdr *tiph = &tunnel->parms.iph; in ipip_tunnel_xmit()
1045 struct ip_tunnel *tunnel; in ipip6_tunnel_bind_dev() local
1049 tunnel = netdev_priv(dev); in ipip6_tunnel_bind_dev()
1050 iph = &tunnel->parms.iph; in ipip6_tunnel_bind_dev()
1053 struct rtable *rt = ip_route_output_ports(tunnel->net, &fl4, in ipip6_tunnel_bind_dev()
1059 tunnel->parms.link); in ipip6_tunnel_bind_dev()
1068 if (!tdev && tunnel->parms.link) in ipip6_tunnel_bind_dev()
1069 tdev = __dev_get_by_index(tunnel->net, tunnel->parms.link); in ipip6_tunnel_bind_dev()
1072 int t_hlen = tunnel->hlen + sizeof(struct iphdr); in ipip6_tunnel_bind_dev()
1322 struct ip_tunnel *tunnel = netdev_priv(dev); in ipip6_tunnel_change_mtu() local
1323 int t_hlen = tunnel->hlen + sizeof(struct iphdr); in ipip6_tunnel_change_mtu()
1343 struct ip_tunnel *tunnel = netdev_priv(dev); in ipip6_dev_free() local
1345 free_percpu(tunnel->dst_cache); in ipip6_dev_free()
1358 struct ip_tunnel *tunnel = netdev_priv(dev); in ipip6_tunnel_setup() local
1359 int t_hlen = tunnel->hlen + sizeof(struct iphdr); in ipip6_tunnel_setup()
1377 struct ip_tunnel *tunnel = netdev_priv(dev); in ipip6_tunnel_init() local
1379 tunnel->dev = dev; in ipip6_tunnel_init()
1380 tunnel->net = dev_net(dev); in ipip6_tunnel_init()
1381 strcpy(tunnel->parms.name, dev->name); in ipip6_tunnel_init()
1388 tunnel->dst_cache = alloc_percpu(struct ip_tunnel_dst); in ipip6_tunnel_init()
1389 if (!tunnel->dst_cache) { in ipip6_tunnel_init()
1399 struct ip_tunnel *tunnel = netdev_priv(dev); in ipip6_fb_tunnel_init() local
1400 struct iphdr *iph = &tunnel->parms.iph; in ipip6_fb_tunnel_init()
1410 rcu_assign_pointer(sitn->tunnels_wc[0], tunnel); in ipip6_fb_tunnel_init()
1666 struct ip_tunnel *tunnel = netdev_priv(dev); in ipip6_fill_info() local
1667 struct ip_tunnel_parm *parm = &tunnel->parms; in ipip6_fill_info()
1682 &tunnel->ip6rd.prefix) || in ipip6_fill_info()
1684 tunnel->ip6rd.relay_prefix) || in ipip6_fill_info()
1686 tunnel->ip6rd.prefixlen) || in ipip6_fill_info()
1688 tunnel->ip6rd.relay_prefixlen)) in ipip6_fill_info()
1693 tunnel->encap.type) || in ipip6_fill_info()
1695 tunnel->encap.sport) || in ipip6_fill_info()
1697 tunnel->encap.dport) || in ipip6_fill_info()
1699 tunnel->encap.flags)) in ipip6_fill_info()