Lines Matching +full:en +full:- +full:global

1 // SPDX-License-Identifier: GPL-2.0-or-later
30 static unsigned int mpls_encap_size(struct mpls_iptunnel_encap *en) in mpls_encap_size() argument
33 return en->labels * sizeof(struct mpls_shim_hdr); in mpls_encap_size()
55 out_dev = dst->dev; in mpls_xmit()
61 !dst->lwtstate || skb_warn_if_lro(skb)) in mpls_xmit()
66 tun_encap_info = mpls_lwtunnel_encap(dst->lwtstate); in mpls_xmit()
71 * - disabled => use default TTL value from LWT in mpls_xmit()
72 * - enabled => use TTL value from IPv4/IPv6 header in mpls_xmit()
73 * - default => in mpls_xmit()
74 * Global ttl propagation setting: in mpls_xmit()
75 * - disabled => use default TTL value from global setting in mpls_xmit()
76 * - enabled => use TTL value from IPv4/IPv6 header in mpls_xmit()
78 if (dst->ops->family == AF_INET) { in mpls_xmit()
79 if (tun_encap_info->ttl_propagate == MPLS_TTL_PROP_DISABLED) in mpls_xmit()
80 ttl = tun_encap_info->default_ttl; in mpls_xmit()
81 else if (tun_encap_info->ttl_propagate == MPLS_TTL_PROP_DEFAULT && in mpls_xmit()
82 !net->mpls.ip_ttl_propagate) in mpls_xmit()
83 ttl = net->mpls.default_ttl; in mpls_xmit()
85 ttl = ip_hdr(skb)->ttl; in mpls_xmit()
87 } else if (dst->ops->family == AF_INET6) { in mpls_xmit()
88 if (tun_encap_info->ttl_propagate == MPLS_TTL_PROP_DISABLED) in mpls_xmit()
89 ttl = tun_encap_info->default_ttl; in mpls_xmit()
90 else if (tun_encap_info->ttl_propagate == MPLS_TTL_PROP_DEFAULT && in mpls_xmit()
91 !net->mpls.ip_ttl_propagate) in mpls_xmit()
92 ttl = net->mpls.default_ttl; in mpls_xmit()
94 ttl = ipv6_hdr(skb)->hop_limit; in mpls_xmit()
103 if (mpls_pkt_too_big(skb, mtu - new_header_size)) in mpls_xmit()
107 if (!out_dev->header_ops) in mpls_xmit()
114 skb_set_inner_protocol(skb, skb->protocol); in mpls_xmit()
121 skb->dev = out_dev; in mpls_xmit()
122 skb->protocol = htons(ETH_P_MPLS_UC); in mpls_xmit()
127 for (i = tun_encap_info->labels - 1; i >= 0; i--) { in mpls_xmit()
128 hdr[i] = mpls_entry_encode(tun_encap_info->label[i], in mpls_xmit()
136 if (rt->rt_gw_family == AF_INET6) in mpls_xmit()
137 err = neigh_xmit(NEIGH_ND_TABLE, out_dev, &rt->rt_gw6, in mpls_xmit()
140 err = neigh_xmit(NEIGH_ARP_TABLE, out_dev, &rt->rt_gw4, in mpls_xmit()
143 if (ipv6_addr_v4mapped(&rt6->rt6i_gateway)) { in mpls_xmit()
145 err = neigh_xmit(NEIGH_ARP_TABLE, out_dev, &rt6->rt6i_gateway.s6_addr32[3], in mpls_xmit()
148 err = neigh_xmit(NEIGH_ND_TABLE, out_dev, &rt6->rt6i_gateway, in mpls_xmit()
162 return -EINVAL; in mpls_xmit()
183 return -EINVAL; in mpls_build_state()
189 return -EINVAL; in mpls_build_state()
194 return -ENOMEM; in mpls_build_state()
198 &tun_encap_info->labels, tun_encap_info->label, in mpls_build_state()
203 tun_encap_info->ttl_propagate = MPLS_TTL_PROP_DEFAULT; in mpls_build_state()
206 tun_encap_info->default_ttl = nla_get_u8(tb[MPLS_IPTUNNEL_TTL]); in mpls_build_state()
208 tun_encap_info->ttl_propagate = tun_encap_info->default_ttl ? in mpls_build_state()
213 newts->type = LWTUNNEL_ENCAP_MPLS; in mpls_build_state()
214 newts->flags |= LWTUNNEL_STATE_XMIT_REDIRECT; in mpls_build_state()
215 newts->headroom = mpls_encap_size(tun_encap_info); in mpls_build_state()
235 if (nla_put_labels(skb, MPLS_IPTUNNEL_DST, tun_encap_info->labels, in mpls_fill_encap_info()
236 tun_encap_info->label)) in mpls_fill_encap_info()
239 if (tun_encap_info->ttl_propagate != MPLS_TTL_PROP_DEFAULT && in mpls_fill_encap_info()
240 nla_put_u8(skb, MPLS_IPTUNNEL_TTL, tun_encap_info->default_ttl)) in mpls_fill_encap_info()
246 return -EMSGSIZE; in mpls_fill_encap_info()
256 nlsize = nla_total_size(tun_encap_info->labels * 4); in mpls_encap_nlsize()
258 if (tun_encap_info->ttl_propagate != MPLS_TTL_PROP_DEFAULT) in mpls_encap_nlsize()
270 if (a_hdr->labels != b_hdr->labels || in mpls_encap_cmp()
271 a_hdr->ttl_propagate != b_hdr->ttl_propagate || in mpls_encap_cmp()
272 a_hdr->default_ttl != b_hdr->default_ttl) in mpls_encap_cmp()
275 for (l = 0; l < a_hdr->labels; l++) in mpls_encap_cmp()
276 if (a_hdr->label[l] != b_hdr->label[l]) in mpls_encap_cmp()