Commit f7e3ac42 authored by Eli Cohen's avatar Eli Cohen Committed by Saeed Mahameed

net/mlx5e: Use generic API to build MPLS label

Make use of generic API mpls_entry_encode() to build mpls label and get
rid of local function.
Signed-off-by: default avatarEli Cohen <eli@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent 86ae579c
...@@ -25,35 +25,21 @@ static int init_encap_attr(struct net_device *tunnel_dev, ...@@ -25,35 +25,21 @@ static int init_encap_attr(struct net_device *tunnel_dev,
return 0; return 0;
} }
static inline __be32 mpls_label_id_field(__be32 label, u8 tos, u8 ttl)
{
u32 res;
/* mpls label is 32 bits long and construction as follows:
* 20 bits label
* 3 bits tos
* 1 bit bottom of stack. Since we support only one label, this bit is
* always set.
* 8 bits TTL
*/
res = be32_to_cpu(label) << 12 | 1 << 8 | (tos & 7) << 9 | ttl;
return cpu_to_be32(res);
}
static int generate_ip_tun_hdr(char buf[], static int generate_ip_tun_hdr(char buf[],
__u8 *ip_proto, __u8 *ip_proto,
struct mlx5e_encap_entry *r) struct mlx5e_encap_entry *r)
{ {
const struct ip_tunnel_key *tun_key = &r->tun_info->key; const struct ip_tunnel_key *tun_key = &r->tun_info->key;
__be32 tun_id = tunnel_id_to_key32(tun_key->tun_id);
struct udphdr *udp = (struct udphdr *)(buf); struct udphdr *udp = (struct udphdr *)(buf);
struct mpls_shim_hdr *mpls; struct mpls_shim_hdr *mpls;
u32 tun_id;
tun_id = be32_to_cpu(tunnel_id_to_key32(tun_key->tun_id));
mpls = (struct mpls_shim_hdr *)(udp + 1); mpls = (struct mpls_shim_hdr *)(udp + 1);
*ip_proto = IPPROTO_UDP; *ip_proto = IPPROTO_UDP;
udp->dest = tun_key->tp_dst; udp->dest = tun_key->tp_dst;
mpls->label_stack_entry = mpls_label_id_field(tun_id, tun_key->tos, tun_key->ttl); *mpls = mpls_entry_encode(tun_id, tun_key->ttl, tun_key->tos, true);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment