diff options
author | Ethan Jackson <ethan@nicira.com> | 2011-06-10 17:45:45 -0700 |
---|---|---|
committer | Ethan Jackson <ethan@nicira.com> | 2011-07-19 11:34:26 -0700 |
commit | daff3353a0dcb6db7c1468e442f95ae22d335e88 (patch) | |
tree | a7469efa1f1de5e1042a315e8f2850898fb17f35 /lib/bundle.h | |
parent | 774101397b17d90988046fc568d3f5f5520fbd67 (diff) |
vswitch: Implement bundle action.
This patch creates a new action called "bundle". Bundles are a way
to implement a simple form of multipath in OpenFlow by grouping
several ports in a single output-like action.
Diffstat (limited to 'lib/bundle.h')
-rw-r--r-- | lib/bundle.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/bundle.h b/lib/bundle.h new file mode 100644 index 00000000..a202ade4 --- /dev/null +++ b/lib/bundle.h @@ -0,0 +1,49 @@ +/* Copyright (c) 2011 Nicira Networks. + * + * 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 BUNDLE_H +#define BUNDLE_H 1 + +#include <arpa/inet.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> + +#include "openflow/nicira-ext.h" +#include "openvswitch/types.h" + +struct ds; +struct flow; +struct ofpbuf; + +/* NXAST_BUNDLE helper functions. + * + * See include/openflow/nicira-ext.h for NXAST_BUNDLE specification. */ + +uint16_t bundle_execute(const struct nx_action_bundle *, const struct flow *, + bool (*slave_enabled)(uint16_t ofp_port, void *aux), + void *aux); +int bundle_check(const struct nx_action_bundle *, int max_ports); +void bundle_parse(struct ofpbuf *, const char *); +void bundle_format(const struct nx_action_bundle *, struct ds *); + +/* Returns the 'i'th slave in 'nab'. */ +static inline uint16_t +bundle_get_slave(const struct nx_action_bundle *nab, size_t i) +{ + return ntohs(((ovs_be16 *)(nab + 1))[i]); +} + +#endif /* bundle.h */ |