404

[ Avaa Bypassed ]




Upload:

Command:

botdev@18.227.114.67: ~ $
#ifndef __NET_NSH_H
#define __NET_NSH_H 1

#include <linux/skbuff.h>

/*
 * Network Service Header:
 *  0                   1                   2                   3
 *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 * |Ver|O|U|    TTL    |   Length  |U|U|U|U|MD Type| Next Protocol |
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 * |          Service Path Identifier (SPI)        | Service Index |
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 * |                                                               |
 * ~               Mandatory/Optional Context Headers              ~
 * |                                                               |
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *
 * Version: The version field is used to ensure backward compatibility
 * going forward with future NSH specification updates.  It MUST be set
 * to 0x0 by the sender, in this first revision of NSH.  Given the
 * widespread implementation of existing hardware that uses the first
 * nibble after an MPLS label stack for ECMP decision processing, this
 * document reserves version 01b and this value MUST NOT be used in
 * future versions of the protocol.  Please see [RFC7325] for further
 * discussion of MPLS-related forwarding requirements.
 *
 * O bit: Setting this bit indicates an Operations, Administration, and
 * Maintenance (OAM) packet.  The actual format and processing of SFC
 * OAM packets is outside the scope of this specification (see for
 * example [I-D.ietf-sfc-oam-framework] for one approach).
 *
 * The O bit MUST be set for OAM packets and MUST NOT be set for non-OAM
 * packets.  The O bit MUST NOT be modified along the SFP.
 *
 * SF/SFF/SFC Proxy/Classifier implementations that do not support SFC
 * OAM procedures SHOULD discard packets with O bit set, but MAY support
 * a configurable parameter to enable forwarding received SFC OAM
 * packets unmodified to the next element in the chain.  Forwarding OAM
 * packets unmodified by SFC elements that do not support SFC OAM
 * procedures may be acceptable for a subset of OAM functions, but can
 * result in unexpected outcomes for others, thus it is recommended to
 * analyze the impact of forwarding an OAM packet for all OAM functions
 * prior to enabling this behavior.  The configurable parameter MUST be
 * disabled by default.
 *
 * TTL: Indicates the maximum SFF hops for an SFP.  This field is used
 * for service plane loop detection.  The initial TTL value SHOULD be
 * configurable via the control plane; the configured initial value can
 * be specific to one or more SFPs.  If no initial value is explicitly
 * provided, the default initial TTL value of 63 MUST be used.  Each SFF
 * involved in forwarding an NSH packet MUST decrement the TTL value by
 * 1 prior to NSH forwarding lookup.  Decrementing by 1 from an incoming
 * value of 0 shall result in a TTL value of 63.  The packet MUST NOT be
 * forwarded if TTL is, after decrement, 0.
 *
 * All other flag fields, marked U, are unassigned and available for
 * future use, see Section 11.2.1.  Unassigned bits MUST be set to zero
 * upon origination, and MUST be ignored and preserved unmodified by
 * other NSH supporting elements.  Elements which do not understand the
 * meaning of any of these bits MUST NOT modify their actions based on
 * those unknown bits.
 *
 * Length: The total length, in 4-byte words, of NSH including the Base
 * Header, the Service Path Header, the Fixed Length Context Header or
 * Variable Length Context Header(s).  The length MUST be 0x6 for MD
 * Type equal to 0x1, and MUST be 0x2 or greater for MD Type equal to
 * 0x2.  The length of the NSH header MUST be an integer multiple of 4
 * bytes, thus variable length metadata is always padded out to a
 * multiple of 4 bytes.
 *
 * MD Type: Indicates the format of NSH beyond the mandatory Base Header
 * and the Service Path Header.  MD Type defines the format of the
 * metadata being carried.
 *
 * 0x0 - This is a reserved value.  Implementations SHOULD silently
 * discard packets with MD Type 0x0.
 *
 * 0x1 - This indicates that the format of the header includes a fixed
 * length Context Header (see Figure 4 below).
 *
 * 0x2 - This does not mandate any headers beyond the Base Header and
 * Service Path Header, but may contain optional variable length Context
 * Header(s).  The semantics of the variable length Context Header(s)
 * are not defined in this document.  The format of the optional
 * variable length Context Headers is provided in Section 2.5.1.
 *
 * 0xF - This value is reserved for experimentation and testing, as per
 * [RFC3692].  Implementations not explicitly configured to be part of
 * an experiment SHOULD silently discard packets with MD Type 0xF.
 *
 * Next Protocol: indicates the protocol type of the encapsulated data.
 * NSH does not alter the inner payload, and the semantics on the inner
 * protocol remain unchanged due to NSH service function chaining.
 * Please see the IANA Considerations section below, Section 11.2.5.
 *
 * This document defines the following Next Protocol values:
 *
 * 0x1: IPv4
 * 0x2: IPv6
 * 0x3: Ethernet
 * 0x4: NSH
 * 0x5: MPLS
 * 0xFE: Experiment 1
 * 0xFF: Experiment 2
 *
 * Packets with Next Protocol values not supported SHOULD be silently
 * dropped by default, although an implementation MAY provide a
 * configuration parameter to forward them.  Additionally, an
 * implementation not explicitly configured for a specific experiment
 * [RFC3692] SHOULD silently drop packets with Next Protocol values 0xFE
 * and 0xFF.
 *
 * Service Path Identifier (SPI): Identifies a service path.
 * Participating nodes MUST use this identifier for Service Function
 * Path selection.  The initial classifier MUST set the appropriate SPI
 * for a given classification result.
 *
 * Service Index (SI): Provides location within the SFP.  The initial
 * classifier for a given SFP SHOULD set the SI to 255, however the
 * control plane MAY configure the initial value of SI as appropriate
 * (i.e., taking into account the length of the service function path).
 * The Service Index MUST be decremented by a value of 1 by Service
 * Functions or by SFC Proxy nodes after performing required services
 * and the new decremented SI value MUST be used in the egress packet's
 * NSH.  The initial Classifier MUST send the packet to the first SFF in
 * the identified SFP for forwarding along an SFP.  If re-classification
 * occurs, and that re-classification results in a new SPI, the
 * (re)classifier is, in effect, the initial classifier for the
 * resultant SPI.
 *
 * The SI is used in conjunction the with Service Path Identifier for
 * Service Function Path Selection and for determining the next SFF/SF
 * in the path.  The SI is also valuable when troubleshooting or
 * reporting service paths.  Additionally, while the TTL field is the
 * main mechanism for service plane loop detection, the SI can also be
 * used for detecting service plane loops.
 *
 * When the Base Header specifies MD Type = 0x1, a Fixed Length Context
 * Header (16-bytes) MUST be present immediately following the Service
 * Path Header. The value of a Fixed Length Context
 * Header that carries no metadata MUST be set to zero.
 *
 * When the base header specifies MD Type = 0x2, zero or more Variable
 * Length Context Headers MAY be added, immediately following the
 * Service Path Header (see Figure 5).  Therefore, Length = 0x2,
 * indicates that only the Base Header followed by the Service Path
 * Header are present.  The optional Variable Length Context Headers
 * MUST be of an integer number of 4-bytes.  The base header Length
 * field MUST be used to determine the offset to locate the original
 * packet or frame for SFC nodes that require access to that
 * information.
 *
 * The format of the optional variable length Context Headers
 *
 *  0                   1                   2                   3
 *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 * |          Metadata Class       |      Type     |U|    Length   |
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 * |                      Variable Metadata                        |
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *
 * Metadata Class (MD Class): Defines the scope of the 'Type' field to
 * provide a hierarchical namespace.  The IANA Considerations
 * Section 11.2.4 defines how the MD Class values can be allocated to
 * standards bodies, vendors, and others.
 *
 * Type: Indicates the explicit type of metadata being carried.  The
 * definition of the Type is the responsibility of the MD Class owner.
 *
 * Unassigned bit: One unassigned bit is available for future use. This
 * bit MUST NOT be set, and MUST be ignored on receipt.
 *
 * Length: Indicates the length of the variable metadata, in bytes.  In
 * case the metadata length is not an integer number of 4-byte words,
 * the sender MUST add pad bytes immediately following the last metadata
 * byte to extend the metadata to an integer number of 4-byte words.
 * The receiver MUST round up the length field to the nearest 4-byte
 * word boundary, to locate and process the next field in the packet.
 * The receiver MUST access only those bytes in the metadata indicated
 * by the length field (i.e., actual number of bytes) and MUST ignore
 * the remaining bytes up to the nearest 4-byte word boundary.  The
 * Length may be 0 or greater.
 *
 * A value of 0 denotes a Context Header without a Variable Metadata
 * field.
 *
 * [0] https://datatracker.ietf.org/doc/draft-ietf-sfc-nsh/
 */

