mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
ofproto: Add NXM_NX_TUN_GBP_ID and NXM_NX_TUN_GBP_FLAGS
Introduces two new NXMs to represent VXLAN-GBP [0] fields. actions=load:0x10->NXM_NX_TUN_GBP_ID[],NORMAL tun_gbp_id=0x10,actions=drop This enables existing VXLAN tunnels to carry security label information such as a SELinux context to other network peers. The values are carried to/from the datapath using the attribute OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS. [0] https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00 Signed-off-by: Madhu Challa <challa@noironetworks.com> Acked-by: Ben Pfaff <blp@nicira.com> Signed-off-by: Thomas Graf <tgraf@noironetworks.com>
This commit is contained in:
committed by
Thomas Graf
parent
c7ecbf1e9c
commit
ac6073e3cd
16
lib/flow.c
16
lib/flow.c
@@ -119,7 +119,7 @@ struct mf_ctx {
|
||||
* away. Some GCC versions gave warnings on ALWAYS_INLINE, so these are
|
||||
* defined as macros. */
|
||||
|
||||
#if (FLOW_WC_SEQ != 30)
|
||||
#if (FLOW_WC_SEQ != 31)
|
||||
#define MINIFLOW_ASSERT(X) ovs_assert(X)
|
||||
BUILD_MESSAGE("FLOW_WC_SEQ changed: miniflow_extract() will have runtime "
|
||||
"assertions enabled. Consider updating FLOW_WC_SEQ after "
|
||||
@@ -765,13 +765,15 @@ flow_unwildcard_tp_ports(const struct flow *flow, struct flow_wildcards *wc)
|
||||
void
|
||||
flow_get_metadata(const struct flow *flow, struct flow_metadata *fmd)
|
||||
{
|
||||
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 30);
|
||||
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 31);
|
||||
|
||||
fmd->dp_hash = flow->dp_hash;
|
||||
fmd->recirc_id = flow->recirc_id;
|
||||
fmd->tun_id = flow->tunnel.tun_id;
|
||||
fmd->tun_src = flow->tunnel.ip_src;
|
||||
fmd->tun_dst = flow->tunnel.ip_dst;
|
||||
fmd->gbp_id = flow->tunnel.gbp_id;
|
||||
fmd->gbp_flags = flow->tunnel.gbp_flags;
|
||||
fmd->metadata = flow->metadata;
|
||||
memcpy(fmd->regs, flow->regs, sizeof fmd->regs);
|
||||
fmd->pkt_mark = flow->pkt_mark;
|
||||
@@ -912,7 +914,7 @@ void flow_wildcards_init_for_packet(struct flow_wildcards *wc,
|
||||
memset(&wc->masks, 0x0, sizeof wc->masks);
|
||||
|
||||
/* Update this function whenever struct flow changes. */
|
||||
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 30);
|
||||
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 31);
|
||||
|
||||
if (flow->tunnel.ip_dst) {
|
||||
if (flow->tunnel.flags & FLOW_TNL_F_KEY) {
|
||||
@@ -925,6 +927,8 @@ void flow_wildcards_init_for_packet(struct flow_wildcards *wc,
|
||||
WC_MASK_FIELD(wc, tunnel.ip_ttl);
|
||||
WC_MASK_FIELD(wc, tunnel.tp_src);
|
||||
WC_MASK_FIELD(wc, tunnel.tp_dst);
|
||||
WC_MASK_FIELD(wc, tunnel.gbp_id);
|
||||
WC_MASK_FIELD(wc, tunnel.gbp_flags);
|
||||
} else if (flow->tunnel.tun_id) {
|
||||
WC_MASK_FIELD(wc, tunnel.tun_id);
|
||||
}
|
||||
@@ -1009,7 +1013,7 @@ uint64_t
|
||||
flow_wc_map(const struct flow *flow)
|
||||
{
|
||||
/* Update this function whenever struct flow changes. */
|
||||
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 30);
|
||||
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 31);
|
||||
|
||||
uint64_t map = (flow->tunnel.ip_dst) ? MINIFLOW_MAP(tunnel) : 0;
|
||||
|
||||
@@ -1061,7 +1065,7 @@ void
|
||||
flow_wildcards_clear_non_packet_fields(struct flow_wildcards *wc)
|
||||
{
|
||||
/* Update this function whenever struct flow changes. */
|
||||
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 30);
|
||||
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 31);
|
||||
|
||||
memset(&wc->masks.metadata, 0, sizeof wc->masks.metadata);
|
||||
memset(&wc->masks.regs, 0, sizeof wc->masks.regs);
|
||||
@@ -1620,7 +1624,7 @@ flow_push_mpls(struct flow *flow, int n, ovs_be16 mpls_eth_type,
|
||||
flow->mpls_lse[0] = set_mpls_lse_values(ttl, tc, 1, htonl(label));
|
||||
|
||||
/* Clear all L3 and L4 fields and dp_hash. */
|
||||
BUILD_ASSERT(FLOW_WC_SEQ == 30);
|
||||
BUILD_ASSERT(FLOW_WC_SEQ == 31);
|
||||
memset((char *) flow + FLOW_SEGMENT_2_ENDS_AT, 0,
|
||||
sizeof(struct flow) - FLOW_SEGMENT_2_ENDS_AT);
|
||||
flow->dp_hash = 0;
|
||||
|
Reference in New Issue
Block a user