Lines Matching +full:light +full:- +full:weight
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * mpls tunnels An implementation mpls tunnels using the light weight tunnel
33 return en->labels * sizeof(struct mpls_shim_hdr); in mpls_encap_size()
55 out_dev = dst->dev; in mpls_xmit()
59 !dst->lwtstate || skb_warn_if_lro(skb)) in mpls_xmit()
64 tun_encap_info = mpls_lwtunnel_encap(dst->lwtstate); in mpls_xmit()
69 * - disabled => use default TTL value from LWT in mpls_xmit()
70 * - enabled => use TTL value from IPv4/IPv6 header in mpls_xmit()
71 * - default => in mpls_xmit()
73 * - disabled => use default TTL value from global setting in mpls_xmit()
74 * - enabled => use TTL value from IPv4/IPv6 header in mpls_xmit()
76 if (dst->ops->family == AF_INET) { in mpls_xmit()
77 if (tun_encap_info->ttl_propagate == MPLS_TTL_PROP_DISABLED) in mpls_xmit()
78 ttl = tun_encap_info->default_ttl; in mpls_xmit()
79 else if (tun_encap_info->ttl_propagate == MPLS_TTL_PROP_DEFAULT && in mpls_xmit()
80 !net->mpls.ip_ttl_propagate) in mpls_xmit()
81 ttl = net->mpls.default_ttl; in mpls_xmit()
83 ttl = ip_hdr(skb)->ttl; in mpls_xmit()
85 } else if (dst->ops->family == AF_INET6) { in mpls_xmit()
86 if (tun_encap_info->ttl_propagate == MPLS_TTL_PROP_DISABLED) in mpls_xmit()
87 ttl = tun_encap_info->default_ttl; in mpls_xmit()
88 else if (tun_encap_info->ttl_propagate == MPLS_TTL_PROP_DEFAULT && in mpls_xmit()
89 !net->mpls.ip_ttl_propagate) in mpls_xmit()
90 ttl = net->mpls.default_ttl; in mpls_xmit()
92 ttl = ipv6_hdr(skb)->hop_limit; in mpls_xmit()
101 if (mpls_pkt_too_big(skb, mtu - new_header_size)) in mpls_xmit()
105 if (!out_dev->header_ops) in mpls_xmit()
112 skb_set_inner_protocol(skb, skb->protocol); in mpls_xmit()
119 skb->dev = out_dev; in mpls_xmit()
120 skb->protocol = htons(ETH_P_MPLS_UC); in mpls_xmit()
125 for (i = tun_encap_info->labels - 1; i >= 0; i--) { in mpls_xmit()
126 hdr[i] = mpls_entry_encode(tun_encap_info->label[i], in mpls_xmit()
134 if (rt->rt_gw_family == AF_INET6) in mpls_xmit()
135 err = neigh_xmit(NEIGH_ND_TABLE, out_dev, &rt->rt_gw6, in mpls_xmit()
138 err = neigh_xmit(NEIGH_ARP_TABLE, out_dev, &rt->rt_gw4, in mpls_xmit()
141 if (ipv6_addr_v4mapped(&rt6->rt6i_gateway)) { in mpls_xmit()
143 err = neigh_xmit(NEIGH_ARP_TABLE, out_dev, &rt6->rt6i_gateway.s6_addr32[3], in mpls_xmit()
146 err = neigh_xmit(NEIGH_ND_TABLE, out_dev, &rt6->rt6i_gateway, in mpls_xmit()
160 return -EINVAL; in mpls_xmit()
181 return -EINVAL; in mpls_build_state()
187 return -EINVAL; in mpls_build_state()
192 return -ENOMEM; in mpls_build_state()
196 &tun_encap_info->labels, tun_encap_info->label, in mpls_build_state()
201 tun_encap_info->ttl_propagate = MPLS_TTL_PROP_DEFAULT; in mpls_build_state()
204 tun_encap_info->default_ttl = nla_get_u8(tb[MPLS_IPTUNNEL_TTL]); in mpls_build_state()
206 tun_encap_info->ttl_propagate = tun_encap_info->default_ttl ? in mpls_build_state()
211 newts->type = LWTUNNEL_ENCAP_MPLS; in mpls_build_state()
212 newts->flags |= LWTUNNEL_STATE_XMIT_REDIRECT; in mpls_build_state()
213 newts->headroom = mpls_encap_size(tun_encap_info); in mpls_build_state()
233 if (nla_put_labels(skb, MPLS_IPTUNNEL_DST, tun_encap_info->labels, in mpls_fill_encap_info()
234 tun_encap_info->label)) in mpls_fill_encap_info()
237 if (tun_encap_info->ttl_propagate != MPLS_TTL_PROP_DEFAULT && in mpls_fill_encap_info()
238 nla_put_u8(skb, MPLS_IPTUNNEL_TTL, tun_encap_info->default_ttl)) in mpls_fill_encap_info()
244 return -EMSGSIZE; in mpls_fill_encap_info()
254 nlsize = nla_total_size(tun_encap_info->labels * 4); in mpls_encap_nlsize()
256 if (tun_encap_info->ttl_propagate != MPLS_TTL_PROP_DEFAULT) in mpls_encap_nlsize()
268 if (a_hdr->labels != b_hdr->labels || in mpls_encap_cmp()
269 a_hdr->ttl_propagate != b_hdr->ttl_propagate || in mpls_encap_cmp()
270 a_hdr->default_ttl != b_hdr->default_ttl) in mpls_encap_cmp()
273 for (l = 0; l < a_hdr->labels; l++) in mpls_encap_cmp()
274 if (a_hdr->label[l] != b_hdr->label[l]) in mpls_encap_cmp()