/**
 * struct nsh_md1_ctx - Keeps track of NSH context data
 * @nshc<1-4>: NSH Contexts.
 */
struct nsh_md1_ctx {
	__be32 context[4];
};

struct nsh_md2_tlv {
	__be16 md_class;
	u8 type;
	u8 length;
	u8 md_value[];
};

struct nshhdr {
	__be16 ver_flags_ttl_len;
	u8 mdtype;
	u8 np;
	__be32 path_hdr;
	union {
	    struct nsh_md1_ctx md1;
	    struct nsh_md2_tlv md2;
	};
};

/* Masking NSH header fields. */
#define NSH_VER_MASK       0xc000
#define NSH_VER_SHIFT      14
#define NSH_FLAGS_MASK     0x3000
#define NSH_FLAGS_SHIFT    12
#define NSH_TTL_MASK       0x0fc0
#define NSH_TTL_SHIFT      6
#define NSH_LEN_MASK       0x003f
#define NSH_LEN_SHIFT      0

#define NSH_MDTYPE_MASK    0x0f
#define NSH_MDTYPE_SHIFT   0

#define NSH_SPI_MASK       0xffffff00
#define NSH_SPI_SHIFT      8
#define NSH_SI_MASK        0x000000ff
#define NSH_SI_SHIFT       0

