2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 09:58:01 +00:00
Ales Musil a095794bcc openflow: Allow CT flush to match on mark and labels.
Extend the current NX_CT_FLUSH with four additional fields,
that allow to match on CT entry "mark" or "labels". This
is encoded as separate TLV values which is backward compatible.
Versions that do not support them will fail the command.

Extend also the ovs-dpctl and ovs-ofctl command line tools with
option to specify those two matching parameters for the "ct-flush"
command.

Reported-at: https://issues.redhat.com/browse/FDP-55
Signed-off-by: Ales Musil <amusil@redhat.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
2023-12-15 00:35:41 +01:00

81 lines
2.0 KiB
C

/*
* Copyright (c) 2023, Red Hat, 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_OFP_CT_H
#define OPENVSWITCH_OFP_CT_H 1
#include <stdbool.h>
#include <stdint.h>
#include <sys/types.h>
#include <netinet/in.h>
#include "openflow/nicira-ext.h"
#ifdef __cplusplus
extern "C" {
#endif
struct ofp_ct_tuple {
struct in6_addr src;
struct in6_addr dst;
union {
ovs_be16 src_port;
ovs_be16 icmp_id;
};
union {
ovs_be16 dst_port;
struct {
uint8_t icmp_code;
uint8_t icmp_type;
};
};
};
struct ofp_ct_match {
uint8_t ip_proto;
uint16_t l3_type;
struct ofp_ct_tuple tuple_orig;
struct ofp_ct_tuple tuple_reply;
uint32_t mark;
uint32_t mark_mask;
ovs_u128 labels;
ovs_u128 labels_mask;
};
bool ofp_ct_match_is_zero(const struct ofp_ct_match *);
bool ofp_ct_match_is_five_tuple(const struct ofp_ct_match *);
void ofp_ct_match_format(struct ds *, const struct ofp_ct_match *);
bool ofp_ct_match_parse(const char **, int argc, struct ds *,
struct ofp_ct_match *, bool *with_zone,
uint16_t *zone_id);
enum ofperr ofp_ct_match_decode(struct ofp_ct_match *, bool *with_zone,
uint16_t *zone_id, const struct ofp_header *);
struct ofpbuf *ofp_ct_match_encode(const struct ofp_ct_match *,
uint16_t *zone_id,
enum ofp_version version);
#ifdef __cplusplus
}
#endif
#endif /* ofp-ct.h */