Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ce84604 authored by Yotam Gigi's avatar Yotam Gigi Committed by David S. Miller
Browse files

net: Introduce ife encapsulation module



This module is responsible for the ife encapsulation protocol
encode/decode logics. That module can:
 - ife_encode: encode skb and reserve space for the ife meta header
 - ife_decode: decode skb and extract the meta header size
 - ife_tlv_meta_encode - encodes one tlv entry into the reserved ife
   header space.
 - ife_tlv_meta_decode - decodes one tlv entry from the packet
 - ife_tlv_meta_next - advance to the next tlv

Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarYotam Gigi <yotamg@mellanox.com>
Signed-off-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: default avatarRoman Mashak <mrv@mojatatu.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1d5e7c85
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -6250,6 +6250,13 @@ F: include/net/cfg802154.h
F:	include/net/ieee802154_netdev.h
F:	Documentation/networking/ieee802154.txt

IFE PROTOCOL
M:	Yotam Gigi <yotamg@mellanox.com>
M:	Jamal Hadi Salim <jhs@mojatatu.com>
F:	net/ife
F:	include/net/ife.h
F:	include/uapi/linux/ife.h

IGORPLUG-USB IR RECEIVER
M:	Sean Young <sean@mess.org>
L:	linux-media@vger.kernel.org

include/net/ife.h

0 → 100644
+51 −0
Original line number Diff line number Diff line
#ifndef __NET_IFE_H
#define __NET_IFE_H

#include <linux/etherdevice.h>
#include <linux/rtnetlink.h>
#include <linux/module.h>
#include <uapi/linux/ife.h>

#if IS_ENABLED(CONFIG_NET_IFE)

void *ife_encode(struct sk_buff *skb, u16 metalen);
void *ife_decode(struct sk_buff *skb, u16 *metalen);

void *ife_tlv_meta_decode(void *skbdata, u16 *attrtype, u16 *dlen, u16 *totlen);
int ife_tlv_meta_encode(void *skbdata, u16 attrtype, u16 dlen,
			const void *dval);

void *ife_tlv_meta_next(void *skbdata);

#else

static inline void *ife_encode(struct sk_buff *skb, u16 metalen)
{
	return NULL;
}

static inline void *ife_decode(struct sk_buff *skb, u16 *metalen)
{
	return NULL;
}

static inline void *ife_tlv_meta_decode(void *skbdata, u16 *attrtype, u16 *dlen,
					u16 *totlen)
{
	return NULL;
}

static inline int ife_tlv_meta_encode(void *skbdata, u16 attrtype, u16 dlen,
			const void *dval)
{
	return 0;
}

static inline void *ife_tlv_meta_next(void *skbdata)
{
	return NULL;
}

#endif

#endif /* __NET_IFE_H */
+1 −0
Original line number Diff line number Diff line
@@ -195,6 +195,7 @@ header-y += if_tun.h
header-y += if_tunnel.h
header-y += if_vlan.h
header-y += if_x25.h
header-y += ife.h
header-y += igmp.h
header-y += ila.h
header-y += in6.h
+18 −0
Original line number Diff line number Diff line
#ifndef __UAPI_IFE_H
#define __UAPI_IFE_H

#define IFE_METAHDRLEN 2

enum {
	IFE_META_SKBMARK = 1,
	IFE_META_HASHID,
	IFE_META_PRIO,
	IFE_META_QMAP,
	IFE_META_TCINDEX,
	__IFE_META_MAX
};

/*Can be overridden at runtime by module option*/
#define IFE_META_MAX (__IFE_META_MAX - 1)

#endif
+1 −0
Original line number Diff line number Diff line
@@ -391,6 +391,7 @@ source "net/caif/Kconfig"
source "net/ceph/Kconfig"
source "net/nfc/Kconfig"
source "net/psample/Kconfig"
source "net/ife/Kconfig"

config LWTUNNEL
	bool "Network light weight tunnels"
Loading