/* MD Type Registry. */
#define NSH_M_TYPE1     0x01
#define NSH_M_TYPE2     0x02
#define NSH_M_EXP1      0xFE
#define NSH_M_EXP2      0xFF

/* NSH Base Header Length */
#define NSH_BASE_HDR_LEN  8

/* NSH MD Type 1 header Length. */
#define NSH_M_TYPE1_LEN   24

/* NSH header maximum Length. */
#define NSH_HDR_MAX_LEN 256

/* NSH context headers maximum Length. */
#define NSH_CTX_HDRS_MAX_LEN 248

static inline struct nshhdr *nsh_hdr(struct sk_buff *skb)
{
	return (struct nshhdr *)skb_network_header(skb);
}

static inline u16 nsh_hdr_len(const struct nshhdr *nsh)
{
	return ((ntohs(nsh->ver_flags_ttl_len) & NSH_LEN_MASK)
		>> NSH_LEN_SHIFT) << 2;
}

static inline u8 nsh_get_ver(const struct nshhdr *nsh)
{
	return (ntohs(nsh->ver_flags_ttl_len) & NSH_VER_MASK)
		>> NSH_VER_SHIFT;
}

static inline u8 nsh_get_flags(const struct nshhdr *nsh)
{
	return (ntohs(nsh->ver_flags_ttl_len) & NSH_FLAGS_MASK)
		>> NSH_FLAGS_SHIFT;
}

static inline u8 nsh_get_ttl(const struct nshhdr *nsh)
{
	return (ntohs(nsh->ver_flags_ttl_len) & NSH_TTL_MASK)
		>> NSH_TTL_SHIFT;
}

static inline void __nsh_set_xflag(struct nshhdr *nsh, u16 xflag, u16 xmask)
{
	nsh->ver_flags_ttl_len
		= (nsh->ver_flags_ttl_len & ~htons(xmask)) | htons(xflag);
}

static inline void nsh_set_flags_and_ttl(struct nshhdr *nsh, u8 flags, u8 ttl)
{
	__nsh_set_xflag(nsh, ((flags << NSH_FLAGS_SHIFT) & NSH_FLAGS_MASK) |
			     ((ttl << NSH_TTL_SHIFT) & NSH_TTL_MASK),
			NSH_FLAGS_MASK | NSH_TTL_MASK);
}

static inline void nsh_set_flags_ttl_len(struct nshhdr *nsh, u8 flags,
					 u8 ttl, u8 len)
{
	len = len >> 2;
	__nsh_set_xflag(nsh, ((flags << NSH_FLAGS_SHIFT) & NSH_FLAGS_MASK) |
			     ((ttl << NSH_TTL_SHIFT) & NSH_TTL_MASK) |
			     ((len << NSH_LEN_SHIFT) & NSH_LEN_MASK),
			NSH_FLAGS_MASK | NSH_TTL_MASK | NSH_LEN_MASK);
}

