mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 09:58:01 +00:00
nicira-ext: Remove the autopath action.
The autopath action was attempting to achieve functionality similar to the bundle action, but was significantly clunkier, more difficult to understand, more difficult to use, and less reliable. This patch removes it. Signed-off-by: Ethan Jackson <ethan@nicira.com>
This commit is contained in:
parent
df53d41c6d
commit
1bda9b9e1a
3
FAQ
3
FAQ
@ -993,9 +993,6 @@ A: Yes, Open vSwitch makes individual bond interfaces visible as
|
|||||||
controller is not configured, this happens implicitly to
|
controller is not configured, this happens implicitly to
|
||||||
every packet.)
|
every packet.)
|
||||||
|
|
||||||
- The "autopath" Nicira extension action. However, "autopath"
|
|
||||||
is deprecated and scheduled for removal in February 2013.
|
|
||||||
|
|
||||||
- Mirrors configured for output to a bonded port.
|
- Mirrors configured for output to a bonded port.
|
||||||
|
|
||||||
It would make a lot of sense for Open vSwitch to present a bond as
|
It would make a lot of sense for Open vSwitch to present a bond as
|
||||||
|
1
NEWS
1
NEWS
@ -1,6 +1,7 @@
|
|||||||
post-v1.10.0
|
post-v1.10.0
|
||||||
---------------------
|
---------------------
|
||||||
- Stable bond mode has been removed.
|
- Stable bond mode has been removed.
|
||||||
|
- The autopath action has been removed.
|
||||||
|
|
||||||
|
|
||||||
v1.10.0 - xx xxx xxxx
|
v1.10.0 - xx xxx xxxx
|
||||||
|
@ -292,7 +292,7 @@ enum nx_action_subtype {
|
|||||||
NXAST_NOTE, /* struct nx_action_note */
|
NXAST_NOTE, /* struct nx_action_note */
|
||||||
NXAST_SET_TUNNEL64, /* struct nx_action_set_tunnel64 */
|
NXAST_SET_TUNNEL64, /* struct nx_action_set_tunnel64 */
|
||||||
NXAST_MULTIPATH, /* struct nx_action_multipath */
|
NXAST_MULTIPATH, /* struct nx_action_multipath */
|
||||||
NXAST_AUTOPATH__DEPRECATED, /* struct nx_action_autopath */
|
NXAST_AUTOPATH__OBSOLETE, /* No longer used. */
|
||||||
NXAST_BUNDLE, /* struct nx_action_bundle */
|
NXAST_BUNDLE, /* struct nx_action_bundle */
|
||||||
NXAST_BUNDLE_LOAD, /* struct nx_action_bundle */
|
NXAST_BUNDLE_LOAD, /* struct nx_action_bundle */
|
||||||
NXAST_RESUBMIT_TABLE, /* struct nx_action_resubmit */
|
NXAST_RESUBMIT_TABLE, /* struct nx_action_resubmit */
|
||||||
@ -944,50 +944,6 @@ struct nx_action_fin_timeout {
|
|||||||
};
|
};
|
||||||
OFP_ASSERT(sizeof(struct nx_action_fin_timeout) == 16);
|
OFP_ASSERT(sizeof(struct nx_action_fin_timeout) == 16);
|
||||||
|
|
||||||
/* Action structure for NXAST_AUTOPATH.
|
|
||||||
*
|
|
||||||
* This action performs the following steps in sequence:
|
|
||||||
*
|
|
||||||
* 1. Hashes the flow using an implementation-defined hash function.
|
|
||||||
*
|
|
||||||
* The hashed fields' values are drawn from the current state of the
|
|
||||||
* flow, including all modifications that have been made by actions up to
|
|
||||||
* this point.
|
|
||||||
*
|
|
||||||
* 2. Selects an OpenFlow 'port'.
|
|
||||||
*
|
|
||||||
* 'port' is selected in an implementation-defined manner, taking into
|
|
||||||
* account 'id' and the hash value calculated in step 1.
|
|
||||||
*
|
|
||||||
* Generally a switch will have been configured with a set of ports that
|
|
||||||
* may be chosen given 'id'. The switch may take into account any number
|
|
||||||
* of factors when choosing 'port' from its configured set. Factors may
|
|
||||||
* include carrier, load, and the results of configuration protocols such
|
|
||||||
* as LACP.
|
|
||||||
*
|
|
||||||
* 3. Stores 'port' in dst[ofs:ofs+n_bits].
|
|
||||||
*
|
|
||||||
* The format and semantics of 'dst' and 'ofs_nbits' are similar to those
|
|
||||||
* for the NXAST_REG_LOAD action.
|
|
||||||
*
|
|
||||||
* The switch will reject actions in which ofs+n_bits is greater than the width
|
|
||||||
* of 'dst', with error type OFPET_BAD_ACTION, code OFPBAC_BAD_ARGUMENT.
|
|
||||||
*/
|
|
||||||
struct nx_action_autopath {
|
|
||||||
ovs_be16 type; /* OFPAT_VENDOR. */
|
|
||||||
ovs_be16 len; /* Length is 24. */
|
|
||||||
ovs_be32 vendor; /* NX_VENDOR_ID. */
|
|
||||||
ovs_be16 subtype; /* NXAST_AUTOPATH. */
|
|
||||||
|
|
||||||
/* Where to store the result. */
|
|
||||||
ovs_be16 ofs_nbits; /* (ofs << 6) | (n_bits - 1). */
|
|
||||||
ovs_be32 dst; /* Destination. */
|
|
||||||
|
|
||||||
ovs_be32 id; /* Autopath ID. */
|
|
||||||
ovs_be32 pad;
|
|
||||||
};
|
|
||||||
OFP_ASSERT(sizeof(struct nx_action_autopath) == 24);
|
|
||||||
|
|
||||||
/* Action structure for NXAST_BUNDLE and NXAST_BUNDLE_LOAD.
|
/* Action structure for NXAST_BUNDLE and NXAST_BUNDLE_LOAD.
|
||||||
*
|
*
|
||||||
* The bundle actions choose a slave from a supplied list of options.
|
* The bundle actions choose a slave from a supplied list of options.
|
||||||
|
@ -10,8 +10,6 @@ noinst_LIBRARIES += lib/libopenvswitch.a
|
|||||||
lib_libopenvswitch_a_SOURCES = \
|
lib_libopenvswitch_a_SOURCES = \
|
||||||
lib/aes128.c \
|
lib/aes128.c \
|
||||||
lib/aes128.h \
|
lib/aes128.h \
|
||||||
lib/autopath.c \
|
|
||||||
lib/autopath.h \
|
|
||||||
lib/backtrace.c \
|
lib/backtrace.c \
|
||||||
lib/backtrace.h \
|
lib/backtrace.h \
|
||||||
lib/bitmap.c \
|
lib/bitmap.c \
|
||||||
|
107
lib/autopath.c
107
lib/autopath.c
@ -1,107 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011, 2012 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
#include "autopath.h"
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "flow.h"
|
|
||||||
#include "meta-flow.h"
|
|
||||||
#include "nx-match.h"
|
|
||||||
#include "ofp-actions.h"
|
|
||||||
#include "ofp-errors.h"
|
|
||||||
#include "ofp-util.h"
|
|
||||||
#include "openflow/nicira-ext.h"
|
|
||||||
#include "vlog.h"
|
|
||||||
|
|
||||||
VLOG_DEFINE_THIS_MODULE(autopath);
|
|
||||||
|
|
||||||
void
|
|
||||||
autopath_parse(struct ofpact_autopath *ap, const char *s_)
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
char *id_str, *dst, *save_ptr;
|
|
||||||
uint16_t port;
|
|
||||||
|
|
||||||
ofpact_init_AUTOPATH(ap);
|
|
||||||
|
|
||||||
s = xstrdup(s_);
|
|
||||||
save_ptr = NULL;
|
|
||||||
id_str = strtok_r(s, ", ", &save_ptr);
|
|
||||||
dst = strtok_r(NULL, ", ", &save_ptr);
|
|
||||||
|
|
||||||
if (!dst) {
|
|
||||||
ovs_fatal(0, "%s: not enough arguments to autopath action", s_);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ofputil_port_from_string(id_str, &port)) {
|
|
||||||
ovs_fatal(0, "%s: bad port number", s_);
|
|
||||||
}
|
|
||||||
ap->port = port;
|
|
||||||
|
|
||||||
mf_parse_subfield(&ap->dst, dst);
|
|
||||||
if (ap->dst.n_bits < 16) {
|
|
||||||
ovs_fatal(0, "%s: %d-bit destination field has %u possible values, "
|
|
||||||
"less than required 65536",
|
|
||||||
s_, ap->dst.n_bits, 1u << ap->dst.n_bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum ofperr
|
|
||||||
autopath_from_openflow(const struct nx_action_autopath *nap,
|
|
||||||
struct ofpact_autopath *autopath)
|
|
||||||
{
|
|
||||||
ofpact_init_AUTOPATH(autopath);
|
|
||||||
autopath->dst.field = mf_from_nxm_header(ntohl(nap->dst));
|
|
||||||
autopath->dst.ofs = nxm_decode_ofs(nap->ofs_nbits);
|
|
||||||
autopath->dst.n_bits = nxm_decode_n_bits(nap->ofs_nbits);
|
|
||||||
autopath->port = ntohl(nap->id);
|
|
||||||
|
|
||||||
if (autopath->dst.n_bits < 16) {
|
|
||||||
VLOG_WARN("at least 16 bit destination is required for autopath "
|
|
||||||
"action.");
|
|
||||||
return OFPERR_OFPBAC_BAD_ARGUMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
return autopath_check(autopath, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum ofperr
|
|
||||||
autopath_check(const struct ofpact_autopath *autopath, const struct flow *flow)
|
|
||||||
{
|
|
||||||
VLOG_WARN_ONCE("The autopath action is deprecated and may be removed in"
|
|
||||||
" February 2013. Please email dev@openvswitch.org with"
|
|
||||||
" concerns.");
|
|
||||||
return mf_check_dst(&autopath->dst, flow);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
autopath_to_nxast(const struct ofpact_autopath *autopath,
|
|
||||||
struct ofpbuf *openflow)
|
|
||||||
{
|
|
||||||
struct nx_action_autopath *ap;
|
|
||||||
|
|
||||||
ap = ofputil_put_NXAST_AUTOPATH__DEPRECATED(openflow);
|
|
||||||
ap->ofs_nbits = nxm_encode_ofs_nbits(autopath->dst.ofs,
|
|
||||||
autopath->dst.n_bits);
|
|
||||||
ap->dst = htonl(autopath->dst.field->nxm_header);
|
|
||||||
ap->id = htonl(autopath->port);
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011, 2012 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 AUTOPATH_H
|
|
||||||
#define AUTOPATH_H 1
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "ofp-errors.h"
|
|
||||||
|
|
||||||
struct flow;
|
|
||||||
struct nx_action_autopath;
|
|
||||||
struct ofpact_autopath;
|
|
||||||
struct ofpbuf;
|
|
||||||
|
|
||||||
/* NXAST_AUTOPATH helper functions.
|
|
||||||
*
|
|
||||||
* See include/openflow/nicira-ext.h for NXAST_AUTOPATH specification. */
|
|
||||||
|
|
||||||
void autopath_parse(struct ofpact_autopath *, const char *);
|
|
||||||
|
|
||||||
enum ofperr autopath_from_openflow(const struct nx_action_autopath *,
|
|
||||||
struct ofpact_autopath *);
|
|
||||||
enum ofperr autopath_check(const struct ofpact_autopath *,
|
|
||||||
const struct flow *);
|
|
||||||
void autopath_to_nxast(const struct ofpact_autopath *,
|
|
||||||
struct ofpbuf *openflow);
|
|
||||||
|
|
||||||
#endif /* autopath.h */
|
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include "ofp-actions.h"
|
#include "ofp-actions.h"
|
||||||
#include "autopath.h"
|
|
||||||
#include "bundle.h"
|
#include "bundle.h"
|
||||||
#include "byte-order.h"
|
#include "byte-order.h"
|
||||||
#include "compiler.h"
|
#include "compiler.h"
|
||||||
@ -357,11 +356,6 @@ ofpact_from_nxast(const union ofp_action *a, enum ofputil_action_code code,
|
|||||||
ofpact_put_MULTIPATH(out));
|
ofpact_put_MULTIPATH(out));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OFPUTIL_NXAST_AUTOPATH__DEPRECATED:
|
|
||||||
error = autopath_from_openflow((const struct nx_action_autopath *) a,
|
|
||||||
ofpact_put_AUTOPATH(out));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OFPUTIL_NXAST_BUNDLE:
|
case OFPUTIL_NXAST_BUNDLE:
|
||||||
case OFPUTIL_NXAST_BUNDLE_LOAD:
|
case OFPUTIL_NXAST_BUNDLE_LOAD:
|
||||||
error = bundle_from_openflow((const struct nx_action_bundle *) a, out);
|
error = bundle_from_openflow((const struct nx_action_bundle *) a, out);
|
||||||
@ -1155,9 +1149,6 @@ ofpact_check__(const struct ofpact *a, const struct flow *flow, int max_ports,
|
|||||||
case OFPACT_MULTIPATH:
|
case OFPACT_MULTIPATH:
|
||||||
return multipath_check(ofpact_get_MULTIPATH(a), flow);
|
return multipath_check(ofpact_get_MULTIPATH(a), flow);
|
||||||
|
|
||||||
case OFPACT_AUTOPATH:
|
|
||||||
return autopath_check(ofpact_get_AUTOPATH(a), flow);
|
|
||||||
|
|
||||||
case OFPACT_NOTE:
|
case OFPACT_NOTE:
|
||||||
case OFPACT_EXIT:
|
case OFPACT_EXIT:
|
||||||
return 0;
|
return 0;
|
||||||
@ -1425,10 +1416,6 @@ ofpact_to_nxast(const struct ofpact *a, struct ofpbuf *out)
|
|||||||
multipath_to_nxast(ofpact_get_MULTIPATH(a), out);
|
multipath_to_nxast(ofpact_get_MULTIPATH(a), out);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OFPACT_AUTOPATH:
|
|
||||||
autopath_to_nxast(ofpact_get_AUTOPATH(a), out);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OFPACT_NOTE:
|
case OFPACT_NOTE:
|
||||||
ofpact_note_to_nxast(ofpact_get_NOTE(a), out);
|
ofpact_note_to_nxast(ofpact_get_NOTE(a), out);
|
||||||
break;
|
break;
|
||||||
@ -1571,7 +1558,6 @@ ofpact_to_openflow10(const struct ofpact *a, struct ofpbuf *out)
|
|||||||
case OFPACT_RESUBMIT:
|
case OFPACT_RESUBMIT:
|
||||||
case OFPACT_LEARN:
|
case OFPACT_LEARN:
|
||||||
case OFPACT_MULTIPATH:
|
case OFPACT_MULTIPATH:
|
||||||
case OFPACT_AUTOPATH:
|
|
||||||
case OFPACT_NOTE:
|
case OFPACT_NOTE:
|
||||||
case OFPACT_EXIT:
|
case OFPACT_EXIT:
|
||||||
case OFPACT_PUSH_MPLS:
|
case OFPACT_PUSH_MPLS:
|
||||||
@ -1726,7 +1712,6 @@ ofpact_to_openflow11(const struct ofpact *a, struct ofpbuf *out)
|
|||||||
case OFPACT_RESUBMIT:
|
case OFPACT_RESUBMIT:
|
||||||
case OFPACT_LEARN:
|
case OFPACT_LEARN:
|
||||||
case OFPACT_MULTIPATH:
|
case OFPACT_MULTIPATH:
|
||||||
case OFPACT_AUTOPATH:
|
|
||||||
case OFPACT_NOTE:
|
case OFPACT_NOTE:
|
||||||
case OFPACT_EXIT:
|
case OFPACT_EXIT:
|
||||||
ofpact_to_nxast(a, out);
|
ofpact_to_nxast(a, out);
|
||||||
@ -1849,7 +1834,6 @@ ofpact_outputs_to_port(const struct ofpact *ofpact, uint16_t port)
|
|||||||
case OFPACT_RESUBMIT:
|
case OFPACT_RESUBMIT:
|
||||||
case OFPACT_LEARN:
|
case OFPACT_LEARN:
|
||||||
case OFPACT_MULTIPATH:
|
case OFPACT_MULTIPATH:
|
||||||
case OFPACT_AUTOPATH:
|
|
||||||
case OFPACT_NOTE:
|
case OFPACT_NOTE:
|
||||||
case OFPACT_EXIT:
|
case OFPACT_EXIT:
|
||||||
case OFPACT_PUSH_MPLS:
|
case OFPACT_PUSH_MPLS:
|
||||||
@ -1942,7 +1926,6 @@ ofpact_format(const struct ofpact *a, struct ds *s)
|
|||||||
{
|
{
|
||||||
const struct ofpact_enqueue *enqueue;
|
const struct ofpact_enqueue *enqueue;
|
||||||
const struct ofpact_resubmit *resubmit;
|
const struct ofpact_resubmit *resubmit;
|
||||||
const struct ofpact_autopath *autopath;
|
|
||||||
const struct ofpact_controller *controller;
|
const struct ofpact_controller *controller;
|
||||||
const struct ofpact_metadata *metadata;
|
const struct ofpact_metadata *metadata;
|
||||||
const struct ofpact_tunnel *tunnel;
|
const struct ofpact_tunnel *tunnel;
|
||||||
@ -2112,15 +2095,6 @@ ofpact_format(const struct ofpact *a, struct ds *s)
|
|||||||
multipath_format(ofpact_get_MULTIPATH(a), s);
|
multipath_format(ofpact_get_MULTIPATH(a), s);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OFPACT_AUTOPATH:
|
|
||||||
autopath = ofpact_get_AUTOPATH(a);
|
|
||||||
ds_put_cstr(s, "autopath(");
|
|
||||||
ofputil_format_port(autopath->port, s);
|
|
||||||
ds_put_char(s, ',');
|
|
||||||
mf_format_subfield(&autopath->dst, s);
|
|
||||||
ds_put_char(s, ')');
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OFPACT_NOTE:
|
case OFPACT_NOTE:
|
||||||
print_note(ofpact_get_NOTE(a), s);
|
print_note(ofpact_get_NOTE(a), s);
|
||||||
break;
|
break;
|
||||||
|
@ -86,7 +86,6 @@
|
|||||||
\
|
\
|
||||||
/* Arithmetic. */ \
|
/* Arithmetic. */ \
|
||||||
DEFINE_OFPACT(MULTIPATH, ofpact_multipath, ofpact) \
|
DEFINE_OFPACT(MULTIPATH, ofpact_multipath, ofpact) \
|
||||||
DEFINE_OFPACT(AUTOPATH, ofpact_autopath, ofpact) \
|
|
||||||
\
|
\
|
||||||
/* Other. */ \
|
/* Other. */ \
|
||||||
DEFINE_OFPACT(NOTE, ofpact_note, data) \
|
DEFINE_OFPACT(NOTE, ofpact_note, data) \
|
||||||
@ -421,15 +420,6 @@ struct ofpact_multipath {
|
|||||||
struct mf_subfield dst;
|
struct mf_subfield dst;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* OFPACT_AUTOPATH.
|
|
||||||
*
|
|
||||||
* Used for NXAST_AUTOPATH. */
|
|
||||||
struct ofpact_autopath {
|
|
||||||
struct ofpact ofpact;
|
|
||||||
struct mf_subfield dst;
|
|
||||||
uint32_t port;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* OFPACT_NOTE.
|
/* OFPACT_NOTE.
|
||||||
*
|
*
|
||||||
* Used for NXAST_NOTE. */
|
* Used for NXAST_NOTE. */
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "autopath.h"
|
|
||||||
#include "bundle.h"
|
#include "bundle.h"
|
||||||
#include "byte-order.h"
|
#include "byte-order.h"
|
||||||
#include "dynamic-string.h"
|
#include "dynamic-string.h"
|
||||||
@ -526,10 +525,6 @@ parse_named_action(enum ofputil_action_code code, const struct flow *flow,
|
|||||||
multipath_parse(ofpact_put_MULTIPATH(ofpacts), arg);
|
multipath_parse(ofpact_put_MULTIPATH(ofpacts), arg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OFPUTIL_NXAST_AUTOPATH__DEPRECATED:
|
|
||||||
autopath_parse(ofpact_put_AUTOPATH(ofpacts), arg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OFPUTIL_NXAST_BUNDLE:
|
case OFPUTIL_NXAST_BUNDLE:
|
||||||
bundle_parse(arg, ofpacts);
|
bundle_parse(arg, ofpacts);
|
||||||
break;
|
break;
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netinet/icmp6.h>
|
#include <netinet/icmp6.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "autopath.h"
|
|
||||||
#include "bundle.h"
|
#include "bundle.h"
|
||||||
#include "byte-order.h"
|
#include "byte-order.h"
|
||||||
#include "classifier.h"
|
#include "classifier.h"
|
||||||
|
@ -51,7 +51,6 @@ NXAST_ACTION(NXAST_REG_LOAD, nx_action_reg_load, 0, "load")
|
|||||||
NXAST_ACTION(NXAST_NOTE, nx_action_note, 1, "note")
|
NXAST_ACTION(NXAST_NOTE, nx_action_note, 1, "note")
|
||||||
NXAST_ACTION(NXAST_SET_TUNNEL64, nx_action_set_tunnel64, 0, "set_tunnel64")
|
NXAST_ACTION(NXAST_SET_TUNNEL64, nx_action_set_tunnel64, 0, "set_tunnel64")
|
||||||
NXAST_ACTION(NXAST_MULTIPATH, nx_action_multipath, 0, "multipath")
|
NXAST_ACTION(NXAST_MULTIPATH, nx_action_multipath, 0, "multipath")
|
||||||
NXAST_ACTION(NXAST_AUTOPATH__DEPRECATED,nx_action_autopath, 0, "autopath")
|
|
||||||
NXAST_ACTION(NXAST_BUNDLE, nx_action_bundle, 1, "bundle")
|
NXAST_ACTION(NXAST_BUNDLE, nx_action_bundle, 1, "bundle")
|
||||||
NXAST_ACTION(NXAST_BUNDLE_LOAD, nx_action_bundle, 1, "bundle_load")
|
NXAST_ACTION(NXAST_BUNDLE_LOAD, nx_action_bundle, 1, "bundle_load")
|
||||||
NXAST_ACTION(NXAST_RESUBMIT_TABLE, nx_action_resubmit, 0, NULL)
|
NXAST_ACTION(NXAST_RESUBMIT_TABLE, nx_action_resubmit, 0, NULL)
|
||||||
|
@ -615,7 +615,6 @@ bool ofputil_frag_handling_from_string(const char *, enum ofp_config_flags *);
|
|||||||
* OFPUTIL_NXAST_NOTE
|
* OFPUTIL_NXAST_NOTE
|
||||||
* OFPUTIL_NXAST_SET_TUNNEL64
|
* OFPUTIL_NXAST_SET_TUNNEL64
|
||||||
* OFPUTIL_NXAST_MULTIPATH
|
* OFPUTIL_NXAST_MULTIPATH
|
||||||
* OFPUTIL_NXAST_AUTOPATH
|
|
||||||
* OFPUTIL_NXAST_BUNDLE
|
* OFPUTIL_NXAST_BUNDLE
|
||||||
* OFPUTIL_NXAST_BUNDLE_LOAD
|
* OFPUTIL_NXAST_BUNDLE_LOAD
|
||||||
* OFPUTIL_NXAST_RESUBMIT_TABLE
|
* OFPUTIL_NXAST_RESUBMIT_TABLE
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "autopath.h"
|
|
||||||
#include "bond.h"
|
#include "bond.h"
|
||||||
#include "bundle.h"
|
#include "bundle.h"
|
||||||
#include "byte-order.h"
|
#include "byte-order.h"
|
||||||
@ -6169,26 +6168,6 @@ struct xlate_reg_state {
|
|||||||
ovs_be64 tun_id;
|
ovs_be64 tun_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
|
||||||
xlate_autopath(struct action_xlate_ctx *ctx,
|
|
||||||
const struct ofpact_autopath *ap)
|
|
||||||
{
|
|
||||||
uint16_t ofp_port = ap->port;
|
|
||||||
struct ofport_dpif *port = get_ofp_port(ctx->ofproto, ofp_port);
|
|
||||||
|
|
||||||
if (!port || !port->bundle) {
|
|
||||||
ofp_port = OFPP_NONE;
|
|
||||||
} else if (port->bundle->bond) {
|
|
||||||
/* Autopath does not support VLAN hashing. */
|
|
||||||
struct ofport_dpif *slave = bond_choose_output_slave(
|
|
||||||
port->bundle->bond, &ctx->flow, 0, &ctx->tags);
|
|
||||||
if (slave) {
|
|
||||||
ofp_port = slave->up.ofp_port;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
nxm_reg_load(&ap->dst, ofp_port, &ctx->flow);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
slave_enabled_cb(uint16_t ofp_port, void *ofproto_)
|
slave_enabled_cb(uint16_t ofp_port, void *ofproto_)
|
||||||
{
|
{
|
||||||
@ -6436,10 +6415,6 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
|
|||||||
multipath_execute(ofpact_get_MULTIPATH(a), &ctx->flow);
|
multipath_execute(ofpact_get_MULTIPATH(a), &ctx->flow);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OFPACT_AUTOPATH:
|
|
||||||
xlate_autopath(ctx, ofpact_get_AUTOPATH(a));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OFPACT_BUNDLE:
|
case OFPACT_BUNDLE:
|
||||||
ctx->ofproto->has_bundle_action = true;
|
ctx->ofproto->has_bundle_action = true;
|
||||||
xlate_bundle_action(ctx, ofpact_get_BUNDLE(a));
|
xlate_bundle_action(ctx, ofpact_get_BUNDLE(a));
|
||||||
|
@ -21,7 +21,6 @@ TESTSUITE_AT = \
|
|||||||
tests/ovs-ofctl.at \
|
tests/ovs-ofctl.at \
|
||||||
tests/odp.at \
|
tests/odp.at \
|
||||||
tests/multipath.at \
|
tests/multipath.at \
|
||||||
tests/autopath.at \
|
|
||||||
tests/lacp.at \
|
tests/lacp.at \
|
||||||
tests/learn.at \
|
tests/learn.at \
|
||||||
tests/vconn.at \
|
tests/vconn.at \
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
AT_BANNER([autopath link selection])
|
|
||||||
|
|
||||||
AT_SETUP([autopath basic])
|
|
||||||
AT_CHECK([ovs-ofctl parse-flow 'actions=autopath(1, NXM_NX_REG0[[]])'], [0],
|
|
||||||
[usable protocols: any
|
|
||||||
chosen protocol: OpenFlow10-table_id
|
|
||||||
OFPT_FLOW_MOD (xid=0x1): ADD actions=autopath(1,NXM_NX_REG0[[]])
|
|
||||||
], [stderr])
|
|
||||||
AT_CHECK([ovs-ofctl parse-flow 'actions=autopath(2, NXM_NX_REG0[[2..30]])'], [0],
|
|
||||||
[usable protocols: any
|
|
||||||
chosen protocol: OpenFlow10-table_id
|
|
||||||
OFPT_FLOW_MOD (xid=0x1): ADD actions=autopath(2,NXM_NX_REG0[[2..30]])
|
|
||||||
], [stderr])
|
|
||||||
AT_CHECK([[sed 's/^[^|]*|[^|]*|//' stderr]], [0], [dnl
|
|
||||||
autopath|WARN|The autopath action is deprecated and may be removed in February 2013. Please email dev@openvswitch.org with concerns.
|
|
||||||
])
|
|
||||||
AT_CLEANUP
|
|
||||||
|
|
||||||
AT_SETUP([autopath action missing argument])
|
|
||||||
AT_CHECK([ovs-ofctl parse-flow actions=autopath], [1], [],
|
|
||||||
[ovs-ofctl: : not enough arguments to autopath action
|
|
||||||
])
|
|
||||||
AT_CLEANUP
|
|
||||||
|
|
||||||
AT_SETUP([autopath action bad port])
|
|
||||||
AT_CHECK([ovs-ofctl parse-flow 'actions=autopath(bad, NXM_NX_REG0[[]])'], [1], [],
|
|
||||||
[ovs-ofctl: bad, NXM_NX_REG0[[]]: bad port number
|
|
||||||
])
|
|
||||||
AT_CLEANUP
|
|
||||||
|
|
||||||
AT_SETUP([autopath action destination too narrow])
|
|
||||||
AT_CHECK([ovs-ofctl parse-flow 'actions=autopath(1,NXM_NX_REG0[[0..7]])'], [1], [],
|
|
||||||
[ovs-ofctl: 1,NXM_NX_REG0[[0..7]]: 8-bit destination field has 256 possible values, less than required 65536
|
|
||||||
])
|
|
||||||
AT_CLEANUP
|
|
||||||
|
|
@ -78,10 +78,6 @@ ffff 0020 00002320 0016 000000000000 fedcba9876543210 ffff0000ffff0000
|
|||||||
# actions=multipath(eth_src,50,modulo_n,1,0,NXM_NX_REG0[])
|
# actions=multipath(eth_src,50,modulo_n,1,0,NXM_NX_REG0[])
|
||||||
ffff 0020 00002320 000a 0000 0032 0000 0000 0000 0000 0000 0000 001f 00010004
|
ffff 0020 00002320 000a 0000 0032 0000 0000 0000 0000 0000 0000 001f 00010004
|
||||||
|
|
||||||
# actions=autopath(2,NXM_NX_REG0[2..30])
|
|
||||||
& autopath|WARN|The autopath action is deprecated and may be removed in February 2013. Please email dev@openvswitch.org with concerns.
|
|
||||||
ffff 0018 00002320 000b 009c 00010004 00000002 00000000
|
|
||||||
|
|
||||||
# actions=bundle(eth_src,0,hrw,ofport,slaves:4,8)
|
# actions=bundle(eth_src,0,hrw,ofport,slaves:4,8)
|
||||||
ffff 0028 00002320 000c 0001 0000 0000 00000002 0002 0000 00000000 00000000 dnl
|
ffff 0028 00002320 000c 0001 0000 0000 00000002 0002 0000 00000000 00000000 dnl
|
||||||
0004 0008 00000000
|
0004 0008 00000000
|
||||||
@ -252,10 +248,6 @@ ffff 0020 00002320 0016 000000000000 fedcba9876543210 ffffffffffffffff ffff 0010
|
|||||||
# actions=multipath(eth_src,50,modulo_n,1,0,NXM_NX_REG0[])
|
# actions=multipath(eth_src,50,modulo_n,1,0,NXM_NX_REG0[])
|
||||||
ffff 0020 00002320 000a 0000 0032 0000 0000 0000 0000 0000 0000 001f 00010004
|
ffff 0020 00002320 000a 0000 0032 0000 0000 0000 0000 0000 0000 001f 00010004
|
||||||
|
|
||||||
# actions=autopath(2,NXM_NX_REG0[2..30])
|
|
||||||
& autopath|WARN|The autopath action is deprecated and may be removed in February 2013. Please email dev@openvswitch.org with concerns.
|
|
||||||
ffff 0018 00002320 000b 009c 00010004 00000002 00000000
|
|
||||||
|
|
||||||
# actions=bundle(eth_src,0,hrw,ofport,slaves:4,8)
|
# actions=bundle(eth_src,0,hrw,ofport,slaves:4,8)
|
||||||
ffff 0028 00002320 000c 0001 0000 0000 00000002 0002 0000 00000000 00000000 dnl
|
ffff 0028 00002320 000c 0001 0000 0000 00000002 0002 0000 00000000 00000000 dnl
|
||||||
0004 0008 00000000
|
0004 0008 00000000
|
||||||
|
@ -243,7 +243,6 @@ tun_id=0x1234,cookie=0x5678,actions=flood
|
|||||||
actions=drop
|
actions=drop
|
||||||
reg0=123,actions=move:NXM_NX_REG0[0..5]->NXM_NX_REG1[26..31],load:55->NXM_NX_REG2[0..31],move:NXM_NX_REG0[0..31]->NXM_NX_TUN_ID[0..31],move:NXM_NX_REG0[0..15]->NXM_OF_VLAN_TCI[]
|
reg0=123,actions=move:NXM_NX_REG0[0..5]->NXM_NX_REG1[26..31],load:55->NXM_NX_REG2[0..31],move:NXM_NX_REG0[0..31]->NXM_NX_TUN_ID[0..31],move:NXM_NX_REG0[0..15]->NXM_OF_VLAN_TCI[]
|
||||||
actions=move:OXM_OF_ETH_DST[]->OXM_OF_ETH_SRC[]
|
actions=move:OXM_OF_ETH_DST[]->OXM_OF_ETH_SRC[]
|
||||||
actions=autopath(5,NXM_NX_REG0[])
|
|
||||||
vlan_tci=0x1123/0x1fff,actions=drop
|
vlan_tci=0x1123/0x1fff,actions=drop
|
||||||
]])
|
]])
|
||||||
AT_CHECK([ovs-ofctl -F nxm -mmm parse-flows flows.txt], [0], [stdout], [stderr])
|
AT_CHECK([ovs-ofctl -F nxm -mmm parse-flows flows.txt], [0], [stdout], [stderr])
|
||||||
@ -272,12 +271,8 @@ NXT_FLOW_MOD: ADD NXM_NX_TUN_ID(0000000000001234) cookie:0x5678 actions=FLOOD
|
|||||||
NXT_FLOW_MOD: ADD <any> actions=drop
|
NXT_FLOW_MOD: ADD <any> actions=drop
|
||||||
NXT_FLOW_MOD: ADD NXM_NX_REG0(0000007b) actions=move:NXM_NX_REG0[0..5]->NXM_NX_REG1[26..31],load:0x37->NXM_NX_REG2[],move:NXM_NX_REG0[]->NXM_NX_TUN_ID[0..31],move:NXM_NX_REG0[0..15]->NXM_OF_VLAN_TCI[]
|
NXT_FLOW_MOD: ADD NXM_NX_REG0(0000007b) actions=move:NXM_NX_REG0[0..5]->NXM_NX_REG1[26..31],load:0x37->NXM_NX_REG2[],move:NXM_NX_REG0[]->NXM_NX_TUN_ID[0..31],move:NXM_NX_REG0[0..15]->NXM_OF_VLAN_TCI[]
|
||||||
NXT_FLOW_MOD: ADD <any> actions=move:NXM_OF_ETH_DST[]->NXM_OF_ETH_SRC[]
|
NXT_FLOW_MOD: ADD <any> actions=move:NXM_OF_ETH_DST[]->NXM_OF_ETH_SRC[]
|
||||||
NXT_FLOW_MOD: ADD <any> actions=autopath(5,NXM_NX_REG0[])
|
|
||||||
NXT_FLOW_MOD: ADD NXM_OF_VLAN_TCI_W(1123/1fff) actions=drop
|
NXT_FLOW_MOD: ADD NXM_OF_VLAN_TCI_W(1123/1fff) actions=drop
|
||||||
]])
|
]])
|
||||||
AT_CHECK([[sed 's/^[^|]*|[^|]*|//' stderr]], [0], [dnl
|
|
||||||
autopath|WARN|The autopath action is deprecated and may be removed in February 2013. Please email dev@openvswitch.org with concerns.
|
|
||||||
])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
AT_SETUP([ovs-ofctl parse-nx-match])
|
AT_SETUP([ovs-ofctl parse-nx-match])
|
||||||
|
@ -82,7 +82,6 @@ m4_include([tests/ofp-errors.at])
|
|||||||
m4_include([tests/ovs-ofctl.at])
|
m4_include([tests/ovs-ofctl.at])
|
||||||
m4_include([tests/odp.at])
|
m4_include([tests/odp.at])
|
||||||
m4_include([tests/multipath.at])
|
m4_include([tests/multipath.at])
|
||||||
m4_include([tests/autopath.at])
|
|
||||||
m4_include([tests/learn.at])
|
m4_include([tests/learn.at])
|
||||||
m4_include([tests/vconn.at])
|
m4_include([tests/vconn.at])
|
||||||
m4_include([tests/file_name.at])
|
m4_include([tests/file_name.at])
|
||||||
|
@ -1074,21 +1074,6 @@ the \fBiter_hash\fR algorithm uses \fIarg\fR.
|
|||||||
.IP
|
.IP
|
||||||
Refer to \fBnicira\-ext.h\fR for more details.
|
Refer to \fBnicira\-ext.h\fR for more details.
|
||||||
.
|
.
|
||||||
.IP "\fBautopath(\fIid\fB, \fIdst\fB[\fIstart\fB..\fIend\fB])\fR"
|
|
||||||
Deprecated and slated for removal in Feburary 2013.
|
|
||||||
.IP
|
|
||||||
Given \fIid\fR, chooses an OpenFlow port and populates it in
|
|
||||||
\fIdst\fB[\fIstart\fB..\fIend\fB]\fR, which must be an NXM field as
|
|
||||||
described above.
|
|
||||||
.IP
|
|
||||||
Currently, \fIid\fR should be the OpenFlow port number of an interface on the
|
|
||||||
bridge. If it isn't then \fIdst\fB[\fIstart\fB..\fIend\fB]\fR will be
|
|
||||||
populated with the OpenFlow port "none". If \fIid\fR is a member of a bond,
|
|
||||||
the normal bond selection logic will be used to choose the destination port.
|
|
||||||
Otherwise, the register will be populated with \fIid\fR itself.
|
|
||||||
.IP
|
|
||||||
Refer to \fBnicira\-ext.h\fR for more details.
|
|
||||||
.
|
|
||||||
.IP "\fBbundle(\fIfields\fB, \fIbasis\fB, \fIalgorithm\fB, \fIslave_type\fB, slaves:[\fIs1\fB, \fIs2\fB, ...])\fR"
|
.IP "\fBbundle(\fIfields\fB, \fIbasis\fB, \fIalgorithm\fB, \fIslave_type\fB, slaves:[\fIs1\fB, \fIs2\fB, ...])\fR"
|
||||||
Hashes \fIfields\fR using \fIbasis\fR as a universal hash parameter, then
|
Hashes \fIfields\fR using \fIbasis\fR as a universal hash parameter, then
|
||||||
applies the bundle link selection \fIalgorithm\fR to choose one of the listed
|
applies the bundle link selection \fIalgorithm\fR to choose one of the listed
|
||||||
|
Loading…
x
Reference in New Issue
Block a user