Commit 7b34e449 authored by Justin Iurman's avatar Justin Iurman Committed by David S. Miller
Browse files

ipv6: ioam: Prerequisite patch for ioam6_iptunnel



This prerequisite patch provides some minor edits (alignments, renames) and a
minor modification inside a function to facilitate the next patch by using
existing nla_* functions.

Signed-off-by: default avatarJustin Iurman <justin.iurman@uliege.be>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 52d03786
Loading
Loading
Loading
Loading
+20 −35
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/net.h>
#include <linux/netlink.h>
#include <linux/in6.h>
#include <linux/ioam6.h>
#include <linux/ioam6_iptunnel.h>
@@ -17,6 +16,7 @@
#include <net/sock.h>
#include <net/lwtunnel.h>
#include <net/ioam6.h>
#include <net/netlink.h>

#define IOAM6_MASK_SHORT_FIELDS 0xff100000
#define IOAM6_MASK_WIDE_FIELDS 0xe00000
@@ -42,7 +42,7 @@ static struct ioam6_lwt_encap *ioam6_lwt_info(struct lwtunnel_state *lwt)
	return &ioam6_lwt_state(lwt)->tuninfo;
}

static struct ioam6_trace_hdr *ioam6_trace(struct lwtunnel_state *lwt)
static struct ioam6_trace_hdr *ioam6_lwt_trace(struct lwtunnel_state *lwt)
{
	return &(ioam6_lwt_state(lwt)->tuninfo.traceh);
}
@@ -51,25 +51,6 @@ static const struct nla_policy ioam6_iptunnel_policy[IOAM6_IPTUNNEL_MAX + 1] = {
	[IOAM6_IPTUNNEL_TRACE]	= NLA_POLICY_EXACT_LEN(sizeof(struct ioam6_trace_hdr)),
};

static int nla_put_ioam6_trace(struct sk_buff *skb, int attrtype,
			       struct ioam6_trace_hdr *trace)
{
	struct ioam6_trace_hdr *data;
	struct nlattr *nla;
	int len;

	len = sizeof(*trace);

	nla = nla_reserve(skb, attrtype, len);
	if (!nla)
		return -EMSGSIZE;

	data = nla_data(nla);
	memcpy(data, trace, len);

	return 0;
}

static bool ioam6_validate_trace_hdr(struct ioam6_trace_hdr *trace)
{
	u32 fields;
@@ -231,25 +212,29 @@ static int ioam6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
static int ioam6_fill_encap_info(struct sk_buff *skb,
				 struct lwtunnel_state *lwtstate)
{
	struct ioam6_trace_hdr *trace = ioam6_trace(lwtstate);
	struct ioam6_trace_hdr *trace;
	int err;

	if (nla_put_ioam6_trace(skb, IOAM6_IPTUNNEL_TRACE, trace))
		return -EMSGSIZE;
	trace = ioam6_lwt_trace(lwtstate);

	err = nla_put(skb, IOAM6_IPTUNNEL_TRACE, sizeof(*trace), trace);
	if (err)
		return err;

	return 0;
}

static int ioam6_encap_nlsize(struct lwtunnel_state *lwtstate)
{
	struct ioam6_trace_hdr *trace = ioam6_trace(lwtstate);
	struct ioam6_trace_hdr *trace = ioam6_lwt_trace(lwtstate);

	return nla_total_size(sizeof(*trace));
}

static int ioam6_encap_cmp(struct lwtunnel_state *a, struct lwtunnel_state *b)
{
	struct ioam6_trace_hdr *a_hdr = ioam6_trace(a);
	struct ioam6_trace_hdr *b_hdr = ioam6_trace(b);
	struct ioam6_trace_hdr *a_hdr = ioam6_lwt_trace(a);
	struct ioam6_trace_hdr *b_hdr = ioam6_lwt_trace(b);

	return (a_hdr->namespace_id != b_hdr->namespace_id);
}