projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
docs: Make it clear that ovs-openflowd is an alternative to ovs-vswitchd.
[openvswitch]
/
ofproto
/
ofproto.c
diff --git
a/ofproto/ofproto.c
b/ofproto/ofproto.c
index 5e8a1d8306459f675b0ae8b67ed63062a491d5d9..5e99fcab188390d276a5e9a80407118b20609aa6 100644
(file)
--- a/
ofproto/ofproto.c
+++ b/
ofproto/ofproto.c
@@
-81,7
+81,7
@@
static void ofport_free(struct ofport *);
static void hton_ofp_phy_port(struct ofp_phy_port *);
static int xlate_actions(const union ofp_action *in, size_t n_in,
static void hton_ofp_phy_port(struct ofp_phy_port *);
static int xlate_actions(const union ofp_action *in, size_t n_in,
- const
flow_t *flow, struct ofproto *ofproto
,
+ const
struct flow *, struct ofproto *
,
const struct ofpbuf *packet,
struct odp_actions *out, tag_type *tags,
bool *may_set_up_flow, uint16_t *nf_output_iface);
const struct ofpbuf *packet,
struct odp_actions *out, tag_type *tags,
bool *may_set_up_flow, uint16_t *nf_output_iface);
@@
-1278,7
+1278,7
@@
ofproto_port_del(struct ofproto *ofproto, uint16_t odp_port)
}
int
}
int
-ofproto_send_packet(struct ofproto *p, const
flow_t
*flow,
+ofproto_send_packet(struct ofproto *p, const
struct flow
*flow,
const union ofp_action *actions, size_t n_actions,
const struct ofpbuf *packet)
{
const union ofp_action *actions, size_t n_actions,
const struct ofpbuf *packet)
{
@@
-1298,8
+1298,8
@@
ofproto_send_packet(struct ofproto *p, const flow_t *flow,
}
void
}
void
-ofproto_add_flow(struct ofproto *p,
-
const flow_t *flow,
uint32_t wildcards, unsigned int priority,
+ofproto_add_flow(struct ofproto *p,
const struct flow *flow,
+ uint32_t wildcards, unsigned int priority,
const union ofp_action *actions, size_t n_actions,
int idle_timeout)
{
const union ofp_action *actions, size_t n_actions,
int idle_timeout)
{
@@
-1312,7
+1312,7
@@
ofproto_add_flow(struct ofproto *p,
}
void
}
void
-ofproto_delete_flow(struct ofproto *ofproto, const
flow_t
*flow,
+ofproto_delete_flow(struct ofproto *ofproto, const
struct flow
*flow,
uint32_t wildcards, unsigned int priority)
{
struct rule *rule;
uint32_t wildcards, unsigned int priority)
{
struct rule *rule;
@@
-1967,7
+1967,7
@@
execute_odp_actions(struct ofproto *ofproto, uint16_t in_port,
* Takes ownership of 'packet'. */
static void
rule_execute(struct ofproto *ofproto, struct rule *rule,
* Takes ownership of 'packet'. */
static void
rule_execute(struct ofproto *ofproto, struct rule *rule,
- struct ofpbuf *packet, const
flow_t
*flow)
+ struct ofpbuf *packet, const
struct flow
*flow)
{
const union odp_action *actions;
struct odp_flow_stats stats;
{
const union odp_action *actions;
struct odp_flow_stats stats;
@@
-2026,7
+2026,7
@@
rule_insert(struct ofproto *p, struct rule *rule, struct ofpbuf *packet,
/* Send the packet and credit it to the rule. */
if (packet) {
/* Send the packet and credit it to the rule. */
if (packet) {
-
flow_t
flow;
+
struct flow
flow;
flow_extract(packet, 0, in_port, &flow);
rule_execute(p, rule, packet, &flow);
}
flow_extract(packet, 0, in_port, &flow);
rule_execute(p, rule, packet, &flow);
}
@@
-2048,7
+2048,7
@@
rule_insert(struct ofproto *p, struct rule *rule, struct ofpbuf *packet,
static struct rule *
rule_create_subrule(struct ofproto *ofproto, struct rule *rule,
static struct rule *
rule_create_subrule(struct ofproto *ofproto, struct rule *rule,
- const
flow_t
*flow)
+ const
struct flow
*flow)
{
struct rule *subrule = rule_create(ofproto, rule, NULL, 0,
rule->idle_timeout, rule->hard_timeout,
{
struct rule *subrule = rule_create(ofproto, rule, NULL, 0,
rule->idle_timeout, rule->hard_timeout,
@@
-2120,7
+2120,7
@@
do_put_flow(struct ofproto *ofproto, struct rule *rule, int flags,
struct odp_flow_put *put)
{
memset(&put->flow.stats, 0, sizeof put->flow.stats);
struct odp_flow_put *put)
{
memset(&put->flow.stats, 0, sizeof put->flow.stats);
-
put->flow.key = rule->cr.flow
;
+
odp_flow_key_from_flow(&put->flow.key, &rule->cr.flow)
;
put->flow.actions = rule->odp_actions;
put->flow.n_actions = rule->n_odp_actions;
put->flow.flags = 0;
put->flow.actions = rule->odp_actions;
put->flow.n_actions = rule->n_odp_actions;
put->flow.flags = 0;
@@
-2224,7
+2224,7
@@
rule_uninstall(struct ofproto *p, struct rule *rule)
if (rule->installed) {
struct odp_flow odp_flow;
if (rule->installed) {
struct odp_flow odp_flow;
- odp_flow
.key = rule->cr.flow
;
+ odp_flow
_key_from_flow(&odp_flow.key, &rule->cr.flow)
;
odp_flow.actions = NULL;
odp_flow.n_actions = 0;
odp_flow.flags = 0;
odp_flow.actions = NULL;
odp_flow.n_actions = 0;
odp_flow.flags = 0;
@@
-2439,7
+2439,7
@@
add_controller_action(struct odp_actions *actions, uint16_t max_len)
struct action_xlate_ctx {
/* Input. */
struct action_xlate_ctx {
/* Input. */
-
flow_t flow;
/* Flow to which these actions correspond. */
+
struct flow flow;
/* Flow to which these actions correspond. */
int recurse; /* Recursion level, via xlate_table_action. */
struct ofproto *ofproto;
const struct ofpbuf *packet; /* The packet corresponding to 'flow', or a
int recurse; /* Recursion level, via xlate_table_action. */
struct ofproto *ofproto;
const struct ofpbuf *packet; /* The packet corresponding to 'flow', or a
@@
-2484,7
+2484,7
@@
add_output_action(struct action_xlate_ctx *ctx, uint16_t port)
}
static struct rule *
}
static struct rule *
-lookup_valid_rule(struct ofproto *ofproto, const
flow_t
*flow)
+lookup_valid_rule(struct ofproto *ofproto, const
struct flow
*flow)
{
struct rule *rule;
rule = rule_from_cls_rule(classifier_lookup(&ofproto->cls, flow));
{
struct rule *rule;
rule = rule_from_cls_rule(classifier_lookup(&ofproto->cls, flow));
@@
-2577,6
+2577,7
@@
xlate_output_action__(struct action_xlate_ctx *ctx,
case OFPP_FLOOD:
flood_packets(ctx->ofproto, ctx->flow.in_port, OFPPC_NO_FLOOD,
&ctx->nf_output_iface, ctx->out);
case OFPP_FLOOD:
flood_packets(ctx->ofproto, ctx->flow.in_port, OFPPC_NO_FLOOD,
&ctx->nf_output_iface, ctx->out);
+ break;
case OFPP_ALL:
flood_packets(ctx->ofproto, ctx->flow.in_port, 0,
&ctx->nf_output_iface, ctx->out);
case OFPP_ALL:
flood_packets(ctx->ofproto, ctx->flow.in_port, 0,
&ctx->nf_output_iface, ctx->out);
@@
-2757,13
+2758,18
@@
do_xlate_actions(const union ofp_action *in, size_t n_in,
break;
case OFPAT_SET_VLAN_VID:
break;
case OFPAT_SET_VLAN_VID:
- oa = odp_actions_add(ctx->out, ODPAT_SET_VLAN_VID);
- ctx->flow.dl_vlan = oa->vlan_vid.vlan_vid = ia->vlan_vid.vlan_vid;
+ oa = odp_actions_add(ctx->out, ODPAT_SET_DL_TCI);
+ oa->dl_tci.tci = ia->vlan_vid.vlan_vid & htons(VLAN_VID_MASK);
+ oa->dl_tci.mask = htons(VLAN_VID_MASK);
+ ctx->flow.dl_vlan = ia->vlan_vid.vlan_vid;
break;
case OFPAT_SET_VLAN_PCP:
break;
case OFPAT_SET_VLAN_PCP:
- oa = odp_actions_add(ctx->out, ODPAT_SET_VLAN_PCP);
- ctx->flow.dl_vlan_pcp = oa->vlan_pcp.vlan_pcp = ia->vlan_pcp.vlan_pcp;
+ oa = odp_actions_add(ctx->out, ODPAT_SET_DL_TCI);
+ oa->dl_tci.tci = htons((ia->vlan_pcp.vlan_pcp << VLAN_PCP_SHIFT)
+ & VLAN_PCP_MASK);
+ oa->dl_tci.mask = htons(VLAN_PCP_MASK);
+ ctx->flow.dl_vlan_pcp = ia->vlan_pcp.vlan_pcp;
break;
case OFPAT_STRIP_VLAN:
break;
case OFPAT_STRIP_VLAN:
@@
-2830,7
+2836,7
@@
do_xlate_actions(const union ofp_action *in, size_t n_in,
static int
xlate_actions(const union ofp_action *in, size_t n_in,
static int
xlate_actions(const union ofp_action *in, size_t n_in,
- const
flow_t
*flow, struct ofproto *ofproto,
+ const
struct flow
*flow, struct ofproto *ofproto,
const struct ofpbuf *packet,
struct odp_actions *out, tag_type *tags, bool *may_set_up_flow,
uint16_t *nf_output_iface)
const struct ofpbuf *packet,
struct odp_actions *out, tag_type *tags, bool *may_set_up_flow,
uint16_t *nf_output_iface)
@@
-2900,9
+2906,9
@@
handle_packet_out(struct ofproto *p, struct ofconn *ofconn,
struct ofp_packet_out *opo;
struct ofpbuf payload, *buffer;
struct odp_actions actions;
struct ofp_packet_out *opo;
struct ofpbuf payload, *buffer;
struct odp_actions actions;
+ struct flow flow;
int n_actions;
uint16_t in_port;
int n_actions;
uint16_t in_port;
- flow_t flow;
int error;
error = reject_slave_controller(ofconn, oh);
int error;
error = reject_slave_controller(ofconn, oh);
@@
-3199,12
+3205,12
@@
query_stats(struct ofproto *p, struct rule *rule,
if (rule->cr.wc.wildcards) {
size_t i = 0;
LIST_FOR_EACH (subrule, list, &rule->list) {
if (rule->cr.wc.wildcards) {
size_t i = 0;
LIST_FOR_EACH (subrule, list, &rule->list) {
- odp_flow
s[i++].key = subrule->cr.flow
;
+ odp_flow
_key_from_flow(&odp_flows[i++].key, &subrule->cr.flow)
;
packet_count += subrule->packet_count;
byte_count += subrule->byte_count;
}
} else {
packet_count += subrule->packet_count;
byte_count += subrule->byte_count;
}
} else {
- odp_flow
s[0].key = rule->cr.flow
;
+ odp_flow
_key_from_flow(&odp_flows[0].key, &rule->cr.flow)
;
}
/* Fetch up-to-date statistics from the datapath and add them in. */
}
/* Fetch up-to-date statistics from the datapath and add them in. */
@@
-3600,7
+3606,7
@@
add_flow(struct ofproto *p, struct ofconn *ofconn,
int error;
if (ofm->flags & htons(OFPFF_CHECK_OVERLAP)) {
int error;
if (ofm->flags & htons(OFPFF_CHECK_OVERLAP)) {
-
flow_t
flow;
+
struct flow
flow;
uint32_t wildcards;
flow_from_match(&ofm->match, p->tun_id_from_cookie, ofm->cookie,
uint32_t wildcards;
flow_from_match(&ofm->match, p->tun_id_from_cookie, ofm->cookie,
@@
-3635,7
+3641,7
@@
static struct rule *
find_flow_strict(struct ofproto *p, const struct ofp_flow_mod *ofm)
{
uint32_t wildcards;
find_flow_strict(struct ofproto *p, const struct ofp_flow_mod *ofm)
{
uint32_t wildcards;
-
flow_t
flow;
+
struct flow
flow;
flow_from_match(&ofm->match, p->tun_id_from_cookie, ofm->cookie,
&flow, &wildcards);
flow_from_match(&ofm->match, p->tun_id_from_cookie, ofm->cookie,
&flow, &wildcards);
@@
-3650,7
+3656,7
@@
send_buffered_packet(struct ofproto *ofproto, struct ofconn *ofconn,
{
struct ofpbuf *packet;
uint16_t in_port;
{
struct ofpbuf *packet;
uint16_t in_port;
-
flow_t
flow;
+
struct flow
flow;
int error;
if (ofm->buffer_id == htonl(UINT32_MAX)) {
int error;
if (ofm->buffer_id == htonl(UINT32_MAX)) {
@@
-4120,7
+4126,7
@@
handle_odp_miss_msg(struct ofproto *p, struct ofpbuf *packet)
struct odp_msg *msg = packet->data;
struct rule *rule;
struct ofpbuf payload;
struct odp_msg *msg = packet->data;
struct rule *rule;
struct ofpbuf payload;
-
flow_t
flow;
+
struct flow
flow;
payload.data = msg + 1;
payload.size = msg->length - sizeof *msg;
payload.data = msg + 1;
payload.size = msg->length - sizeof *msg;
@@
-4282,9
+4288,12
@@
ofproto_update_used(struct ofproto *p)
for (i = 0; i < n_flows; i++) {
struct odp_flow *f = &flows[i];
struct rule *rule;
for (i = 0; i < n_flows; i++) {
struct odp_flow *f = &flows[i];
struct rule *rule;
+ struct flow flow;
+
+ odp_flow_key_to_flow(&f->key, &flow);
rule = rule_from_cls_rule(
rule = rule_from_cls_rule(
- classifier_find_rule_exactly(&p->cls, &f
->key
, 0, UINT16_MAX));
+ classifier_find_rule_exactly(&p->cls, &f
low
, 0, UINT16_MAX));
if (rule && rule->installed) {
update_time(p, rule, &f->stats);
if (rule && rule->installed) {
update_time(p, rule, &f->stats);
@@
-4405,7
+4414,7
@@
rule_active_timeout(struct ofproto *ofproto, struct rule *rule)
* ofproto_update_used() zeroed TCP flags. */
memset(&odp_flow, 0, sizeof odp_flow);
if (rule->installed) {
* ofproto_update_used() zeroed TCP flags. */
memset(&odp_flow, 0, sizeof odp_flow);
if (rule->installed) {
- odp_flow
.key = rule->cr.flow
;
+ odp_flow
_key_from_flow(&odp_flow.key, &rule->cr.flow)
;
odp_flow.flags = ODPFF_ZERO_TCP_FLAGS;
dpif_flow_get(ofproto->dpif, &odp_flow);
odp_flow.flags = ODPFF_ZERO_TCP_FLAGS;
dpif_flow_get(ofproto->dpif, &odp_flow);
@@
-4515,7
+4524,7
@@
revalidate_cb(struct cls_rule *sub_, void *cbdata_)
static bool
revalidate_rule(struct ofproto *p, struct rule *rule)
{
static bool
revalidate_rule(struct ofproto *p, struct rule *rule)
{
- const
flow_t
*flow = &rule->cr.flow;
+ const
struct flow
*flow = &rule->cr.flow;
COVERAGE_INC(ofproto_revalidate_rule);
if (rule->super) {
COVERAGE_INC(ofproto_revalidate_rule);
if (rule->super) {
@@
-4775,7
+4784,7
@@
pick_fallback_dpid(void)
}
\f
static bool
}
\f
static bool
-default_normal_ofhook_cb(const
flow_t
*flow, const struct ofpbuf *packet,
+default_normal_ofhook_cb(const
struct flow
*flow, const struct ofpbuf *packet,
struct odp_actions *actions, tag_type *tags,
uint16_t *nf_output_iface, void *ofproto_)
{
struct odp_actions *actions, tag_type *tags,
uint16_t *nf_output_iface, void *ofproto_)
{