2010-07-28 15:14:28 -07:00
|
|
|
/*
|
2015-06-05 14:03:12 -07:00
|
|
|
* Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
|
2010-07-28 15:14:28 -07:00
|
|
|
*
|
|
|
|
* 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:
|
2010-08-30 00:24:53 -07:00
|
|
|
*
|
2010-07-28 15:14:28 -07:00
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
2010-08-30 00:24:53 -07:00
|
|
|
*
|
2010-07-28 15:14:28 -07:00
|
|
|
* 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.
|
2010-08-30 00:24:53 -07:00
|
|
|
*/
|
|
|
|
|
2010-07-28 15:14:28 -07:00
|
|
|
/* OpenFlow protocol string to flow parser. */
|
|
|
|
|
|
|
|
#ifndef OFP_PARSE_H
|
|
|
|
#define OFP_PARSE_H 1
|
|
|
|
|
2010-12-07 13:32:01 -08:00
|
|
|
#include <stdbool.h>
|
2010-07-28 15:14:28 -07:00
|
|
|
#include <stdint.h>
|
2010-09-23 13:19:49 -07:00
|
|
|
#include <stdio.h>
|
2013-07-08 10:15:00 -07:00
|
|
|
#include "compiler.h"
|
2014-07-25 17:21:14 -07:00
|
|
|
#include "openvswitch/types.h"
|
2014-10-22 14:58:43 +08:00
|
|
|
#include "packets.h"
|
2010-07-28 15:14:28 -07:00
|
|
|
|
2012-05-04 09:52:37 -07:00
|
|
|
struct flow;
|
2010-12-07 13:32:01 -08:00
|
|
|
struct ofpbuf;
|
2011-08-08 14:46:38 -07:00
|
|
|
struct ofputil_flow_mod;
|
2012-07-12 14:18:05 -07:00
|
|
|
struct ofputil_flow_monitor_request;
|
2011-08-08 14:48:48 -07:00
|
|
|
struct ofputil_flow_stats_request;
|
2013-09-01 18:30:17 -07:00
|
|
|
struct ofputil_group_mod;
|
2013-06-20 17:26:18 +03:00
|
|
|
struct ofputil_meter_mod;
|
2013-09-07 03:02:32 -07:00
|
|
|
struct ofputil_table_mod;
|
openflow: Table maintenance commands for Geneve options.
In order to work with Geneve options, we need to maintain a mapping
table between an option (defined by <class, type, length>) and
an NXM field that can be operated on for the purposes of matches,
actions, etc. This mapping must be explicitly specified by the
user.
Conceptually, this table could be communicated using either OpenFlow
or OVSDB. Using OVSDB requires less code and definition of extensions
than OpenFlow but introduces the possibility that mapping table
updates and flow modifications are desynchronized from each other.
This is dangerous because the mapping table signifcantly impacts the
way that flows using Geneve options are installed and processed by
OVS. Therefore, the mapping table is maintained using OpenFlow commands
instead, which opens the possibility of using synchronization between
table changes and flow modifications through barriers, bundles, etc.
There are two primary groups of OpenFlow messages that are introduced
as Nicira extensions: modification commands (add, delete, clear mappings)
and table status request/reply to dump the current table along with switch
information.
Note that mappings should not be changed while they are in active use by
a flow. The result of doing so is undefined.
This only adds the OpenFlow infrastructure but doesn't actually
do anything with the information yet after the messages have been
decoded.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2015-06-02 15:11:00 -07:00
|
|
|
struct ofputil_geneve_table_mod;
|
2013-10-13 12:44:20 -07:00
|
|
|
struct simap;
|
2013-08-20 18:41:45 -07:00
|
|
|
enum ofputil_protocol;
|
2010-07-28 15:14:28 -07:00
|
|
|
|
2013-08-20 18:41:45 -07:00
|
|
|
char *parse_ofp_str(struct ofputil_flow_mod *, int command, const char *str_,
|
2013-11-15 14:19:57 -08:00
|
|
|
enum ofputil_protocol *usable_protocols)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2011-03-11 12:02:27 -08:00
|
|
|
|
2013-07-08 10:15:00 -07:00
|
|
|
char *parse_ofp_flow_mod_str(struct ofputil_flow_mod *, const char *string,
|
2015-06-05 14:03:12 -07:00
|
|
|
int command,
|
2013-11-15 14:19:57 -08:00
|
|
|
enum ofputil_protocol *usable_protocols)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2013-09-07 03:02:32 -07:00
|
|
|
|
|
|
|
char *parse_ofp_table_mod(struct ofputil_table_mod *,
|
|
|
|
const char *table_id, const char *flow_miss_handling,
|
2015-07-02 20:33:08 -07:00
|
|
|
uint32_t *usable_versions)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2013-09-07 03:02:32 -07:00
|
|
|
|
2015-06-05 14:03:12 -07:00
|
|
|
char *parse_ofp_flow_mod_file(const char *file_name, int command,
|
2013-08-20 18:41:45 -07:00
|
|
|
struct ofputil_flow_mod **fms, size_t *n_fms,
|
2013-11-15 14:19:57 -08:00
|
|
|
enum ofputil_protocol *usable_protocols)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2010-11-08 10:37:52 -08:00
|
|
|
|
2013-07-08 10:15:00 -07:00
|
|
|
char *parse_ofp_flow_stats_request_str(struct ofputil_flow_stats_request *,
|
2013-08-20 18:41:45 -07:00
|
|
|
bool aggregate, const char *string,
|
2013-11-15 14:19:57 -08:00
|
|
|
enum ofputil_protocol *usable_protocols)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2010-07-28 15:14:28 -07:00
|
|
|
|
2013-10-13 12:44:20 -07:00
|
|
|
char *parse_ofp_exact_flow(struct flow *flow, struct flow *mask, const char *s,
|
|
|
|
const struct simap *portno_names);
|
2012-05-04 09:52:37 -07:00
|
|
|
|
2013-07-08 10:15:00 -07:00
|
|
|
char *parse_ofp_meter_mod_str(struct ofputil_meter_mod *, const char *string,
|
2013-08-20 18:41:45 -07:00
|
|
|
int command,
|
|
|
|
enum ofputil_protocol *usable_protocols)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2013-06-20 17:26:18 +03:00
|
|
|
|
2013-07-08 10:15:00 -07:00
|
|
|
char *parse_flow_monitor_request(struct ofputil_flow_monitor_request *,
|
2013-08-20 18:41:45 -07:00
|
|
|
const char *,
|
|
|
|
enum ofputil_protocol *usable_protocols)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2012-07-12 14:18:05 -07:00
|
|
|
|
2013-09-01 18:30:17 -07:00
|
|
|
char *parse_ofp_group_mod_file(const char *file_name, uint16_t command,
|
|
|
|
struct ofputil_group_mod **gms, size_t *n_gms,
|
|
|
|
enum ofputil_protocol *usable_protocols)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2013-09-01 18:30:17 -07:00
|
|
|
|
|
|
|
char *parse_ofp_group_mod_str(struct ofputil_group_mod *, uint16_t command,
|
|
|
|
const char *string,
|
|
|
|
enum ofputil_protocol *usable_protocols)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2013-09-01 18:30:17 -07:00
|
|
|
|
openflow: Table maintenance commands for Geneve options.
In order to work with Geneve options, we need to maintain a mapping
table between an option (defined by <class, type, length>) and
an NXM field that can be operated on for the purposes of matches,
actions, etc. This mapping must be explicitly specified by the
user.
Conceptually, this table could be communicated using either OpenFlow
or OVSDB. Using OVSDB requires less code and definition of extensions
than OpenFlow but introduces the possibility that mapping table
updates and flow modifications are desynchronized from each other.
This is dangerous because the mapping table signifcantly impacts the
way that flows using Geneve options are installed and processed by
OVS. Therefore, the mapping table is maintained using OpenFlow commands
instead, which opens the possibility of using synchronization between
table changes and flow modifications through barriers, bundles, etc.
There are two primary groups of OpenFlow messages that are introduced
as Nicira extensions: modification commands (add, delete, clear mappings)
and table status request/reply to dump the current table along with switch
information.
Note that mappings should not be changed while they are in active use by
a flow. The result of doing so is undefined.
This only adds the OpenFlow infrastructure but doesn't actually
do anything with the information yet after the messages have been
decoded.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2015-06-02 15:11:00 -07:00
|
|
|
char *parse_ofp_geneve_table_mod_str(struct ofputil_geneve_table_mod *,
|
|
|
|
uint16_t command, const char *string,
|
|
|
|
enum ofputil_protocol *usable_protocols)
|
|
|
|
OVS_WARN_UNUSED_RESULT;
|
|
|
|
|
2014-07-25 17:21:14 -07:00
|
|
|
char *str_to_u8(const char *str, const char *name, uint8_t *valuep)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
2014-07-25 17:21:14 -07:00
|
|
|
char *str_to_u16(const char *str, const char *name, uint16_t *valuep)
|
2014-12-15 14:10:38 +01:00
|
|
|
OVS_WARN_UNUSED_RESULT;
|
|
|
|
char *str_to_u32(const char *str, uint32_t *valuep) OVS_WARN_UNUSED_RESULT;
|
|
|
|
char *str_to_u64(const char *str, uint64_t *valuep) OVS_WARN_UNUSED_RESULT;
|
|
|
|
char *str_to_be64(const char *str, ovs_be64 *valuep) OVS_WARN_UNUSED_RESULT;
|
|
|
|
char *str_to_mac(const char *str, uint8_t mac[ETH_ADDR_LEN]) OVS_WARN_UNUSED_RESULT;
|
|
|
|
char *str_to_ip(const char *str, ovs_be32 *ip) OVS_WARN_UNUSED_RESULT;
|
2014-07-25 17:21:14 -07:00
|
|
|
|
2010-07-28 15:14:28 -07:00
|
|
|
#endif /* ofp-parse.h */
|