int nsh_push(struct sk_buff *skb, const struct nshhdr *pushed_nh);
int nsh_pop(struct sk_buff *skb);

#endif /* __NET_NSH_H */

Filemanager

Name Type Size Permission Actions
9p Folder 0755
bluetooth Folder 0755
caif Folder 0755
iucv Folder 0755
netfilter Folder 0755
netns Folder 0755
nfc Folder 0755
phonet Folder 0755
sctp Folder 0755
tc_act Folder 0755
6lowpan.h File 10.03 KB 0644
Space.h File 1.15 KB 0644
act_api.h File 6.38 KB 0644
addrconf.h File 12.63 KB 0644
af_ieee802154.h File 1.55 KB 0644
af_rxrpc.h File 2.79 KB 0644
af_unix.h File 2.22 KB 0644
af_vsock.h File 7.21 KB 0644
ah.h File 382 B 0644
arp.h File 2 KB 0644
atmclip.h File 1.48 KB 0644
ax25.h File 15.02 KB 0644
ax88796.h File 998 B 0644
bond_3ad.h File 9.79 KB 0644
bond_alb.h File 6.6 KB 0644
bond_options.h File 3.92 KB 0644
bonding.h File 19.1 KB 0644
busy_poll.h File 3.81 KB 0644
calipso.h File 2.15 KB 0644
cfg80211-wext.h File 1.95 KB 0644
cfg80211.h File 221.24 KB 0644
cfg802154.h File 10.89 KB 0644
checksum.h File 4.76 KB 0644
cipso_ipv4.h File 8.2 KB 0644
cls_cgroup.h File 2.15 KB 0644
codel.h File 5.65 KB 0644
codel_impl.h File 7.98 KB 0644
codel_qdisc.h File 2.9 KB 0644
compat.h File 2.11 KB 0644
datalink.h File 619 B 0644
dcbevent.h File 1.26 KB 0644
dcbnl.h File 4.2 KB 0644
devlink.h File 13.25 KB 0644
dn.h File 6.88 KB 0644
dn_dev.h File 5.36 KB 0644
dn_fib.h File 3.98 KB 0644
dn_neigh.h File 968 B 0644
dn_nsp.h File 5.83 KB 0644
dn_route.h File 4.36 KB 0644
dsa.h File 13.94 KB 0644
dsfield.h File 1.11 KB 0644
dst.h File 13.48 KB 0644
dst_cache.h File 2.53 KB 0644
dst_metadata.h File 5.39 KB 0644
dst_ops.h File 2 KB 0644
erspan.h File 2.11 KB 0644
esp.h File 877 B 0644
ethoc.h File 538 B 0644
fib_notifier.h File 1.29 KB 0644
fib_rules.h File 4.18 KB 0644
firewire.h File 636 B 0644
flow.h File 6.16 KB 0644
flow_dissector.h File 7.55 KB 0644
fou.h File 549 B 0644
fq.h File 2.67 KB 0644
fq_impl.h File 6.9 KB 0644
garp.h File 2.62 KB 0644
gen_stats.h File 2.34 KB 0644
genetlink.h File 11.3 KB 0644
geneve.h File 1.67 KB 0644
gre.h File 2.99 KB 0644
gro_cells.h File 443 B 0644
gtp.h File 633 B 0644
gue.h File 3.23 KB 0644
hwbm.h File 937 B 0644
icmp.h File 2.01 KB 0644
ieee80211_radiotap.h File 6.63 KB 0644
ieee802154_netdev.h File 10.24 KB 0644
if_inet6.h File 6.13 KB 0644
ife.h File 1.06 KB 0644
ila.h File 498 B 0644
inet6_connection_sock.h File 976 B 0644
inet6_hashtables.h File 3.7 KB 0644
inet_common.h File 1.89 KB 0644
inet_connection_sock.h File 10.48 KB 0644
inet_ecn.h File 6.02 KB 0644
inet_frag.h File 4.51 KB 0644
inet_hashtables.h File 12.91 KB 0644
inet_sock.h File 8.25 KB 0644
inet_timewait_sock.h File 3.82 KB 0644
inetpeer.h File 3.29 KB 0644
ip.h File 18.51 KB 0644
ip6_checksum.h File 2.89 KB 0644
ip6_fib.h File 10.04 KB 0644
ip6_route.h File 7.63 KB 0644
ip6_tunnel.h File 4.72 KB 0644
ip_fib.h File 10.72 KB 0644
ip_tunnels.h File 13.61 KB 0644
ip_vs.h File 46.78 KB 0644
ipcomp.h File 659 B 0644
ipconfig.h File 811 B 0644
ipv6.h File 29.97 KB 0644
ipv6_frag.h File 2.54 KB 0644
ipx.h File 4.4 KB 0644
iw_handler.h File 20.91 KB 0644
kcm.h File 4.96 KB 0644
l3mdev.h File 5.86 KB 0644
lapb.h File 4.75 KB 0644
lib80211.h File 3.92 KB 0644
llc.h File 4.41 KB 0644
llc_c_ac.h File 9.31 KB 0644
llc_c_ev.h File 10.68 KB 0644
llc_c_st.h File 1.72 KB 0644
llc_conn.h File 4.06 KB 0644
llc_if.h File 2.16 KB 0644
llc_pdu.h File 14.44 KB 0644
llc_s_ac.h File 1.55 KB 0644
llc_s_ev.h File 2.2 KB 0644
llc_s_st.h File 947 B 0644
llc_sap.h File 1.08 KB 0644
lwtunnel.h File 5.84 KB 0644
mac80211.h File 230.36 KB 0644
mac802154.h File 15.27 KB 0644
mip6.h File 1.58 KB 0644
mld.h File 2.8 KB 0644
mpls.h File 932 B 0644
mpls_iptunnel.h File 827 B 0644
mrp.h File 3.05 KB 0644
ncsi.h File 1.92 KB 0644
ndisc.h File 13.77 KB 0644
neighbour.h File 15.06 KB 0644
net_namespace.h File 10.08 KB 0644
net_ratelimit.h File 220 B 0644
netevent.h File 910 B 0644
netlabel.h File 20.74 KB 0644
netlink.h File 40.39 KB 0644
netprio_cgroup.h File 1.24 KB 0644
netrom.h File 7.68 KB 0644
nexthop.h File 865 B 0644
nl802154.h File 12.09 KB 0644
nsh.h File 12.31 KB 0644
p8022.h File 447 B 0644
ping.h File 3.45 KB 0644
pkt_cls.h File 17.34 KB 0644
pkt_sched.h File 4.05 KB 0644
pptp.h File 557 B 0644
protocol.h File 3.89 KB 0644
psample.h File 860 B 0644
psnap.h File 351 B 0644
raw.h File 2.07 KB 0644
rawv6.h File 854 B 0644
red.h File 10.45 KB 0644
regulatory.h File 10.12 KB 0644
request_sock.h File 6.46 KB 0644
rose.h File 7.62 KB 0644
route.h File 10.02 KB 0644
rtnetlink.h File 6.13 KB 0644
sch_generic.h File 23.3 KB 0644
scm.h File 3.5 KB 0644
secure_seq.h File 855 B 0644
seg6.h File 1.66 KB 0644
seg6_hmac.h File 1.65 KB 0644
slhc_vj.h File 6.67 KB 0644
smc.h File 440 B 0644
snmp.h File 5.23 KB 0644
sock.h File 70.05 KB 0644
sock_reuseport.h File 863 B 0644
stp.h File 383 B 0644
strparser.h File 3.75 KB 0644
switchdev.h File 6.52 KB 0644
tcp.h File 62.88 KB 0644
tcp_states.h File 1.26 KB 0644
timewait_sock.h File 1.11 KB 0644
tipc.h File 2.34 KB 0644
tls.h File 7.12 KB 0644
transp_v6.h File 2.08 KB 0644
tso.h File 515 B 0644
tun_proto.h File 988 B 0644
udp.h File 12.87 KB 0644
udp_tunnel.h File 5.12 KB 0644
udplite.h File 3.83 KB 0644
vsock_addr.h File 1.05 KB 0644
vxlan.h File 10.43 KB 0644
wext.h File 1.51 KB 0644
wimax.h File 19.97 KB 0644
x25.h File 9.43 KB 0644
x25device.h File 387 B 0644
xfrm.h File 53.72 KB 0644