mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 09:58:01 +00:00
This patch adds support for NSH packet header fields to the OVS control plane and the userspace datapath. Initially we support the fields of the NSH base header as defined in https://www.ietf.org/id/draft-ietf-sfc-nsh-13.txt and the fixed context headers specified for metadata format MD1. The variable length MD2 format is parsed but the TLV context headers are not yet available for matching. The NSH fields are modelled as experimenter fields with the dedicated experimenter class 0x005ad650 proposed for NSH in ONF. The following fields are defined: NXOXM code ofctl name Size Comment ===================================================================== NXOXM_NSH_FLAGS nsh_flags 8 Bits 2-9 of 1st NSH word (0x005ad650,1) NXOXM_NSH_MDTYPE nsh_mdtype 8 Bits 16-23 (0x005ad650,2) NXOXM_NSH_NEXTPROTO nsh_np 8 Bits 24-31 (0x005ad650,3) NXOXM_NSH_SPI nsh_spi 24 Bits 0-23 of 2nd NSH word (0x005ad650,4) NXOXM_NSH_SI nsh_si 8 Bits 24-31 (0x005ad650,5) NXOXM_NSH_C1 nsh_c1 32 Maskable, nsh_mdtype==1 (0x005ad650,6) NXOXM_NSH_C2 nsh_c2 32 Maskable, nsh_mdtype==1 (0x005ad650,7) NXOXM_NSH_C3 nsh_c3 32 Maskable, nsh_mdtype==1 (0x005ad650,8) NXOXM_NSH_C4 nsh_c4 32 Maskable, nsh_mdtype==1 (0x005ad650,9) Co-authored-by: Johnson Li <johnson.li@intel.com> Signed-off-by: Yi Yang <yi.y.yang@intel.com> Signed-off-by: Jan Scheurich <jan.scheurich@ericsson.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
97 lines
2.3 KiB
C
97 lines
2.3 KiB
C
/*
|
|
* Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef OPENVSWITCH_PACKETS_H
|
|
#define OPENVSWITCH_PACKETS_H 1
|
|
|
|
#include <netinet/in.h>
|
|
#include "openvswitch/tun-metadata.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Tunnel information used in flow key and metadata. */
|
|
struct flow_tnl {
|
|
ovs_be32 ip_dst;
|
|
struct in6_addr ipv6_dst;
|
|
ovs_be32 ip_src;
|
|
struct in6_addr ipv6_src;
|
|
ovs_be64 tun_id;
|
|
uint16_t flags;
|
|
uint8_t ip_tos;
|
|
uint8_t ip_ttl;
|
|
ovs_be16 tp_src;
|
|
ovs_be16 tp_dst;
|
|
ovs_be16 gbp_id;
|
|
uint8_t gbp_flags;
|
|
uint8_t pad1[5]; /* Pad to 64 bits. */
|
|
struct tun_metadata metadata;
|
|
};
|
|
|
|
/* Some flags are exposed through OpenFlow while others are used only
|
|
* internally. */
|
|
|
|
/* Public flags */
|
|
#define FLOW_TNL_F_OAM (1 << 0)
|
|
|
|
#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
|
|
|
|
/* Private flags */
|
|
#define FLOW_TNL_F_DONT_FRAGMENT (1 << 1)
|
|
#define FLOW_TNL_F_CSUM (1 << 2)
|
|
#define FLOW_TNL_F_KEY (1 << 3)
|
|
|
|
#define FLOW_TNL_F_MASK ((1 << 4) - 1)
|
|
|
|
/* Unfortunately, a "struct flow" sometimes has to handle OpenFlow port
|
|
* numbers and other times datapath (dpif) port numbers. This union allows
|
|
* access to both. */
|
|
union flow_in_port {
|
|
odp_port_t odp_port;
|
|
ofp_port_t ofp_port;
|
|
};
|
|
|
|
union flow_vlan_hdr {
|
|
ovs_be32 qtag;
|
|
struct {
|
|
ovs_be16 tpid; /* ETH_TYPE_VLAN_DOT1Q or ETH_TYPE_DOT1AD */
|
|
ovs_be16 tci;
|
|
};
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/* Network Service Header keys */
|
|
struct flow_nsh {
|
|
uint8_t flags;
|
|
uint8_t mdtype;
|
|
uint8_t np;
|
|
uint8_t si;
|
|
ovs_be32 spi;
|
|
ovs_be32 c[4];
|
|
};
|
|
|
|
/* NSH flags */
|
|
#define FLOW_NSH_F_OAM (1 << 0)
|
|
#define FLOW_NSH_F_CTX (1 << 1)
|
|
|
|
#define FLOW_NSH_F_MASK ((1 << 2) - 1)
|
|
|
|
#endif /* packets.h */
|