ofproto-dpif: Avoid potential undefined behavior in type_run().
[sliver-openvswitch.git] / ofproto / ofproto-dpif.c
1 /*
2  * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <config.h>
18
19 #include "ofproto/ofproto-provider.h"
20
21 #include <errno.h>
22
23 #include "autopath.h"
24 #include "bond.h"
25 #include "bundle.h"
26 #include "byte-order.h"
27 #include "connmgr.h"
28 #include "coverage.h"
29 #include "cfm.h"
30 #include "dpif.h"
31 #include "dynamic-string.h"
32 #include "fail-open.h"
33 #include "hmapx.h"
34 #include "lacp.h"
35 #include "learn.h"
36 #include "mac-learning.h"
37 #include "meta-flow.h"
38 #include "multipath.h"
39 #include "netdev.h"
40 #include "netlink.h"
41 #include "nx-match.h"
42 #include "odp-util.h"
43 #include "ofp-util.h"
44 #include "ofpbuf.h"
45 #include "ofp-actions.h"
46 #include "ofp-parse.h"
47 #include "ofp-print.h"
48 #include "ofproto-dpif-governor.h"
49 #include "ofproto-dpif-sflow.h"
50 #include "poll-loop.h"
51 #include "simap.h"
52 #include "smap.h"
53 #include "timer.h"
54 #include "unaligned.h"
55 #include "unixctl.h"
56 #include "vlan-bitmap.h"
57 #include "vlog.h"
58
59 VLOG_DEFINE_THIS_MODULE(ofproto_dpif);
60
61 COVERAGE_DEFINE(ofproto_dpif_expired);
62 COVERAGE_DEFINE(ofproto_dpif_xlate);
63 COVERAGE_DEFINE(facet_changed_rule);
64 COVERAGE_DEFINE(facet_revalidate);
65 COVERAGE_DEFINE(facet_unexpected);
66 COVERAGE_DEFINE(facet_suppress);
67
68 /* Maximum depth of flow table recursion (due to resubmit actions) in a
69  * flow translation. */
70 #define MAX_RESUBMIT_RECURSION 64
71
72 /* Number of implemented OpenFlow tables. */
73 enum { N_TABLES = 255 };
74 enum { TBL_INTERNAL = N_TABLES - 1 };    /* Used for internal hidden rules. */
75 BUILD_ASSERT_DECL(N_TABLES >= 2 && N_TABLES <= 255);
76
77 struct ofport_dpif;
78 struct ofproto_dpif;
79 struct flow_miss;
80
81 struct rule_dpif {
82     struct rule up;
83
84     /* These statistics:
85      *
86      *   - Do include packets and bytes from facets that have been deleted or
87      *     whose own statistics have been folded into the rule.
88      *
89      *   - Do include packets and bytes sent "by hand" that were accounted to
90      *     the rule without any facet being involved (this is a rare corner
91      *     case in rule_execute()).
92      *
93      *   - Do not include packet or bytes that can be obtained from any facet's
94      *     packet_count or byte_count member or that can be obtained from the
95      *     datapath by, e.g., dpif_flow_get() for any subfacet.
96      */
97     uint64_t packet_count;       /* Number of packets received. */
98     uint64_t byte_count;         /* Number of bytes received. */
99
100     tag_type tag;                /* Caches rule_calculate_tag() result. */
101
102     struct list facets;          /* List of "struct facet"s. */
103 };
104
105 static struct rule_dpif *rule_dpif_cast(const struct rule *rule)
106 {
107     return rule ? CONTAINER_OF(rule, struct rule_dpif, up) : NULL;
108 }
109
110 static struct rule_dpif *rule_dpif_lookup(struct ofproto_dpif *,
111                                           const struct flow *);
112 static struct rule_dpif *rule_dpif_lookup__(struct ofproto_dpif *,
113                                             const struct flow *,
114                                             uint8_t table);
115 static struct rule_dpif *rule_dpif_miss_rule(struct ofproto_dpif *ofproto,
116                                              const struct flow *flow);
117
118 static void rule_credit_stats(struct rule_dpif *,
119                               const struct dpif_flow_stats *);
120 static void flow_push_stats(struct rule_dpif *, const struct flow *,
121                             const struct dpif_flow_stats *);
122 static tag_type rule_calculate_tag(const struct flow *,
123                                    const struct minimask *, uint32_t basis);
124 static void rule_invalidate(const struct rule_dpif *);
125
126 #define MAX_MIRRORS 32
127 typedef uint32_t mirror_mask_t;
128 #define MIRROR_MASK_C(X) UINT32_C(X)
129 BUILD_ASSERT_DECL(sizeof(mirror_mask_t) * CHAR_BIT >= MAX_MIRRORS);
130 struct ofmirror {
131     struct ofproto_dpif *ofproto; /* Owning ofproto. */
132     size_t idx;                 /* In ofproto's "mirrors" array. */
133     void *aux;                  /* Key supplied by ofproto's client. */
134     char *name;                 /* Identifier for log messages. */
135
136     /* Selection criteria. */
137     struct hmapx srcs;          /* Contains "struct ofbundle *"s. */
138     struct hmapx dsts;          /* Contains "struct ofbundle *"s. */
139     unsigned long *vlans;       /* Bitmap of chosen VLANs, NULL selects all. */
140
141     /* Output (exactly one of out == NULL and out_vlan == -1 is true). */
142     struct ofbundle *out;       /* Output port or NULL. */
143     int out_vlan;               /* Output VLAN or -1. */
144     mirror_mask_t dup_mirrors;  /* Bitmap of mirrors with the same output. */
145
146     /* Counters. */
147     int64_t packet_count;       /* Number of packets sent. */
148     int64_t byte_count;         /* Number of bytes sent. */
149 };
150
151 static void mirror_destroy(struct ofmirror *);
152 static void update_mirror_stats(struct ofproto_dpif *ofproto,
153                                 mirror_mask_t mirrors,
154                                 uint64_t packets, uint64_t bytes);
155
156 struct ofbundle {
157     struct hmap_node hmap_node; /* In struct ofproto's "bundles" hmap. */
158     struct ofproto_dpif *ofproto; /* Owning ofproto. */
159     void *aux;                  /* Key supplied by ofproto's client. */
160     char *name;                 /* Identifier for log messages. */
161
162     /* Configuration. */
163     struct list ports;          /* Contains "struct ofport"s. */
164     enum port_vlan_mode vlan_mode; /* VLAN mode */
165     int vlan;                   /* -1=trunk port, else a 12-bit VLAN ID. */
166     unsigned long *trunks;      /* Bitmap of trunked VLANs, if 'vlan' == -1.
167                                  * NULL if all VLANs are trunked. */
168     struct lacp *lacp;          /* LACP if LACP is enabled, otherwise NULL. */
169     struct bond *bond;          /* Nonnull iff more than one port. */
170     bool use_priority_tags;     /* Use 802.1p tag for frames in VLAN 0? */
171
172     /* Status. */
173     bool floodable;          /* True if no port has OFPUTIL_PC_NO_FLOOD set. */
174
175     /* Port mirroring info. */
176     mirror_mask_t src_mirrors;  /* Mirrors triggered when packet received. */
177     mirror_mask_t dst_mirrors;  /* Mirrors triggered when packet sent. */
178     mirror_mask_t mirror_out;   /* Mirrors that output to this bundle. */
179 };
180
181 static void bundle_remove(struct ofport *);
182 static void bundle_update(struct ofbundle *);
183 static void bundle_destroy(struct ofbundle *);
184 static void bundle_del_port(struct ofport_dpif *);
185 static void bundle_run(struct ofbundle *);
186 static void bundle_wait(struct ofbundle *);
187 static struct ofbundle *lookup_input_bundle(const struct ofproto_dpif *,
188                                             uint16_t in_port, bool warn,
189                                             struct ofport_dpif **in_ofportp);
190
191 /* A controller may use OFPP_NONE as the ingress port to indicate that
192  * it did not arrive on a "real" port.  'ofpp_none_bundle' exists for
193  * when an input bundle is needed for validation (e.g., mirroring or
194  * OFPP_NORMAL processing).  It is not connected to an 'ofproto' or have
195  * any 'port' structs, so care must be taken when dealing with it. */
196 static struct ofbundle ofpp_none_bundle = {
197     .name      = "OFPP_NONE",
198     .vlan_mode = PORT_VLAN_TRUNK
199 };
200
201 static void stp_run(struct ofproto_dpif *ofproto);
202 static void stp_wait(struct ofproto_dpif *ofproto);
203 static int set_stp_port(struct ofport *,
204                         const struct ofproto_port_stp_settings *);
205
206 static bool ofbundle_includes_vlan(const struct ofbundle *, uint16_t vlan);
207
208 struct action_xlate_ctx {
209 /* action_xlate_ctx_init() initializes these members. */
210
211     /* The ofproto. */
212     struct ofproto_dpif *ofproto;
213
214     /* Flow to which the OpenFlow actions apply.  xlate_actions() will modify
215      * this flow when actions change header fields. */
216     struct flow flow;
217
218     /* The packet corresponding to 'flow', or a null pointer if we are
219      * revalidating without a packet to refer to. */
220     const struct ofpbuf *packet;
221
222     /* Should OFPP_NORMAL update the MAC learning table?  Should "learn"
223      * actions update the flow table?
224      *
225      * We want to update these tables if we are actually processing a packet,
226      * or if we are accounting for packets that the datapath has processed, but
227      * not if we are just revalidating. */
228     bool may_learn;
229
230     /* The rule that we are currently translating, or NULL. */
231     struct rule_dpif *rule;
232
233     /* Union of the set of TCP flags seen so far in this flow.  (Used only by
234      * NXAST_FIN_TIMEOUT.  Set to zero to avoid updating updating rules'
235      * timeouts.) */
236     uint8_t tcp_flags;
237
238     /* If nonnull, flow translation calls this function just before executing a
239      * resubmit or OFPP_TABLE action.  In addition, disables logging of traces
240      * when the recursion depth is exceeded.
241      *
242      * 'rule' is the rule being submitted into.  It will be null if the
243      * resubmit or OFPP_TABLE action didn't find a matching rule.
244      *
245      * This is normally null so the client has to set it manually after
246      * calling action_xlate_ctx_init(). */
247     void (*resubmit_hook)(struct action_xlate_ctx *, struct rule_dpif *rule);
248
249     /* If nonnull, flow translation calls this function to report some
250      * significant decision, e.g. to explain why OFPP_NORMAL translation
251      * dropped a packet. */
252     void (*report_hook)(struct action_xlate_ctx *, const char *s);
253
254     /* If nonnull, flow translation credits the specified statistics to each
255      * rule reached through a resubmit or OFPP_TABLE action.
256      *
257      * This is normally null so the client has to set it manually after
258      * calling action_xlate_ctx_init(). */
259     const struct dpif_flow_stats *resubmit_stats;
260
261 /* xlate_actions() initializes and uses these members.  The client might want
262  * to look at them after it returns. */
263
264     struct ofpbuf *odp_actions; /* Datapath actions. */
265     tag_type tags;              /* Tags associated with actions. */
266     enum slow_path_reason slow; /* 0 if fast path may be used. */
267     bool has_learn;             /* Actions include NXAST_LEARN? */
268     bool has_normal;            /* Actions output to OFPP_NORMAL? */
269     bool has_fin_timeout;       /* Actions include NXAST_FIN_TIMEOUT? */
270     uint16_t nf_output_iface;   /* Output interface index for NetFlow. */
271     mirror_mask_t mirrors;      /* Bitmap of associated mirrors. */
272
273 /* xlate_actions() initializes and uses these members, but the client has no
274  * reason to look at them. */
275
276     int recurse;                /* Recursion level, via xlate_table_action. */
277     bool max_resubmit_trigger;  /* Recursed too deeply during translation. */
278     struct flow base_flow;      /* Flow at the last commit. */
279     uint32_t orig_skb_priority; /* Priority when packet arrived. */
280     uint8_t table_id;           /* OpenFlow table ID where flow was found. */
281     uint32_t sflow_n_outputs;   /* Number of output ports. */
282     uint32_t sflow_odp_port;    /* Output port for composing sFlow action. */
283     uint16_t user_cookie_offset;/* Used for user_action_cookie fixup. */
284     bool exit;                  /* No further actions should be processed. */
285     struct flow orig_flow;      /* Copy of original flow. */
286 };
287
288 static void action_xlate_ctx_init(struct action_xlate_ctx *,
289                                   struct ofproto_dpif *, const struct flow *,
290                                   ovs_be16 initial_tci, struct rule_dpif *,
291                                   uint8_t tcp_flags, const struct ofpbuf *);
292 static void xlate_actions(struct action_xlate_ctx *,
293                           const struct ofpact *ofpacts, size_t ofpacts_len,
294                           struct ofpbuf *odp_actions);
295 static void xlate_actions_for_side_effects(struct action_xlate_ctx *,
296                                            const struct ofpact *ofpacts,
297                                            size_t ofpacts_len);
298
299 static size_t put_userspace_action(const struct ofproto_dpif *,
300                                    struct ofpbuf *odp_actions,
301                                    const struct flow *,
302                                    const union user_action_cookie *);
303
304 static void compose_slow_path(const struct ofproto_dpif *, const struct flow *,
305                               enum slow_path_reason,
306                               uint64_t *stub, size_t stub_size,
307                               const struct nlattr **actionsp,
308                               size_t *actions_lenp);
309
310 static void xlate_report(struct action_xlate_ctx *ctx, const char *s);
311
312 /* A subfacet (see "struct subfacet" below) has three possible installation
313  * states:
314  *
315  *   - SF_NOT_INSTALLED: Not installed in the datapath.  This will only be the
316  *     case just after the subfacet is created, just before the subfacet is
317  *     destroyed, or if the datapath returns an error when we try to install a
318  *     subfacet.
319  *
320  *   - SF_FAST_PATH: The subfacet's actions are installed in the datapath.
321  *
322  *   - SF_SLOW_PATH: An action that sends every packet for the subfacet through
323  *     ofproto_dpif is installed in the datapath.
324  */
325 enum subfacet_path {
326     SF_NOT_INSTALLED,           /* No datapath flow for this subfacet. */
327     SF_FAST_PATH,               /* Full actions are installed. */
328     SF_SLOW_PATH,               /* Send-to-userspace action is installed. */
329 };
330
331 static const char *subfacet_path_to_string(enum subfacet_path);
332
333 /* A dpif flow and actions associated with a facet.
334  *
335  * See also the large comment on struct facet. */
336 struct subfacet {
337     /* Owners. */
338     struct hmap_node hmap_node; /* In struct ofproto_dpif 'subfacets' list. */
339     struct list list_node;      /* In struct facet's 'facets' list. */
340     struct facet *facet;        /* Owning facet. */
341
342     /* Key.
343      *
344      * To save memory in the common case, 'key' is NULL if 'key_fitness' is
345      * ODP_FIT_PERFECT, that is, odp_flow_key_from_flow() can accurately
346      * regenerate the ODP flow key from ->facet->flow. */
347     enum odp_key_fitness key_fitness;
348     struct nlattr *key;
349     int key_len;
350
351     long long int used;         /* Time last used; time created if not used. */
352
353     uint64_t dp_packet_count;   /* Last known packet count in the datapath. */
354     uint64_t dp_byte_count;     /* Last known byte count in the datapath. */
355
356     /* Datapath actions.
357      *
358      * These should be essentially identical for every subfacet in a facet, but
359      * may differ in trivial ways due to VLAN splinters. */
360     size_t actions_len;         /* Number of bytes in actions[]. */
361     struct nlattr *actions;     /* Datapath actions. */
362
363     enum slow_path_reason slow; /* 0 if fast path may be used. */
364     enum subfacet_path path;    /* Installed in datapath? */
365
366     /* This value is normally the same as ->facet->flow.vlan_tci.  Only VLAN
367      * splinters can cause it to differ.  This value should be removed when
368      * the VLAN splinters feature is no longer needed.  */
369     ovs_be16 initial_tci;       /* Initial VLAN TCI value. */
370
371     /* Datapath port the packet arrived on.  This is needed to remove
372      * flows for ports that are no longer part of the bridge.  Since the
373      * flow definition only has the OpenFlow port number and the port is
374      * no longer part of the bridge, we can't determine the datapath port
375      * number needed to delete the flow from the datapath. */
376     uint32_t odp_in_port;
377 };
378
379 #define SUBFACET_DESTROY_MAX_BATCH 50
380
381 static struct subfacet *subfacet_create(struct facet *, struct flow_miss *miss,
382                                         long long int now);
383 static struct subfacet *subfacet_find(struct ofproto_dpif *,
384                                       const struct nlattr *key, size_t key_len,
385                                       uint32_t key_hash,
386                                       const struct flow *flow);
387 static void subfacet_destroy(struct subfacet *);
388 static void subfacet_destroy__(struct subfacet *);
389 static void subfacet_destroy_batch(struct ofproto_dpif *,
390                                    struct subfacet **, int n);
391 static void subfacet_get_key(struct subfacet *, struct odputil_keybuf *,
392                              struct ofpbuf *key);
393 static void subfacet_reset_dp_stats(struct subfacet *,
394                                     struct dpif_flow_stats *);
395 static void subfacet_update_time(struct subfacet *, long long int used);
396 static void subfacet_update_stats(struct subfacet *,
397                                   const struct dpif_flow_stats *);
398 static void subfacet_make_actions(struct subfacet *,
399                                   const struct ofpbuf *packet,
400                                   struct ofpbuf *odp_actions);
401 static int subfacet_install(struct subfacet *,
402                             const struct nlattr *actions, size_t actions_len,
403                             struct dpif_flow_stats *, enum slow_path_reason);
404 static void subfacet_uninstall(struct subfacet *);
405
406 static enum subfacet_path subfacet_want_path(enum slow_path_reason);
407
408 /* An exact-match instantiation of an OpenFlow flow.
409  *
410  * A facet associates a "struct flow", which represents the Open vSwitch
411  * userspace idea of an exact-match flow, with one or more subfacets.  Each
412  * subfacet tracks the datapath's idea of the exact-match flow equivalent to
413  * the facet.  When the kernel module (or other dpif implementation) and Open
414  * vSwitch userspace agree on the definition of a flow key, there is exactly
415  * one subfacet per facet.  If the dpif implementation supports more-specific
416  * flow matching than userspace, however, a facet can have more than one
417  * subfacet, each of which corresponds to some distinction in flow that
418  * userspace simply doesn't understand.
419  *
420  * Flow expiration works in terms of subfacets, so a facet must have at least
421  * one subfacet or it will never expire, leaking memory. */
422 struct facet {
423     /* Owners. */
424     struct hmap_node hmap_node;  /* In owning ofproto's 'facets' hmap. */
425     struct list list_node;       /* In owning rule's 'facets' list. */
426     struct rule_dpif *rule;      /* Owning rule. */
427
428     /* Owned data. */
429     struct list subfacets;
430     long long int used;         /* Time last used; time created if not used. */
431
432     /* Key. */
433     struct flow flow;
434
435     /* These statistics:
436      *
437      *   - Do include packets and bytes sent "by hand", e.g. with
438      *     dpif_execute().
439      *
440      *   - Do include packets and bytes that were obtained from the datapath
441      *     when a subfacet's statistics were reset (e.g. dpif_flow_put() with
442      *     DPIF_FP_ZERO_STATS).
443      *
444      *   - Do not include packets or bytes that can be obtained from the
445      *     datapath for any existing subfacet.
446      */
447     uint64_t packet_count;       /* Number of packets received. */
448     uint64_t byte_count;         /* Number of bytes received. */
449
450     /* Resubmit statistics. */
451     uint64_t prev_packet_count;  /* Number of packets from last stats push. */
452     uint64_t prev_byte_count;    /* Number of bytes from last stats push. */
453     long long int prev_used;     /* Used time from last stats push. */
454
455     /* Accounting. */
456     uint64_t accounted_bytes;    /* Bytes processed by facet_account(). */
457     struct netflow_flow nf_flow; /* Per-flow NetFlow tracking data. */
458     uint8_t tcp_flags;           /* TCP flags seen for this 'rule'. */
459
460     /* Properties of datapath actions.
461      *
462      * Every subfacet has its own actions because actions can differ slightly
463      * between splintered and non-splintered subfacets due to the VLAN tag
464      * being initially different (present vs. absent).  All of them have these
465      * properties in common so we just store one copy of them here. */
466     bool has_learn;              /* Actions include NXAST_LEARN? */
467     bool has_normal;             /* Actions output to OFPP_NORMAL? */
468     bool has_fin_timeout;        /* Actions include NXAST_FIN_TIMEOUT? */
469     tag_type tags;               /* Tags that would require revalidation. */
470     mirror_mask_t mirrors;       /* Bitmap of dependent mirrors. */
471
472     /* Storage for a single subfacet, to reduce malloc() time and space
473      * overhead.  (A facet always has at least one subfacet and in the common
474      * case has exactly one subfacet.) */
475     struct subfacet one_subfacet;
476 };
477
478 static struct facet *facet_create(struct rule_dpif *,
479                                   const struct flow *, uint32_t hash);
480 static void facet_remove(struct facet *);
481 static void facet_free(struct facet *);
482
483 static struct facet *facet_find(struct ofproto_dpif *,
484                                 const struct flow *, uint32_t hash);
485 static struct facet *facet_lookup_valid(struct ofproto_dpif *,
486                                         const struct flow *, uint32_t hash);
487 static void facet_revalidate(struct facet *);
488 static bool facet_check_consistency(struct facet *);
489
490 static void facet_flush_stats(struct facet *);
491
492 static void facet_update_time(struct facet *, long long int used);
493 static void facet_reset_counters(struct facet *);
494 static void facet_push_stats(struct facet *);
495 static void facet_learn(struct facet *);
496 static void facet_account(struct facet *);
497
498 static bool facet_is_controller_flow(struct facet *);
499
500 struct ofport_dpif {
501     struct hmap_node odp_port_node; /* In dpif_backer's "odp_to_ofport_map". */
502     struct ofport up;
503
504     uint32_t odp_port;
505     struct ofbundle *bundle;    /* Bundle that contains this port, if any. */
506     struct list bundle_node;    /* In struct ofbundle's "ports" list. */
507     struct cfm *cfm;            /* Connectivity Fault Management, if any. */
508     tag_type tag;               /* Tag associated with this port. */
509     uint32_t bond_stable_id;    /* stable_id to use as bond slave, or 0. */
510     bool may_enable;            /* May be enabled in bonds. */
511     long long int carrier_seq;  /* Carrier status changes. */
512
513     /* Spanning tree. */
514     struct stp_port *stp_port;  /* Spanning Tree Protocol, if any. */
515     enum stp_state stp_state;   /* Always STP_DISABLED if STP not in use. */
516     long long int stp_state_entered;
517
518     struct hmap priorities;     /* Map of attached 'priority_to_dscp's. */
519
520     /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
521      *
522      * This is deprecated.  It is only for compatibility with broken device
523      * drivers in old versions of Linux that do not properly support VLANs when
524      * VLAN devices are not used.  When broken device drivers are no longer in
525      * widespread use, we will delete these interfaces. */
526     uint16_t realdev_ofp_port;
527     int vlandev_vid;
528 };
529
530 /* Node in 'ofport_dpif''s 'priorities' map.  Used to maintain a map from
531  * 'priority' (the datapath's term for QoS queue) to the dscp bits which all
532  * traffic egressing the 'ofport' with that priority should be marked with. */
533 struct priority_to_dscp {
534     struct hmap_node hmap_node; /* Node in 'ofport_dpif''s 'priorities' map. */
535     uint32_t priority;          /* Priority of this queue (see struct flow). */
536
537     uint8_t dscp;               /* DSCP bits to mark outgoing traffic with. */
538 };
539
540 /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
541  *
542  * This is deprecated.  It is only for compatibility with broken device drivers
543  * in old versions of Linux that do not properly support VLANs when VLAN
544  * devices are not used.  When broken device drivers are no longer in
545  * widespread use, we will delete these interfaces. */
546 struct vlan_splinter {
547     struct hmap_node realdev_vid_node;
548     struct hmap_node vlandev_node;
549     uint16_t realdev_ofp_port;
550     uint16_t vlandev_ofp_port;
551     int vid;
552 };
553
554 static uint32_t vsp_realdev_to_vlandev(const struct ofproto_dpif *,
555                                        uint32_t realdev, ovs_be16 vlan_tci);
556 static bool vsp_adjust_flow(const struct ofproto_dpif *, struct flow *);
557 static void vsp_remove(struct ofport_dpif *);
558 static void vsp_add(struct ofport_dpif *, uint16_t realdev_ofp_port, int vid);
559
560 static uint32_t ofp_port_to_odp_port(const struct ofproto_dpif *,
561                                      uint16_t ofp_port);
562 static uint16_t odp_port_to_ofp_port(const struct ofproto_dpif *,
563                                      uint32_t odp_port);
564
565 static struct ofport_dpif *
566 ofport_dpif_cast(const struct ofport *ofport)
567 {
568     assert(ofport->ofproto->ofproto_class == &ofproto_dpif_class);
569     return ofport ? CONTAINER_OF(ofport, struct ofport_dpif, up) : NULL;
570 }
571
572 static void port_run(struct ofport_dpif *);
573 static void port_run_fast(struct ofport_dpif *);
574 static void port_wait(struct ofport_dpif *);
575 static int set_cfm(struct ofport *, const struct cfm_settings *);
576 static void ofport_clear_priorities(struct ofport_dpif *);
577
578 struct dpif_completion {
579     struct list list_node;
580     struct ofoperation *op;
581 };
582
583 /* Extra information about a classifier table.
584  * Currently used just for optimized flow revalidation. */
585 struct table_dpif {
586     /* If either of these is nonnull, then this table has a form that allows
587      * flows to be tagged to avoid revalidating most flows for the most common
588      * kinds of flow table changes. */
589     struct cls_table *catchall_table; /* Table that wildcards all fields. */
590     struct cls_table *other_table;    /* Table with any other wildcard set. */
591     uint32_t basis;                   /* Keeps each table's tags separate. */
592 };
593
594 /* Reasons that we might need to revalidate every facet, and corresponding
595  * coverage counters.
596  *
597  * A value of 0 means that there is no need to revalidate.
598  *
599  * It would be nice to have some cleaner way to integrate with coverage
600  * counters, but with only a few reasons I guess this is good enough for
601  * now. */
602 enum revalidate_reason {
603     REV_RECONFIGURE = 1,       /* Switch configuration changed. */
604     REV_STP,                   /* Spanning tree protocol port status change. */
605     REV_PORT_TOGGLED,          /* Port enabled or disabled by CFM, LACP, ...*/
606     REV_FLOW_TABLE,            /* Flow table changed. */
607     REV_INCONSISTENCY          /* Facet self-check failed. */
608 };
609 COVERAGE_DEFINE(rev_reconfigure);
610 COVERAGE_DEFINE(rev_stp);
611 COVERAGE_DEFINE(rev_port_toggled);
612 COVERAGE_DEFINE(rev_flow_table);
613 COVERAGE_DEFINE(rev_inconsistency);
614
615 /* All datapaths of a given type share a single dpif backer instance. */
616 struct dpif_backer {
617     char *type;
618     int refcount;
619     struct dpif *dpif;
620     struct timer next_expiration;
621     struct hmap odp_to_ofport_map; /* ODP port to ofport mapping. */
622 };
623
624 /* All existing ofproto_backer instances, indexed by ofproto->up.type. */
625 static struct shash all_dpif_backers = SHASH_INITIALIZER(&all_dpif_backers);
626
627 static struct ofport_dpif *
628 odp_port_to_ofport(const struct dpif_backer *, uint32_t odp_port);
629
630 struct ofproto_dpif {
631     struct hmap_node all_ofproto_dpifs_node; /* In 'all_ofproto_dpifs'. */
632     struct ofproto up;
633     struct dpif_backer *backer;
634
635     /* Special OpenFlow rules. */
636     struct rule_dpif *miss_rule; /* Sends flow table misses to controller. */
637     struct rule_dpif *no_packet_in_rule; /* Drops flow table misses. */
638
639     /* Statistics. */
640     uint64_t n_matches;
641
642     /* Bridging. */
643     struct netflow *netflow;
644     struct dpif_sflow *sflow;
645     struct hmap bundles;        /* Contains "struct ofbundle"s. */
646     struct mac_learning *ml;
647     struct ofmirror *mirrors[MAX_MIRRORS];
648     bool has_mirrors;
649     bool has_bonded_bundles;
650
651     /* Facets. */
652     struct hmap facets;
653     struct hmap subfacets;
654     struct governor *governor;
655
656     /* Revalidation. */
657     struct table_dpif tables[N_TABLES];
658     enum revalidate_reason need_revalidate;
659     struct tag_set revalidate_set;
660
661     /* Support for debugging async flow mods. */
662     struct list completions;
663
664     bool has_bundle_action; /* True when the first bundle action appears. */
665     struct netdev_stats stats; /* To account packets generated and consumed in
666                                 * userspace. */
667
668     /* Spanning tree. */
669     struct stp *stp;
670     long long int stp_last_tick;
671
672     /* VLAN splinters. */
673     struct hmap realdev_vid_map; /* (realdev,vid) -> vlandev. */
674     struct hmap vlandev_map;     /* vlandev -> (realdev,vid). */
675
676     /* Ports. */
677     struct sset ports;             /* Set of port names. */
678     struct sset port_poll_set;     /* Queued names for port_poll() reply. */
679     int port_poll_errno;           /* Last errno for port_poll() reply. */
680 };
681
682 /* Defer flow mod completion until "ovs-appctl ofproto/unclog"?  (Useful only
683  * for debugging the asynchronous flow_mod implementation.) */
684 static bool clogged;
685
686 /* All existing ofproto_dpif instances, indexed by ->up.name. */
687 static struct hmap all_ofproto_dpifs = HMAP_INITIALIZER(&all_ofproto_dpifs);
688
689 static void ofproto_dpif_unixctl_init(void);
690
691 static struct ofproto_dpif *
692 ofproto_dpif_cast(const struct ofproto *ofproto)
693 {
694     assert(ofproto->ofproto_class == &ofproto_dpif_class);
695     return CONTAINER_OF(ofproto, struct ofproto_dpif, up);
696 }
697
698 static struct ofport_dpif *get_ofp_port(const struct ofproto_dpif *,
699                                         uint16_t ofp_port);
700 static struct ofport_dpif *get_odp_port(const struct ofproto_dpif *,
701                                         uint32_t odp_port);
702 static void ofproto_trace(struct ofproto_dpif *, const struct flow *,
703                           const struct ofpbuf *, ovs_be16 initial_tci,
704                           struct ds *);
705
706 /* Packet processing. */
707 static void update_learning_table(struct ofproto_dpif *,
708                                   const struct flow *, int vlan,
709                                   struct ofbundle *);
710 /* Upcalls. */
711 #define FLOW_MISS_MAX_BATCH 50
712 static int handle_upcalls(struct dpif_backer *, unsigned int max_batch);
713
714 /* Flow expiration. */
715 static int expire(struct dpif_backer *);
716
717 /* NetFlow. */
718 static void send_netflow_active_timeouts(struct ofproto_dpif *);
719
720 /* Utilities. */
721 static int send_packet(const struct ofport_dpif *, struct ofpbuf *packet);
722 static size_t compose_sflow_action(const struct ofproto_dpif *,
723                                    struct ofpbuf *odp_actions,
724                                    const struct flow *, uint32_t odp_port);
725 static void add_mirror_actions(struct action_xlate_ctx *ctx,
726                                const struct flow *flow);
727 /* Global variables. */
728 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
729
730 /* Initial mappings of port to bridge mappings. */
731 static struct shash init_ofp_ports = SHASH_INITIALIZER(&init_ofp_ports);
732 \f
733 /* Factory functions. */
734
735 static void
736 init(const struct shash *iface_hints)
737 {
738     struct shash_node *node;
739
740     /* Make a local copy, since we don't own 'iface_hints' elements. */
741     SHASH_FOR_EACH(node, iface_hints) {
742         const struct iface_hint *orig_hint = node->data;
743         struct iface_hint *new_hint = xmalloc(sizeof *new_hint);
744
745         new_hint->br_name = xstrdup(orig_hint->br_name);
746         new_hint->br_type = xstrdup(orig_hint->br_type);
747         new_hint->ofp_port = orig_hint->ofp_port;
748
749         shash_add(&init_ofp_ports, node->name, new_hint);
750     }
751 }
752
753 static void
754 enumerate_types(struct sset *types)
755 {
756     dp_enumerate_types(types);
757 }
758
759 static int
760 enumerate_names(const char *type, struct sset *names)
761 {
762     struct ofproto_dpif *ofproto;
763
764     sset_clear(names);
765     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
766         if (strcmp(type, ofproto->up.type)) {
767             continue;
768         }
769         sset_add(names, ofproto->up.name);
770     }
771
772     return 0;
773 }
774
775 static int
776 del(const char *type, const char *name)
777 {
778     struct dpif *dpif;
779     int error;
780
781     error = dpif_open(name, type, &dpif);
782     if (!error) {
783         error = dpif_delete(dpif);
784         dpif_close(dpif);
785     }
786     return error;
787 }
788 \f
789 static const char *
790 port_open_type(const char *datapath_type, const char *port_type)
791 {
792     return dpif_port_open_type(datapath_type, port_type);
793 }
794
795 /* Type functions. */
796
797 static struct ofproto_dpif *
798 lookup_ofproto_dpif_by_port_name(const char *name)
799 {
800     struct ofproto_dpif *ofproto;
801
802     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
803         if (sset_contains(&ofproto->ports, name)) {
804             return ofproto;
805         }
806     }
807
808     return NULL;
809 }
810
811 static int
812 type_run(const char *type)
813 {
814     struct dpif_backer *backer;
815     char *devname;
816     int error;
817
818     backer = shash_find_data(&all_dpif_backers, type);
819     if (!backer) {
820         /* This is not necessarily a problem, since backers are only
821          * created on demand. */
822         return 0;
823     }
824
825     dpif_run(backer->dpif);
826
827     if (timer_expired(&backer->next_expiration)) {
828         int delay = expire(backer);
829         timer_set_duration(&backer->next_expiration, delay);
830     }
831
832     /* Check for port changes in the dpif. */
833     while ((error = dpif_port_poll(backer->dpif, &devname)) == 0) {
834         struct ofproto_dpif *ofproto;
835         struct dpif_port port;
836
837         /* Don't report on the datapath's device. */
838         if (!strcmp(devname, dpif_base_name(backer->dpif))) {
839             continue;
840         }
841
842         ofproto = lookup_ofproto_dpif_by_port_name(devname);
843         if (dpif_port_query_by_name(backer->dpif, devname, &port)) {
844             /* The port was removed.  If we know the datapath,
845              * report it through poll_set().  If we don't, it may be
846              * notifying us of a removal we initiated, so ignore it.
847              * If there's a pending ENOBUFS, let it stand, since
848              * everything will be reevaluated. */
849             if (ofproto && ofproto->port_poll_errno != ENOBUFS) {
850                 sset_add(&ofproto->port_poll_set, devname);
851                 ofproto->port_poll_errno = 0;
852             }
853             dpif_port_destroy(&port);
854         } else if (!ofproto) {
855             /* The port was added, but we don't know with which
856              * ofproto we should associate it.  Delete it. */
857             dpif_port_del(backer->dpif, port.port_no);
858         }
859
860         free(devname);
861     }
862
863     if (error != EAGAIN) {
864         struct ofproto_dpif *ofproto;
865
866         /* There was some sort of error, so propagate it to all
867          * ofprotos that use this backer. */
868         HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node,
869                        &all_ofproto_dpifs) {
870             if (ofproto->backer == backer) {
871                 sset_clear(&ofproto->port_poll_set);
872                 ofproto->port_poll_errno = error;
873             }
874         }
875     }
876
877     return 0;
878 }
879
880 static int
881 type_run_fast(const char *type)
882 {
883     struct dpif_backer *backer;
884     unsigned int work;
885
886     backer = shash_find_data(&all_dpif_backers, type);
887     if (!backer) {
888         /* This is not necessarily a problem, since backers are only
889          * created on demand. */
890         return 0;
891     }
892
893     /* Handle one or more batches of upcalls, until there's nothing left to do
894      * or until we do a fixed total amount of work.
895      *
896      * We do work in batches because it can be much cheaper to set up a number
897      * of flows and fire off their patches all at once.  We do multiple batches
898      * because in some cases handling a packet can cause another packet to be
899      * queued almost immediately as part of the return flow.  Both
900      * optimizations can make major improvements on some benchmarks and
901      * presumably for real traffic as well. */
902     work = 0;
903     while (work < FLOW_MISS_MAX_BATCH) {
904         int retval = handle_upcalls(backer, FLOW_MISS_MAX_BATCH - work);
905         if (retval <= 0) {
906             return -retval;
907         }
908         work += retval;
909     }
910
911     return 0;
912 }
913
914 static void
915 type_wait(const char *type)
916 {
917     struct dpif_backer *backer;
918
919     backer = shash_find_data(&all_dpif_backers, type);
920     if (!backer) {
921         /* This is not necessarily a problem, since backers are only
922          * created on demand. */
923         return;
924     }
925
926     timer_wait(&backer->next_expiration);
927 }
928 \f
929 /* Basic life-cycle. */
930
931 static int add_internal_flows(struct ofproto_dpif *);
932
933 static struct ofproto *
934 alloc(void)
935 {
936     struct ofproto_dpif *ofproto = xmalloc(sizeof *ofproto);
937     return &ofproto->up;
938 }
939
940 static void
941 dealloc(struct ofproto *ofproto_)
942 {
943     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
944     free(ofproto);
945 }
946
947 static void
948 close_dpif_backer(struct dpif_backer *backer)
949 {
950     struct shash_node *node;
951
952     assert(backer->refcount > 0);
953
954     if (--backer->refcount) {
955         return;
956     }
957
958     hmap_destroy(&backer->odp_to_ofport_map);
959     node = shash_find(&all_dpif_backers, backer->type);
960     free(backer->type);
961     shash_delete(&all_dpif_backers, node);
962     dpif_close(backer->dpif);
963
964     free(backer);
965 }
966
967 /* Datapath port slated for removal from datapath. */
968 struct odp_garbage {
969     struct list list_node;
970     uint32_t odp_port;
971 };
972
973 static int
974 open_dpif_backer(const char *type, struct dpif_backer **backerp)
975 {
976     struct dpif_backer *backer;
977     struct dpif_port_dump port_dump;
978     struct dpif_port port;
979     struct shash_node *node;
980     struct list garbage_list;
981     struct odp_garbage *garbage, *next;
982     struct sset names;
983     char *backer_name;
984     const char *name;
985     int error;
986
987     backer = shash_find_data(&all_dpif_backers, type);
988     if (backer) {
989         backer->refcount++;
990         *backerp = backer;
991         return 0;
992     }
993
994     backer_name = xasprintf("ovs-%s", type);
995
996     /* Remove any existing datapaths, since we assume we're the only
997      * userspace controlling the datapath. */
998     sset_init(&names);
999     dp_enumerate_names(type, &names);
1000     SSET_FOR_EACH(name, &names) {
1001         struct dpif *old_dpif;
1002
1003         /* Don't remove our backer if it exists. */
1004         if (!strcmp(name, backer_name)) {
1005             continue;
1006         }
1007
1008         if (dpif_open(name, type, &old_dpif)) {
1009             VLOG_WARN("couldn't open old datapath %s to remove it", name);
1010         } else {
1011             dpif_delete(old_dpif);
1012             dpif_close(old_dpif);
1013         }
1014     }
1015     sset_destroy(&names);
1016
1017     backer = xmalloc(sizeof *backer);
1018
1019     error = dpif_create_and_open(backer_name, type, &backer->dpif);
1020     free(backer_name);
1021     if (error) {
1022         VLOG_ERR("failed to open datapath of type %s: %s", type,
1023                  strerror(error));
1024         return error;
1025     }
1026
1027     backer->type = xstrdup(type);
1028     backer->refcount = 1;
1029     hmap_init(&backer->odp_to_ofport_map);
1030     timer_set_duration(&backer->next_expiration, 1000);
1031     *backerp = backer;
1032
1033     dpif_flow_flush(backer->dpif);
1034
1035     /* Loop through the ports already on the datapath and remove any
1036      * that we don't need anymore. */
1037     list_init(&garbage_list);
1038     dpif_port_dump_start(&port_dump, backer->dpif);
1039     while (dpif_port_dump_next(&port_dump, &port)) {
1040         node = shash_find(&init_ofp_ports, port.name);
1041         if (!node && strcmp(port.name, dpif_base_name(backer->dpif))) {
1042             garbage = xmalloc(sizeof *garbage);
1043             garbage->odp_port = port.port_no;
1044             list_push_front(&garbage_list, &garbage->list_node);
1045         }
1046     }
1047     dpif_port_dump_done(&port_dump);
1048
1049     LIST_FOR_EACH_SAFE (garbage, next, list_node, &garbage_list) {
1050         dpif_port_del(backer->dpif, garbage->odp_port);
1051         list_remove(&garbage->list_node);
1052         free(garbage);
1053     }
1054
1055     shash_add(&all_dpif_backers, type, backer);
1056
1057     error = dpif_recv_set(backer->dpif, true);
1058     if (error) {
1059         VLOG_ERR("failed to listen on datapath of type %s: %s",
1060                  type, strerror(error));
1061         close_dpif_backer(backer);
1062         return error;
1063     }
1064
1065     return error;
1066 }
1067
1068 static int
1069 construct(struct ofproto *ofproto_)
1070 {
1071     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1072     struct shash_node *node, *next;
1073     int max_ports;
1074     int error;
1075     int i;
1076
1077     error = open_dpif_backer(ofproto->up.type, &ofproto->backer);
1078     if (error) {
1079         return error;
1080     }
1081
1082     max_ports = dpif_get_max_ports(ofproto->backer->dpif);
1083     ofproto_init_max_ports(ofproto_, MIN(max_ports, OFPP_MAX));
1084
1085     ofproto->n_matches = 0;
1086
1087     ofproto->netflow = NULL;
1088     ofproto->sflow = NULL;
1089     ofproto->stp = NULL;
1090     hmap_init(&ofproto->bundles);
1091     ofproto->ml = mac_learning_create(MAC_ENTRY_DEFAULT_IDLE_TIME);
1092     for (i = 0; i < MAX_MIRRORS; i++) {
1093         ofproto->mirrors[i] = NULL;
1094     }
1095     ofproto->has_bonded_bundles = false;
1096
1097     hmap_init(&ofproto->facets);
1098     hmap_init(&ofproto->subfacets);
1099     ofproto->governor = NULL;
1100
1101     for (i = 0; i < N_TABLES; i++) {
1102         struct table_dpif *table = &ofproto->tables[i];
1103
1104         table->catchall_table = NULL;
1105         table->other_table = NULL;
1106         table->basis = random_uint32();
1107     }
1108     ofproto->need_revalidate = 0;
1109     tag_set_init(&ofproto->revalidate_set);
1110
1111     list_init(&ofproto->completions);
1112
1113     ofproto_dpif_unixctl_init();
1114
1115     ofproto->has_mirrors = false;
1116     ofproto->has_bundle_action = false;
1117
1118     hmap_init(&ofproto->vlandev_map);
1119     hmap_init(&ofproto->realdev_vid_map);
1120
1121     sset_init(&ofproto->ports);
1122     sset_init(&ofproto->port_poll_set);
1123     ofproto->port_poll_errno = 0;
1124
1125     SHASH_FOR_EACH_SAFE (node, next, &init_ofp_ports) {
1126         const struct iface_hint *iface_hint = node->data;
1127
1128         if (!strcmp(iface_hint->br_name, ofproto->up.name)) {
1129             /* Check if the datapath already has this port. */
1130             if (dpif_port_exists(ofproto->backer->dpif, node->name)) {
1131                 sset_add(&ofproto->ports, node->name);
1132             }
1133
1134             free(iface_hint->br_name);
1135             free(iface_hint->br_type);
1136             shash_delete(&init_ofp_ports, node);
1137         }
1138     }
1139
1140     hmap_insert(&all_ofproto_dpifs, &ofproto->all_ofproto_dpifs_node,
1141                 hash_string(ofproto->up.name, 0));
1142     memset(&ofproto->stats, 0, sizeof ofproto->stats);
1143
1144     ofproto_init_tables(ofproto_, N_TABLES);
1145     error = add_internal_flows(ofproto);
1146     ofproto->up.tables[TBL_INTERNAL].flags = OFTABLE_HIDDEN | OFTABLE_READONLY;
1147
1148     return error;
1149 }
1150
1151 static int
1152 add_internal_flow(struct ofproto_dpif *ofproto, int id,
1153                   const struct ofpbuf *ofpacts, struct rule_dpif **rulep)
1154 {
1155     struct ofputil_flow_mod fm;
1156     int error;
1157
1158     match_init_catchall(&fm.match);
1159     fm.priority = 0;
1160     match_set_reg(&fm.match, 0, id);
1161     fm.new_cookie = htonll(0);
1162     fm.cookie = htonll(0);
1163     fm.cookie_mask = htonll(0);
1164     fm.table_id = TBL_INTERNAL;
1165     fm.command = OFPFC_ADD;
1166     fm.idle_timeout = 0;
1167     fm.hard_timeout = 0;
1168     fm.buffer_id = 0;
1169     fm.out_port = 0;
1170     fm.flags = 0;
1171     fm.ofpacts = ofpacts->data;
1172     fm.ofpacts_len = ofpacts->size;
1173
1174     error = ofproto_flow_mod(&ofproto->up, &fm);
1175     if (error) {
1176         VLOG_ERR_RL(&rl, "failed to add internal flow %d (%s)",
1177                     id, ofperr_to_string(error));
1178         return error;
1179     }
1180
1181     *rulep = rule_dpif_lookup__(ofproto, &fm.match.flow, TBL_INTERNAL);
1182     assert(*rulep != NULL);
1183
1184     return 0;
1185 }
1186
1187 static int
1188 add_internal_flows(struct ofproto_dpif *ofproto)
1189 {
1190     struct ofpact_controller *controller;
1191     uint64_t ofpacts_stub[128 / 8];
1192     struct ofpbuf ofpacts;
1193     int error;
1194     int id;
1195
1196     ofpbuf_use_stack(&ofpacts, ofpacts_stub, sizeof ofpacts_stub);
1197     id = 1;
1198
1199     controller = ofpact_put_CONTROLLER(&ofpacts);
1200     controller->max_len = UINT16_MAX;
1201     controller->controller_id = 0;
1202     controller->reason = OFPR_NO_MATCH;
1203     ofpact_pad(&ofpacts);
1204
1205     error = add_internal_flow(ofproto, id++, &ofpacts, &ofproto->miss_rule);
1206     if (error) {
1207         return error;
1208     }
1209
1210     ofpbuf_clear(&ofpacts);
1211     error = add_internal_flow(ofproto, id++, &ofpacts,
1212                               &ofproto->no_packet_in_rule);
1213     return error;
1214 }
1215
1216 static void
1217 complete_operations(struct ofproto_dpif *ofproto)
1218 {
1219     struct dpif_completion *c, *next;
1220
1221     LIST_FOR_EACH_SAFE (c, next, list_node, &ofproto->completions) {
1222         ofoperation_complete(c->op, 0);
1223         list_remove(&c->list_node);
1224         free(c);
1225     }
1226 }
1227
1228 static void
1229 destruct(struct ofproto *ofproto_)
1230 {
1231     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1232     struct rule_dpif *rule, *next_rule;
1233     struct oftable *table;
1234     int i;
1235
1236     hmap_remove(&all_ofproto_dpifs, &ofproto->all_ofproto_dpifs_node);
1237     complete_operations(ofproto);
1238
1239     OFPROTO_FOR_EACH_TABLE (table, &ofproto->up) {
1240         struct cls_cursor cursor;
1241
1242         cls_cursor_init(&cursor, &table->cls, NULL);
1243         CLS_CURSOR_FOR_EACH_SAFE (rule, next_rule, up.cr, &cursor) {
1244             ofproto_rule_destroy(&rule->up);
1245         }
1246     }
1247
1248     for (i = 0; i < MAX_MIRRORS; i++) {
1249         mirror_destroy(ofproto->mirrors[i]);
1250     }
1251
1252     netflow_destroy(ofproto->netflow);
1253     dpif_sflow_destroy(ofproto->sflow);
1254     hmap_destroy(&ofproto->bundles);
1255     mac_learning_destroy(ofproto->ml);
1256
1257     hmap_destroy(&ofproto->facets);
1258     hmap_destroy(&ofproto->subfacets);
1259     governor_destroy(ofproto->governor);
1260
1261     hmap_destroy(&ofproto->vlandev_map);
1262     hmap_destroy(&ofproto->realdev_vid_map);
1263
1264     sset_destroy(&ofproto->ports);
1265     sset_destroy(&ofproto->port_poll_set);
1266
1267     close_dpif_backer(ofproto->backer);
1268 }
1269
1270 static int
1271 run_fast(struct ofproto *ofproto_)
1272 {
1273     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1274     struct ofport_dpif *ofport;
1275
1276     HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
1277         port_run_fast(ofport);
1278     }
1279
1280     return 0;
1281 }
1282
1283 static int
1284 run(struct ofproto *ofproto_)
1285 {
1286     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1287     struct ofport_dpif *ofport;
1288     struct ofbundle *bundle;
1289     int error;
1290
1291     if (!clogged) {
1292         complete_operations(ofproto);
1293     }
1294
1295     error = run_fast(ofproto_);
1296     if (error) {
1297         return error;
1298     }
1299
1300     if (ofproto->netflow) {
1301         if (netflow_run(ofproto->netflow)) {
1302             send_netflow_active_timeouts(ofproto);
1303         }
1304     }
1305     if (ofproto->sflow) {
1306         dpif_sflow_run(ofproto->sflow);
1307     }
1308
1309     HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
1310         port_run(ofport);
1311     }
1312     HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) {
1313         bundle_run(bundle);
1314     }
1315
1316     stp_run(ofproto);
1317     mac_learning_run(ofproto->ml, &ofproto->revalidate_set);
1318
1319     /* Now revalidate if there's anything to do. */
1320     if (ofproto->need_revalidate
1321         || !tag_set_is_empty(&ofproto->revalidate_set)) {
1322         struct tag_set revalidate_set = ofproto->revalidate_set;
1323         bool revalidate_all = ofproto->need_revalidate;
1324         struct facet *facet;
1325
1326         switch (ofproto->need_revalidate) {
1327         case REV_RECONFIGURE:   COVERAGE_INC(rev_reconfigure);   break;
1328         case REV_STP:           COVERAGE_INC(rev_stp);           break;
1329         case REV_PORT_TOGGLED:  COVERAGE_INC(rev_port_toggled);  break;
1330         case REV_FLOW_TABLE:    COVERAGE_INC(rev_flow_table);    break;
1331         case REV_INCONSISTENCY: COVERAGE_INC(rev_inconsistency); break;
1332         }
1333
1334         /* Clear the revalidation flags. */
1335         tag_set_init(&ofproto->revalidate_set);
1336         ofproto->need_revalidate = 0;
1337
1338         HMAP_FOR_EACH (facet, hmap_node, &ofproto->facets) {
1339             if (revalidate_all
1340                 || tag_set_intersects(&revalidate_set, facet->tags)) {
1341                 facet_revalidate(facet);
1342             }
1343         }
1344     }
1345
1346     /* Check the consistency of a random facet, to aid debugging. */
1347     if (!hmap_is_empty(&ofproto->facets) && !ofproto->need_revalidate) {
1348         struct facet *facet;
1349
1350         facet = CONTAINER_OF(hmap_random_node(&ofproto->facets),
1351                              struct facet, hmap_node);
1352         if (!tag_set_intersects(&ofproto->revalidate_set, facet->tags)) {
1353             if (!facet_check_consistency(facet)) {
1354                 ofproto->need_revalidate = REV_INCONSISTENCY;
1355             }
1356         }
1357     }
1358
1359     if (ofproto->governor) {
1360         size_t n_subfacets;
1361
1362         governor_run(ofproto->governor);
1363
1364         /* If the governor has shrunk to its minimum size and the number of
1365          * subfacets has dwindled, then drop the governor entirely.
1366          *
1367          * For hysteresis, the number of subfacets to drop the governor is
1368          * smaller than the number needed to trigger its creation. */
1369         n_subfacets = hmap_count(&ofproto->subfacets);
1370         if (n_subfacets * 4 < ofproto->up.flow_eviction_threshold
1371             && governor_is_idle(ofproto->governor)) {
1372             governor_destroy(ofproto->governor);
1373             ofproto->governor = NULL;
1374         }
1375     }
1376
1377     return 0;
1378 }
1379
1380 static void
1381 wait(struct ofproto *ofproto_)
1382 {
1383     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1384     struct ofport_dpif *ofport;
1385     struct ofbundle *bundle;
1386
1387     if (!clogged && !list_is_empty(&ofproto->completions)) {
1388         poll_immediate_wake();
1389     }
1390
1391     dpif_wait(ofproto->backer->dpif);
1392     dpif_recv_wait(ofproto->backer->dpif);
1393     if (ofproto->sflow) {
1394         dpif_sflow_wait(ofproto->sflow);
1395     }
1396     if (!tag_set_is_empty(&ofproto->revalidate_set)) {
1397         poll_immediate_wake();
1398     }
1399     HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
1400         port_wait(ofport);
1401     }
1402     HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) {
1403         bundle_wait(bundle);
1404     }
1405     if (ofproto->netflow) {
1406         netflow_wait(ofproto->netflow);
1407     }
1408     mac_learning_wait(ofproto->ml);
1409     stp_wait(ofproto);
1410     if (ofproto->need_revalidate) {
1411         /* Shouldn't happen, but if it does just go around again. */
1412         VLOG_DBG_RL(&rl, "need revalidate in ofproto_wait_cb()");
1413         poll_immediate_wake();
1414     }
1415     if (ofproto->governor) {
1416         governor_wait(ofproto->governor);
1417     }
1418 }
1419
1420 static void
1421 get_memory_usage(const struct ofproto *ofproto_, struct simap *usage)
1422 {
1423     const struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1424
1425     simap_increase(usage, "facets", hmap_count(&ofproto->facets));
1426     simap_increase(usage, "subfacets", hmap_count(&ofproto->subfacets));
1427 }
1428
1429 static void
1430 flush(struct ofproto *ofproto_)
1431 {
1432     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1433     struct subfacet *subfacet, *next_subfacet;
1434     struct subfacet *batch[SUBFACET_DESTROY_MAX_BATCH];
1435     int n_batch;
1436
1437     n_batch = 0;
1438     HMAP_FOR_EACH_SAFE (subfacet, next_subfacet, hmap_node,
1439                         &ofproto->subfacets) {
1440         if (subfacet->path != SF_NOT_INSTALLED) {
1441             batch[n_batch++] = subfacet;
1442             if (n_batch >= SUBFACET_DESTROY_MAX_BATCH) {
1443                 subfacet_destroy_batch(ofproto, batch, n_batch);
1444                 n_batch = 0;
1445             }
1446         } else {
1447             subfacet_destroy(subfacet);
1448         }
1449     }
1450
1451     if (n_batch > 0) {
1452         subfacet_destroy_batch(ofproto, batch, n_batch);
1453     }
1454 }
1455
1456 static void
1457 get_features(struct ofproto *ofproto_ OVS_UNUSED,
1458              bool *arp_match_ip, enum ofputil_action_bitmap *actions)
1459 {
1460     *arp_match_ip = true;
1461     *actions = (OFPUTIL_A_OUTPUT |
1462                 OFPUTIL_A_SET_VLAN_VID |
1463                 OFPUTIL_A_SET_VLAN_PCP |
1464                 OFPUTIL_A_STRIP_VLAN |
1465                 OFPUTIL_A_SET_DL_SRC |
1466                 OFPUTIL_A_SET_DL_DST |
1467                 OFPUTIL_A_SET_NW_SRC |
1468                 OFPUTIL_A_SET_NW_DST |
1469                 OFPUTIL_A_SET_NW_TOS |
1470                 OFPUTIL_A_SET_TP_SRC |
1471                 OFPUTIL_A_SET_TP_DST |
1472                 OFPUTIL_A_ENQUEUE);
1473 }
1474
1475 static void
1476 get_tables(struct ofproto *ofproto_, struct ofp12_table_stats *ots)
1477 {
1478     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1479     struct dpif_dp_stats s;
1480
1481     strcpy(ots->name, "classifier");
1482
1483     dpif_get_dp_stats(ofproto->backer->dpif, &s);
1484
1485     ots->lookup_count = htonll(s.n_hit + s.n_missed);
1486     ots->matched_count = htonll(s.n_hit + ofproto->n_matches);
1487 }
1488
1489 static struct ofport *
1490 port_alloc(void)
1491 {
1492     struct ofport_dpif *port = xmalloc(sizeof *port);
1493     return &port->up;
1494 }
1495
1496 static void
1497 port_dealloc(struct ofport *port_)
1498 {
1499     struct ofport_dpif *port = ofport_dpif_cast(port_);
1500     free(port);
1501 }
1502
1503 static int
1504 port_construct(struct ofport *port_)
1505 {
1506     struct ofport_dpif *port = ofport_dpif_cast(port_);
1507     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
1508     struct dpif_port dpif_port;
1509     int error;
1510
1511     ofproto->need_revalidate = REV_RECONFIGURE;
1512     port->bundle = NULL;
1513     port->cfm = NULL;
1514     port->tag = tag_create_random();
1515     port->may_enable = true;
1516     port->stp_port = NULL;
1517     port->stp_state = STP_DISABLED;
1518     hmap_init(&port->priorities);
1519     port->realdev_ofp_port = 0;
1520     port->vlandev_vid = 0;
1521     port->carrier_seq = netdev_get_carrier_resets(port->up.netdev);
1522
1523     error = dpif_port_query_by_name(ofproto->backer->dpif,
1524                                     netdev_get_name(port->up.netdev),
1525                                     &dpif_port);
1526     if (error) {
1527         return error;
1528     }
1529
1530     port->odp_port = dpif_port.port_no;
1531
1532     /* Sanity-check that a mapping doesn't already exist.  This
1533      * shouldn't happen. */
1534     if (odp_port_to_ofp_port(ofproto, port->odp_port) != OFPP_NONE) {
1535         VLOG_ERR("port %s already has an OpenFlow port number\n",
1536                  dpif_port.name);
1537         return EBUSY;
1538     }
1539
1540     hmap_insert(&ofproto->backer->odp_to_ofport_map, &port->odp_port_node,
1541                 hash_int(port->odp_port, 0));
1542
1543     if (ofproto->sflow) {
1544         dpif_sflow_add_port(ofproto->sflow, port_, port->odp_port);
1545     }
1546
1547     return 0;
1548 }
1549
1550 static void
1551 port_destruct(struct ofport *port_)
1552 {
1553     struct ofport_dpif *port = ofport_dpif_cast(port_);
1554     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
1555     const char *devname = netdev_get_name(port->up.netdev);
1556
1557     if (dpif_port_exists(ofproto->backer->dpif, devname)) {
1558         /* The underlying device is still there, so delete it.  This
1559          * happens when the ofproto is being destroyed, since the caller
1560          * assumes that removal of attached ports will happen as part of
1561          * destruction. */
1562         dpif_port_del(ofproto->backer->dpif, port->odp_port);
1563     }
1564
1565     sset_find_and_delete(&ofproto->ports, devname);
1566     hmap_remove(&ofproto->backer->odp_to_ofport_map, &port->odp_port_node);
1567     ofproto->need_revalidate = REV_RECONFIGURE;
1568     bundle_remove(port_);
1569     set_cfm(port_, NULL);
1570     if (ofproto->sflow) {
1571         dpif_sflow_del_port(ofproto->sflow, port->odp_port);
1572     }
1573
1574     ofport_clear_priorities(port);
1575     hmap_destroy(&port->priorities);
1576 }
1577
1578 static void
1579 port_modified(struct ofport *port_)
1580 {
1581     struct ofport_dpif *port = ofport_dpif_cast(port_);
1582
1583     if (port->bundle && port->bundle->bond) {
1584         bond_slave_set_netdev(port->bundle->bond, port, port->up.netdev);
1585     }
1586 }
1587
1588 static void
1589 port_reconfigured(struct ofport *port_, enum ofputil_port_config old_config)
1590 {
1591     struct ofport_dpif *port = ofport_dpif_cast(port_);
1592     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
1593     enum ofputil_port_config changed = old_config ^ port->up.pp.config;
1594
1595     if (changed & (OFPUTIL_PC_NO_RECV | OFPUTIL_PC_NO_RECV_STP |
1596                    OFPUTIL_PC_NO_FWD | OFPUTIL_PC_NO_FLOOD |
1597                    OFPUTIL_PC_NO_PACKET_IN)) {
1598         ofproto->need_revalidate = REV_RECONFIGURE;
1599
1600         if (changed & OFPUTIL_PC_NO_FLOOD && port->bundle) {
1601             bundle_update(port->bundle);
1602         }
1603     }
1604 }
1605
1606 static int
1607 set_sflow(struct ofproto *ofproto_,
1608           const struct ofproto_sflow_options *sflow_options)
1609 {
1610     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1611     struct dpif_sflow *ds = ofproto->sflow;
1612
1613     if (sflow_options) {
1614         if (!ds) {
1615             struct ofport_dpif *ofport;
1616
1617             ds = ofproto->sflow = dpif_sflow_create();
1618             HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
1619                 dpif_sflow_add_port(ds, &ofport->up, ofport->odp_port);
1620             }
1621             ofproto->need_revalidate = REV_RECONFIGURE;
1622         }
1623         dpif_sflow_set_options(ds, sflow_options);
1624     } else {
1625         if (ds) {
1626             dpif_sflow_destroy(ds);
1627             ofproto->need_revalidate = REV_RECONFIGURE;
1628             ofproto->sflow = NULL;
1629         }
1630     }
1631     return 0;
1632 }
1633
1634 static int
1635 set_cfm(struct ofport *ofport_, const struct cfm_settings *s)
1636 {
1637     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1638     int error;
1639
1640     if (!s) {
1641         error = 0;
1642     } else {
1643         if (!ofport->cfm) {
1644             struct ofproto_dpif *ofproto;
1645
1646             ofproto = ofproto_dpif_cast(ofport->up.ofproto);
1647             ofproto->need_revalidate = REV_RECONFIGURE;
1648             ofport->cfm = cfm_create(netdev_get_name(ofport->up.netdev));
1649         }
1650
1651         if (cfm_configure(ofport->cfm, s)) {
1652             return 0;
1653         }
1654
1655         error = EINVAL;
1656     }
1657     cfm_destroy(ofport->cfm);
1658     ofport->cfm = NULL;
1659     return error;
1660 }
1661
1662 static int
1663 get_cfm_fault(const struct ofport *ofport_)
1664 {
1665     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1666
1667     return ofport->cfm ? cfm_get_fault(ofport->cfm) : -1;
1668 }
1669
1670 static int
1671 get_cfm_opup(const struct ofport *ofport_)
1672 {
1673     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1674
1675     return ofport->cfm ? cfm_get_opup(ofport->cfm) : -1;
1676 }
1677
1678 static int
1679 get_cfm_remote_mpids(const struct ofport *ofport_, const uint64_t **rmps,
1680                      size_t *n_rmps)
1681 {
1682     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1683
1684     if (ofport->cfm) {
1685         cfm_get_remote_mpids(ofport->cfm, rmps, n_rmps);
1686         return 0;
1687     } else {
1688         return -1;
1689     }
1690 }
1691
1692 static int
1693 get_cfm_health(const struct ofport *ofport_)
1694 {
1695     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1696
1697     return ofport->cfm ? cfm_get_health(ofport->cfm) : -1;
1698 }
1699 \f
1700 /* Spanning Tree. */
1701
1702 static void
1703 send_bpdu_cb(struct ofpbuf *pkt, int port_num, void *ofproto_)
1704 {
1705     struct ofproto_dpif *ofproto = ofproto_;
1706     struct stp_port *sp = stp_get_port(ofproto->stp, port_num);
1707     struct ofport_dpif *ofport;
1708
1709     ofport = stp_port_get_aux(sp);
1710     if (!ofport) {
1711         VLOG_WARN_RL(&rl, "%s: cannot send BPDU on unknown port %d",
1712                      ofproto->up.name, port_num);
1713     } else {
1714         struct eth_header *eth = pkt->l2;
1715
1716         netdev_get_etheraddr(ofport->up.netdev, eth->eth_src);
1717         if (eth_addr_is_zero(eth->eth_src)) {
1718             VLOG_WARN_RL(&rl, "%s: cannot send BPDU on port %d "
1719                          "with unknown MAC", ofproto->up.name, port_num);
1720         } else {
1721             send_packet(ofport, pkt);
1722         }
1723     }
1724     ofpbuf_delete(pkt);
1725 }
1726
1727 /* Configures STP on 'ofproto_' using the settings defined in 's'. */
1728 static int
1729 set_stp(struct ofproto *ofproto_, const struct ofproto_stp_settings *s)
1730 {
1731     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1732
1733     /* Only revalidate flows if the configuration changed. */
1734     if (!s != !ofproto->stp) {
1735         ofproto->need_revalidate = REV_RECONFIGURE;
1736     }
1737
1738     if (s) {
1739         if (!ofproto->stp) {
1740             ofproto->stp = stp_create(ofproto_->name, s->system_id,
1741                                       send_bpdu_cb, ofproto);
1742             ofproto->stp_last_tick = time_msec();
1743         }
1744
1745         stp_set_bridge_id(ofproto->stp, s->system_id);
1746         stp_set_bridge_priority(ofproto->stp, s->priority);
1747         stp_set_hello_time(ofproto->stp, s->hello_time);
1748         stp_set_max_age(ofproto->stp, s->max_age);
1749         stp_set_forward_delay(ofproto->stp, s->fwd_delay);
1750     }  else {
1751         struct ofport *ofport;
1752
1753         HMAP_FOR_EACH (ofport, hmap_node, &ofproto->up.ports) {
1754             set_stp_port(ofport, NULL);
1755         }
1756
1757         stp_destroy(ofproto->stp);
1758         ofproto->stp = NULL;
1759     }
1760
1761     return 0;
1762 }
1763
1764 static int
1765 get_stp_status(struct ofproto *ofproto_, struct ofproto_stp_status *s)
1766 {
1767     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1768
1769     if (ofproto->stp) {
1770         s->enabled = true;
1771         s->bridge_id = stp_get_bridge_id(ofproto->stp);
1772         s->designated_root = stp_get_designated_root(ofproto->stp);
1773         s->root_path_cost = stp_get_root_path_cost(ofproto->stp);
1774     } else {
1775         s->enabled = false;
1776     }
1777
1778     return 0;
1779 }
1780
1781 static void
1782 update_stp_port_state(struct ofport_dpif *ofport)
1783 {
1784     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
1785     enum stp_state state;
1786
1787     /* Figure out new state. */
1788     state = ofport->stp_port ? stp_port_get_state(ofport->stp_port)
1789                              : STP_DISABLED;
1790
1791     /* Update state. */
1792     if (ofport->stp_state != state) {
1793         enum ofputil_port_state of_state;
1794         bool fwd_change;
1795
1796         VLOG_DBG_RL(&rl, "port %s: STP state changed from %s to %s",
1797                     netdev_get_name(ofport->up.netdev),
1798                     stp_state_name(ofport->stp_state),
1799                     stp_state_name(state));
1800         if (stp_learn_in_state(ofport->stp_state)
1801                 != stp_learn_in_state(state)) {
1802             /* xxx Learning action flows should also be flushed. */
1803             mac_learning_flush(ofproto->ml, &ofproto->revalidate_set);
1804         }
1805         fwd_change = stp_forward_in_state(ofport->stp_state)
1806                         != stp_forward_in_state(state);
1807
1808         ofproto->need_revalidate = REV_STP;
1809         ofport->stp_state = state;
1810         ofport->stp_state_entered = time_msec();
1811
1812         if (fwd_change && ofport->bundle) {
1813             bundle_update(ofport->bundle);
1814         }
1815
1816         /* Update the STP state bits in the OpenFlow port description. */
1817         of_state = ofport->up.pp.state & ~OFPUTIL_PS_STP_MASK;
1818         of_state |= (state == STP_LISTENING ? OFPUTIL_PS_STP_LISTEN
1819                      : state == STP_LEARNING ? OFPUTIL_PS_STP_LEARN
1820                      : state == STP_FORWARDING ? OFPUTIL_PS_STP_FORWARD
1821                      : state == STP_BLOCKING ?  OFPUTIL_PS_STP_BLOCK
1822                      : 0);
1823         ofproto_port_set_state(&ofport->up, of_state);
1824     }
1825 }
1826
1827 /* Configures STP on 'ofport_' using the settings defined in 's'.  The
1828  * caller is responsible for assigning STP port numbers and ensuring
1829  * there are no duplicates. */
1830 static int
1831 set_stp_port(struct ofport *ofport_,
1832              const struct ofproto_port_stp_settings *s)
1833 {
1834     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1835     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
1836     struct stp_port *sp = ofport->stp_port;
1837
1838     if (!s || !s->enable) {
1839         if (sp) {
1840             ofport->stp_port = NULL;
1841             stp_port_disable(sp);
1842             update_stp_port_state(ofport);
1843         }
1844         return 0;
1845     } else if (sp && stp_port_no(sp) != s->port_num
1846             && ofport == stp_port_get_aux(sp)) {
1847         /* The port-id changed, so disable the old one if it's not
1848          * already in use by another port. */
1849         stp_port_disable(sp);
1850     }
1851
1852     sp = ofport->stp_port = stp_get_port(ofproto->stp, s->port_num);
1853     stp_port_enable(sp);
1854
1855     stp_port_set_aux(sp, ofport);
1856     stp_port_set_priority(sp, s->priority);
1857     stp_port_set_path_cost(sp, s->path_cost);
1858
1859     update_stp_port_state(ofport);
1860
1861     return 0;
1862 }
1863
1864 static int
1865 get_stp_port_status(struct ofport *ofport_,
1866                     struct ofproto_port_stp_status *s)
1867 {
1868     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1869     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
1870     struct stp_port *sp = ofport->stp_port;
1871
1872     if (!ofproto->stp || !sp) {
1873         s->enabled = false;
1874         return 0;
1875     }
1876
1877     s->enabled = true;
1878     s->port_id = stp_port_get_id(sp);
1879     s->state = stp_port_get_state(sp);
1880     s->sec_in_state = (time_msec() - ofport->stp_state_entered) / 1000;
1881     s->role = stp_port_get_role(sp);
1882     stp_port_get_counts(sp, &s->tx_count, &s->rx_count, &s->error_count);
1883
1884     return 0;
1885 }
1886
1887 static void
1888 stp_run(struct ofproto_dpif *ofproto)
1889 {
1890     if (ofproto->stp) {
1891         long long int now = time_msec();
1892         long long int elapsed = now - ofproto->stp_last_tick;
1893         struct stp_port *sp;
1894
1895         if (elapsed > 0) {
1896             stp_tick(ofproto->stp, MIN(INT_MAX, elapsed));
1897             ofproto->stp_last_tick = now;
1898         }
1899         while (stp_get_changed_port(ofproto->stp, &sp)) {
1900             struct ofport_dpif *ofport = stp_port_get_aux(sp);
1901
1902             if (ofport) {
1903                 update_stp_port_state(ofport);
1904             }
1905         }
1906
1907         if (stp_check_and_reset_fdb_flush(ofproto->stp)) {
1908             mac_learning_flush(ofproto->ml, &ofproto->revalidate_set);
1909         }
1910     }
1911 }
1912
1913 static void
1914 stp_wait(struct ofproto_dpif *ofproto)
1915 {
1916     if (ofproto->stp) {
1917         poll_timer_wait(1000);
1918     }
1919 }
1920
1921 /* Returns true if STP should process 'flow'. */
1922 static bool
1923 stp_should_process_flow(const struct flow *flow)
1924 {
1925     return eth_addr_equals(flow->dl_dst, eth_addr_stp);
1926 }
1927
1928 static void
1929 stp_process_packet(const struct ofport_dpif *ofport,
1930                    const struct ofpbuf *packet)
1931 {
1932     struct ofpbuf payload = *packet;
1933     struct eth_header *eth = payload.data;
1934     struct stp_port *sp = ofport->stp_port;
1935
1936     /* Sink packets on ports that have STP disabled when the bridge has
1937      * STP enabled. */
1938     if (!sp || stp_port_get_state(sp) == STP_DISABLED) {
1939         return;
1940     }
1941
1942     /* Trim off padding on payload. */
1943     if (payload.size > ntohs(eth->eth_type) + ETH_HEADER_LEN) {
1944         payload.size = ntohs(eth->eth_type) + ETH_HEADER_LEN;
1945     }
1946
1947     if (ofpbuf_try_pull(&payload, ETH_HEADER_LEN + LLC_HEADER_LEN)) {
1948         stp_received_bpdu(sp, payload.data, payload.size);
1949     }
1950 }
1951 \f
1952 static struct priority_to_dscp *
1953 get_priority(const struct ofport_dpif *ofport, uint32_t priority)
1954 {
1955     struct priority_to_dscp *pdscp;
1956     uint32_t hash;
1957
1958     hash = hash_int(priority, 0);
1959     HMAP_FOR_EACH_IN_BUCKET (pdscp, hmap_node, hash, &ofport->priorities) {
1960         if (pdscp->priority == priority) {
1961             return pdscp;
1962         }
1963     }
1964     return NULL;
1965 }
1966
1967 static void
1968 ofport_clear_priorities(struct ofport_dpif *ofport)
1969 {
1970     struct priority_to_dscp *pdscp, *next;
1971
1972     HMAP_FOR_EACH_SAFE (pdscp, next, hmap_node, &ofport->priorities) {
1973         hmap_remove(&ofport->priorities, &pdscp->hmap_node);
1974         free(pdscp);
1975     }
1976 }
1977
1978 static int
1979 set_queues(struct ofport *ofport_,
1980            const struct ofproto_port_queue *qdscp_list,
1981            size_t n_qdscp)
1982 {
1983     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1984     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
1985     struct hmap new = HMAP_INITIALIZER(&new);
1986     size_t i;
1987
1988     for (i = 0; i < n_qdscp; i++) {
1989         struct priority_to_dscp *pdscp;
1990         uint32_t priority;
1991         uint8_t dscp;
1992
1993         dscp = (qdscp_list[i].dscp << 2) & IP_DSCP_MASK;
1994         if (dpif_queue_to_priority(ofproto->backer->dpif, qdscp_list[i].queue,
1995                                    &priority)) {
1996             continue;
1997         }
1998
1999         pdscp = get_priority(ofport, priority);
2000         if (pdscp) {
2001             hmap_remove(&ofport->priorities, &pdscp->hmap_node);
2002         } else {
2003             pdscp = xmalloc(sizeof *pdscp);
2004             pdscp->priority = priority;
2005             pdscp->dscp = dscp;
2006             ofproto->need_revalidate = REV_RECONFIGURE;
2007         }
2008
2009         if (pdscp->dscp != dscp) {
2010             pdscp->dscp = dscp;
2011             ofproto->need_revalidate = REV_RECONFIGURE;
2012         }
2013
2014         hmap_insert(&new, &pdscp->hmap_node, hash_int(pdscp->priority, 0));
2015     }
2016
2017     if (!hmap_is_empty(&ofport->priorities)) {
2018         ofport_clear_priorities(ofport);
2019         ofproto->need_revalidate = REV_RECONFIGURE;
2020     }
2021
2022     hmap_swap(&new, &ofport->priorities);
2023     hmap_destroy(&new);
2024
2025     return 0;
2026 }
2027 \f
2028 /* Bundles. */
2029
2030 /* Expires all MAC learning entries associated with 'bundle' and forces its
2031  * ofproto to revalidate every flow.
2032  *
2033  * Normally MAC learning entries are removed only from the ofproto associated
2034  * with 'bundle', but if 'all_ofprotos' is true, then the MAC learning entries
2035  * are removed from every ofproto.  When patch ports and SLB bonds are in use
2036  * and a VM migration happens and the gratuitous ARPs are somehow lost, this
2037  * avoids a MAC_ENTRY_IDLE_TIME delay before the migrated VM can communicate
2038  * with the host from which it migrated. */
2039 static void
2040 bundle_flush_macs(struct ofbundle *bundle, bool all_ofprotos)
2041 {
2042     struct ofproto_dpif *ofproto = bundle->ofproto;
2043     struct mac_learning *ml = ofproto->ml;
2044     struct mac_entry *mac, *next_mac;
2045
2046     ofproto->need_revalidate = REV_RECONFIGURE;
2047     LIST_FOR_EACH_SAFE (mac, next_mac, lru_node, &ml->lrus) {
2048         if (mac->port.p == bundle) {
2049             if (all_ofprotos) {
2050                 struct ofproto_dpif *o;
2051
2052                 HMAP_FOR_EACH (o, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
2053                     if (o != ofproto) {
2054                         struct mac_entry *e;
2055
2056                         e = mac_learning_lookup(o->ml, mac->mac, mac->vlan,
2057                                                 NULL);
2058                         if (e) {
2059                             tag_set_add(&o->revalidate_set, e->tag);
2060                             mac_learning_expire(o->ml, e);
2061                         }
2062                     }
2063                 }
2064             }
2065
2066             mac_learning_expire(ml, mac);
2067         }
2068     }
2069 }
2070
2071 static struct ofbundle *
2072 bundle_lookup(const struct ofproto_dpif *ofproto, void *aux)
2073 {
2074     struct ofbundle *bundle;
2075
2076     HMAP_FOR_EACH_IN_BUCKET (bundle, hmap_node, hash_pointer(aux, 0),
2077                              &ofproto->bundles) {
2078         if (bundle->aux == aux) {
2079             return bundle;
2080         }
2081     }
2082     return NULL;
2083 }
2084
2085 /* Looks up each of the 'n_auxes' pointers in 'auxes' as bundles and adds the
2086  * ones that are found to 'bundles'. */
2087 static void
2088 bundle_lookup_multiple(struct ofproto_dpif *ofproto,
2089                        void **auxes, size_t n_auxes,
2090                        struct hmapx *bundles)
2091 {
2092     size_t i;
2093
2094     hmapx_init(bundles);
2095     for (i = 0; i < n_auxes; i++) {
2096         struct ofbundle *bundle = bundle_lookup(ofproto, auxes[i]);
2097         if (bundle) {
2098             hmapx_add(bundles, bundle);
2099         }
2100     }
2101 }
2102
2103 static void
2104 bundle_update(struct ofbundle *bundle)
2105 {
2106     struct ofport_dpif *port;
2107
2108     bundle->floodable = true;
2109     LIST_FOR_EACH (port, bundle_node, &bundle->ports) {
2110         if (port->up.pp.config & OFPUTIL_PC_NO_FLOOD
2111             || !stp_forward_in_state(port->stp_state)) {
2112             bundle->floodable = false;
2113             break;
2114         }
2115     }
2116 }
2117
2118 static void
2119 bundle_del_port(struct ofport_dpif *port)
2120 {
2121     struct ofbundle *bundle = port->bundle;
2122
2123     bundle->ofproto->need_revalidate = REV_RECONFIGURE;
2124
2125     list_remove(&port->bundle_node);
2126     port->bundle = NULL;
2127
2128     if (bundle->lacp) {
2129         lacp_slave_unregister(bundle->lacp, port);
2130     }
2131     if (bundle->bond) {
2132         bond_slave_unregister(bundle->bond, port);
2133     }
2134
2135     bundle_update(bundle);
2136 }
2137
2138 static bool
2139 bundle_add_port(struct ofbundle *bundle, uint32_t ofp_port,
2140                 struct lacp_slave_settings *lacp,
2141                 uint32_t bond_stable_id)
2142 {
2143     struct ofport_dpif *port;
2144
2145     port = get_ofp_port(bundle->ofproto, ofp_port);
2146     if (!port) {
2147         return false;
2148     }
2149
2150     if (port->bundle != bundle) {
2151         bundle->ofproto->need_revalidate = REV_RECONFIGURE;
2152         if (port->bundle) {
2153             bundle_del_port(port);
2154         }
2155
2156         port->bundle = bundle;
2157         list_push_back(&bundle->ports, &port->bundle_node);
2158         if (port->up.pp.config & OFPUTIL_PC_NO_FLOOD
2159             || !stp_forward_in_state(port->stp_state)) {
2160             bundle->floodable = false;
2161         }
2162     }
2163     if (lacp) {
2164         port->bundle->ofproto->need_revalidate = REV_RECONFIGURE;
2165         lacp_slave_register(bundle->lacp, port, lacp);
2166     }
2167
2168     port->bond_stable_id = bond_stable_id;
2169
2170     return true;
2171 }
2172
2173 static void
2174 bundle_destroy(struct ofbundle *bundle)
2175 {
2176     struct ofproto_dpif *ofproto;
2177     struct ofport_dpif *port, *next_port;
2178     int i;
2179
2180     if (!bundle) {
2181         return;
2182     }
2183
2184     ofproto = bundle->ofproto;
2185     for (i = 0; i < MAX_MIRRORS; i++) {
2186         struct ofmirror *m = ofproto->mirrors[i];
2187         if (m) {
2188             if (m->out == bundle) {
2189                 mirror_destroy(m);
2190             } else if (hmapx_find_and_delete(&m->srcs, bundle)
2191                        || hmapx_find_and_delete(&m->dsts, bundle)) {
2192                 ofproto->need_revalidate = REV_RECONFIGURE;
2193             }
2194         }
2195     }
2196
2197     LIST_FOR_EACH_SAFE (port, next_port, bundle_node, &bundle->ports) {
2198         bundle_del_port(port);
2199     }
2200
2201     bundle_flush_macs(bundle, true);
2202     hmap_remove(&ofproto->bundles, &bundle->hmap_node);
2203     free(bundle->name);
2204     free(bundle->trunks);
2205     lacp_destroy(bundle->lacp);
2206     bond_destroy(bundle->bond);
2207     free(bundle);
2208 }
2209
2210 static int
2211 bundle_set(struct ofproto *ofproto_, void *aux,
2212            const struct ofproto_bundle_settings *s)
2213 {
2214     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2215     bool need_flush = false;
2216     struct ofport_dpif *port;
2217     struct ofbundle *bundle;
2218     unsigned long *trunks;
2219     int vlan;
2220     size_t i;
2221     bool ok;
2222
2223     if (!s) {
2224         bundle_destroy(bundle_lookup(ofproto, aux));
2225         return 0;
2226     }
2227
2228     assert(s->n_slaves == 1 || s->bond != NULL);
2229     assert((s->lacp != NULL) == (s->lacp_slaves != NULL));
2230
2231     bundle = bundle_lookup(ofproto, aux);
2232     if (!bundle) {
2233         bundle = xmalloc(sizeof *bundle);
2234
2235         bundle->ofproto = ofproto;
2236         hmap_insert(&ofproto->bundles, &bundle->hmap_node,
2237                     hash_pointer(aux, 0));
2238         bundle->aux = aux;
2239         bundle->name = NULL;
2240
2241         list_init(&bundle->ports);
2242         bundle->vlan_mode = PORT_VLAN_TRUNK;
2243         bundle->vlan = -1;
2244         bundle->trunks = NULL;
2245         bundle->use_priority_tags = s->use_priority_tags;
2246         bundle->lacp = NULL;
2247         bundle->bond = NULL;
2248
2249         bundle->floodable = true;
2250
2251         bundle->src_mirrors = 0;
2252         bundle->dst_mirrors = 0;
2253         bundle->mirror_out = 0;
2254     }
2255
2256     if (!bundle->name || strcmp(s->name, bundle->name)) {
2257         free(bundle->name);
2258         bundle->name = xstrdup(s->name);
2259     }
2260
2261     /* LACP. */
2262     if (s->lacp) {
2263         if (!bundle->lacp) {
2264             ofproto->need_revalidate = REV_RECONFIGURE;
2265             bundle->lacp = lacp_create();
2266         }
2267         lacp_configure(bundle->lacp, s->lacp);
2268     } else {
2269         lacp_destroy(bundle->lacp);
2270         bundle->lacp = NULL;
2271     }
2272
2273     /* Update set of ports. */
2274     ok = true;
2275     for (i = 0; i < s->n_slaves; i++) {
2276         if (!bundle_add_port(bundle, s->slaves[i],
2277                              s->lacp ? &s->lacp_slaves[i] : NULL,
2278                              s->bond_stable_ids ? s->bond_stable_ids[i] : 0)) {
2279             ok = false;
2280         }
2281     }
2282     if (!ok || list_size(&bundle->ports) != s->n_slaves) {
2283         struct ofport_dpif *next_port;
2284
2285         LIST_FOR_EACH_SAFE (port, next_port, bundle_node, &bundle->ports) {
2286             for (i = 0; i < s->n_slaves; i++) {
2287                 if (s->slaves[i] == port->up.ofp_port) {
2288                     goto found;
2289                 }
2290             }
2291
2292             bundle_del_port(port);
2293         found: ;
2294         }
2295     }
2296     assert(list_size(&bundle->ports) <= s->n_slaves);
2297
2298     if (list_is_empty(&bundle->ports)) {
2299         bundle_destroy(bundle);
2300         return EINVAL;
2301     }
2302
2303     /* Set VLAN tagging mode */
2304     if (s->vlan_mode != bundle->vlan_mode
2305         || s->use_priority_tags != bundle->use_priority_tags) {
2306         bundle->vlan_mode = s->vlan_mode;
2307         bundle->use_priority_tags = s->use_priority_tags;
2308         need_flush = true;
2309     }
2310
2311     /* Set VLAN tag. */
2312     vlan = (s->vlan_mode == PORT_VLAN_TRUNK ? -1
2313             : s->vlan >= 0 && s->vlan <= 4095 ? s->vlan
2314             : 0);
2315     if (vlan != bundle->vlan) {
2316         bundle->vlan = vlan;
2317         need_flush = true;
2318     }
2319
2320     /* Get trunked VLANs. */
2321     switch (s->vlan_mode) {
2322     case PORT_VLAN_ACCESS:
2323         trunks = NULL;
2324         break;
2325
2326     case PORT_VLAN_TRUNK:
2327         trunks = CONST_CAST(unsigned long *, s->trunks);
2328         break;
2329
2330     case PORT_VLAN_NATIVE_UNTAGGED:
2331     case PORT_VLAN_NATIVE_TAGGED:
2332         if (vlan != 0 && (!s->trunks
2333                           || !bitmap_is_set(s->trunks, vlan)
2334                           || bitmap_is_set(s->trunks, 0))) {
2335             /* Force trunking the native VLAN and prohibit trunking VLAN 0. */
2336             if (s->trunks) {
2337                 trunks = bitmap_clone(s->trunks, 4096);
2338             } else {
2339                 trunks = bitmap_allocate1(4096);
2340             }
2341             bitmap_set1(trunks, vlan);
2342             bitmap_set0(trunks, 0);
2343         } else {
2344             trunks = CONST_CAST(unsigned long *, s->trunks);
2345         }
2346         break;
2347
2348     default:
2349         NOT_REACHED();
2350     }
2351     if (!vlan_bitmap_equal(trunks, bundle->trunks)) {
2352         free(bundle->trunks);
2353         if (trunks == s->trunks) {
2354             bundle->trunks = vlan_bitmap_clone(trunks);
2355         } else {
2356             bundle->trunks = trunks;
2357             trunks = NULL;
2358         }
2359         need_flush = true;
2360     }
2361     if (trunks != s->trunks) {
2362         free(trunks);
2363     }
2364
2365     /* Bonding. */
2366     if (!list_is_short(&bundle->ports)) {
2367         bundle->ofproto->has_bonded_bundles = true;
2368         if (bundle->bond) {
2369             if (bond_reconfigure(bundle->bond, s->bond)) {
2370                 ofproto->need_revalidate = REV_RECONFIGURE;
2371             }
2372         } else {
2373             bundle->bond = bond_create(s->bond);
2374             ofproto->need_revalidate = REV_RECONFIGURE;
2375         }
2376
2377         LIST_FOR_EACH (port, bundle_node, &bundle->ports) {
2378             bond_slave_register(bundle->bond, port, port->bond_stable_id,
2379                                 port->up.netdev);
2380         }
2381     } else {
2382         bond_destroy(bundle->bond);
2383         bundle->bond = NULL;
2384     }
2385
2386     /* If we changed something that would affect MAC learning, un-learn
2387      * everything on this port and force flow revalidation. */
2388     if (need_flush) {
2389         bundle_flush_macs(bundle, false);
2390     }
2391
2392     return 0;
2393 }
2394
2395 static void
2396 bundle_remove(struct ofport *port_)
2397 {
2398     struct ofport_dpif *port = ofport_dpif_cast(port_);
2399     struct ofbundle *bundle = port->bundle;
2400
2401     if (bundle) {
2402         bundle_del_port(port);
2403         if (list_is_empty(&bundle->ports)) {
2404             bundle_destroy(bundle);
2405         } else if (list_is_short(&bundle->ports)) {
2406             bond_destroy(bundle->bond);
2407             bundle->bond = NULL;
2408         }
2409     }
2410 }
2411
2412 static void
2413 send_pdu_cb(void *port_, const void *pdu, size_t pdu_size)
2414 {
2415     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 10);
2416     struct ofport_dpif *port = port_;
2417     uint8_t ea[ETH_ADDR_LEN];
2418     int error;
2419
2420     error = netdev_get_etheraddr(port->up.netdev, ea);
2421     if (!error) {
2422         struct ofpbuf packet;
2423         void *packet_pdu;
2424
2425         ofpbuf_init(&packet, 0);
2426         packet_pdu = eth_compose(&packet, eth_addr_lacp, ea, ETH_TYPE_LACP,
2427                                  pdu_size);
2428         memcpy(packet_pdu, pdu, pdu_size);
2429
2430         send_packet(port, &packet);
2431         ofpbuf_uninit(&packet);
2432     } else {
2433         VLOG_ERR_RL(&rl, "port %s: cannot obtain Ethernet address of iface "
2434                     "%s (%s)", port->bundle->name,
2435                     netdev_get_name(port->up.netdev), strerror(error));
2436     }
2437 }
2438
2439 static void
2440 bundle_send_learning_packets(struct ofbundle *bundle)
2441 {
2442     struct ofproto_dpif *ofproto = bundle->ofproto;
2443     int error, n_packets, n_errors;
2444     struct mac_entry *e;
2445
2446     error = n_packets = n_errors = 0;
2447     LIST_FOR_EACH (e, lru_node, &ofproto->ml->lrus) {
2448         if (e->port.p != bundle) {
2449             struct ofpbuf *learning_packet;
2450             struct ofport_dpif *port;
2451             void *port_void;
2452             int ret;
2453
2454             /* The assignment to "port" is unnecessary but makes "grep"ing for
2455              * struct ofport_dpif more effective. */
2456             learning_packet = bond_compose_learning_packet(bundle->bond,
2457                                                            e->mac, e->vlan,
2458                                                            &port_void);
2459             port = port_void;
2460             ret = send_packet(port, learning_packet);
2461             ofpbuf_delete(learning_packet);
2462             if (ret) {
2463                 error = ret;
2464                 n_errors++;
2465             }
2466             n_packets++;
2467         }
2468     }
2469
2470     if (n_errors) {
2471         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
2472         VLOG_WARN_RL(&rl, "bond %s: %d errors sending %d gratuitous learning "
2473                      "packets, last error was: %s",
2474                      bundle->name, n_errors, n_packets, strerror(error));
2475     } else {
2476         VLOG_DBG("bond %s: sent %d gratuitous learning packets",
2477                  bundle->name, n_packets);
2478     }
2479 }
2480
2481 static void
2482 bundle_run(struct ofbundle *bundle)
2483 {
2484     if (bundle->lacp) {
2485         lacp_run(bundle->lacp, send_pdu_cb);
2486     }
2487     if (bundle->bond) {
2488         struct ofport_dpif *port;
2489
2490         LIST_FOR_EACH (port, bundle_node, &bundle->ports) {
2491             bond_slave_set_may_enable(bundle->bond, port, port->may_enable);
2492         }
2493
2494         bond_run(bundle->bond, &bundle->ofproto->revalidate_set,
2495                  lacp_status(bundle->lacp));
2496         if (bond_should_send_learning_packets(bundle->bond)) {
2497             bundle_send_learning_packets(bundle);
2498         }
2499     }
2500 }
2501
2502 static void
2503 bundle_wait(struct ofbundle *bundle)
2504 {
2505     if (bundle->lacp) {
2506         lacp_wait(bundle->lacp);
2507     }
2508     if (bundle->bond) {
2509         bond_wait(bundle->bond);
2510     }
2511 }
2512 \f
2513 /* Mirrors. */
2514
2515 static int
2516 mirror_scan(struct ofproto_dpif *ofproto)
2517 {
2518     int idx;
2519
2520     for (idx = 0; idx < MAX_MIRRORS; idx++) {
2521         if (!ofproto->mirrors[idx]) {
2522             return idx;
2523         }
2524     }
2525     return -1;
2526 }
2527
2528 static struct ofmirror *
2529 mirror_lookup(struct ofproto_dpif *ofproto, void *aux)
2530 {
2531     int i;
2532
2533     for (i = 0; i < MAX_MIRRORS; i++) {
2534         struct ofmirror *mirror = ofproto->mirrors[i];
2535         if (mirror && mirror->aux == aux) {
2536             return mirror;
2537         }
2538     }
2539
2540     return NULL;
2541 }
2542
2543 /* Update the 'dup_mirrors' member of each of the ofmirrors in 'ofproto'. */
2544 static void
2545 mirror_update_dups(struct ofproto_dpif *ofproto)
2546 {
2547     int i;
2548
2549     for (i = 0; i < MAX_MIRRORS; i++) {
2550         struct ofmirror *m = ofproto->mirrors[i];
2551
2552         if (m) {
2553             m->dup_mirrors = MIRROR_MASK_C(1) << i;
2554         }
2555     }
2556
2557     for (i = 0; i < MAX_MIRRORS; i++) {
2558         struct ofmirror *m1 = ofproto->mirrors[i];
2559         int j;
2560
2561         if (!m1) {
2562             continue;
2563         }
2564
2565         for (j = i + 1; j < MAX_MIRRORS; j++) {
2566             struct ofmirror *m2 = ofproto->mirrors[j];
2567
2568             if (m2 && m1->out == m2->out && m1->out_vlan == m2->out_vlan) {
2569                 m1->dup_mirrors |= MIRROR_MASK_C(1) << j;
2570                 m2->dup_mirrors |= m1->dup_mirrors;
2571             }
2572         }
2573     }
2574 }
2575
2576 static int
2577 mirror_set(struct ofproto *ofproto_, void *aux,
2578            const struct ofproto_mirror_settings *s)
2579 {
2580     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2581     mirror_mask_t mirror_bit;
2582     struct ofbundle *bundle;
2583     struct ofmirror *mirror;
2584     struct ofbundle *out;
2585     struct hmapx srcs;          /* Contains "struct ofbundle *"s. */
2586     struct hmapx dsts;          /* Contains "struct ofbundle *"s. */
2587     int out_vlan;
2588
2589     mirror = mirror_lookup(ofproto, aux);
2590     if (!s) {
2591         mirror_destroy(mirror);
2592         return 0;
2593     }
2594     if (!mirror) {
2595         int idx;
2596
2597         idx = mirror_scan(ofproto);
2598         if (idx < 0) {
2599             VLOG_WARN("bridge %s: maximum of %d port mirrors reached, "
2600                       "cannot create %s",
2601                       ofproto->up.name, MAX_MIRRORS, s->name);
2602             return EFBIG;
2603         }
2604
2605         mirror = ofproto->mirrors[idx] = xzalloc(sizeof *mirror);
2606         mirror->ofproto = ofproto;
2607         mirror->idx = idx;
2608         mirror->aux = aux;
2609         mirror->out_vlan = -1;
2610         mirror->name = NULL;
2611     }
2612
2613     if (!mirror->name || strcmp(s->name, mirror->name)) {
2614         free(mirror->name);
2615         mirror->name = xstrdup(s->name);
2616     }
2617
2618     /* Get the new configuration. */
2619     if (s->out_bundle) {
2620         out = bundle_lookup(ofproto, s->out_bundle);
2621         if (!out) {
2622             mirror_destroy(mirror);
2623             return EINVAL;
2624         }
2625         out_vlan = -1;
2626     } else {
2627         out = NULL;
2628         out_vlan = s->out_vlan;
2629     }
2630     bundle_lookup_multiple(ofproto, s->srcs, s->n_srcs, &srcs);
2631     bundle_lookup_multiple(ofproto, s->dsts, s->n_dsts, &dsts);
2632
2633     /* If the configuration has not changed, do nothing. */
2634     if (hmapx_equals(&srcs, &mirror->srcs)
2635         && hmapx_equals(&dsts, &mirror->dsts)
2636         && vlan_bitmap_equal(mirror->vlans, s->src_vlans)
2637         && mirror->out == out
2638         && mirror->out_vlan == out_vlan)
2639     {
2640         hmapx_destroy(&srcs);
2641         hmapx_destroy(&dsts);
2642         return 0;
2643     }
2644
2645     hmapx_swap(&srcs, &mirror->srcs);
2646     hmapx_destroy(&srcs);
2647
2648     hmapx_swap(&dsts, &mirror->dsts);
2649     hmapx_destroy(&dsts);
2650
2651     free(mirror->vlans);
2652     mirror->vlans = vlan_bitmap_clone(s->src_vlans);
2653
2654     mirror->out = out;
2655     mirror->out_vlan = out_vlan;
2656
2657     /* Update bundles. */
2658     mirror_bit = MIRROR_MASK_C(1) << mirror->idx;
2659     HMAP_FOR_EACH (bundle, hmap_node, &mirror->ofproto->bundles) {
2660         if (hmapx_contains(&mirror->srcs, bundle)) {
2661             bundle->src_mirrors |= mirror_bit;
2662         } else {
2663             bundle->src_mirrors &= ~mirror_bit;
2664         }
2665
2666         if (hmapx_contains(&mirror->dsts, bundle)) {
2667             bundle->dst_mirrors |= mirror_bit;
2668         } else {
2669             bundle->dst_mirrors &= ~mirror_bit;
2670         }
2671
2672         if (mirror->out == bundle) {
2673             bundle->mirror_out |= mirror_bit;
2674         } else {
2675             bundle->mirror_out &= ~mirror_bit;
2676         }
2677     }
2678
2679     ofproto->need_revalidate = REV_RECONFIGURE;
2680     ofproto->has_mirrors = true;
2681     mac_learning_flush(ofproto->ml, &ofproto->revalidate_set);
2682     mirror_update_dups(ofproto);
2683
2684     return 0;
2685 }
2686
2687 static void
2688 mirror_destroy(struct ofmirror *mirror)
2689 {
2690     struct ofproto_dpif *ofproto;
2691     mirror_mask_t mirror_bit;
2692     struct ofbundle *bundle;
2693     int i;
2694
2695     if (!mirror) {
2696         return;
2697     }
2698
2699     ofproto = mirror->ofproto;
2700     ofproto->need_revalidate = REV_RECONFIGURE;
2701     mac_learning_flush(ofproto->ml, &ofproto->revalidate_set);
2702
2703     mirror_bit = MIRROR_MASK_C(1) << mirror->idx;
2704     HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) {
2705         bundle->src_mirrors &= ~mirror_bit;
2706         bundle->dst_mirrors &= ~mirror_bit;
2707         bundle->mirror_out &= ~mirror_bit;
2708     }
2709
2710     hmapx_destroy(&mirror->srcs);
2711     hmapx_destroy(&mirror->dsts);
2712     free(mirror->vlans);
2713
2714     ofproto->mirrors[mirror->idx] = NULL;
2715     free(mirror->name);
2716     free(mirror);
2717
2718     mirror_update_dups(ofproto);
2719
2720     ofproto->has_mirrors = false;
2721     for (i = 0; i < MAX_MIRRORS; i++) {
2722         if (ofproto->mirrors[i]) {
2723             ofproto->has_mirrors = true;
2724             break;
2725         }
2726     }
2727 }
2728
2729 static int
2730 mirror_get_stats(struct ofproto *ofproto_, void *aux,
2731                  uint64_t *packets, uint64_t *bytes)
2732 {
2733     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2734     struct ofmirror *mirror = mirror_lookup(ofproto, aux);
2735
2736     if (!mirror) {
2737         *packets = *bytes = UINT64_MAX;
2738         return 0;
2739     }
2740
2741     *packets = mirror->packet_count;
2742     *bytes = mirror->byte_count;
2743
2744     return 0;
2745 }
2746
2747 static int
2748 set_flood_vlans(struct ofproto *ofproto_, unsigned long *flood_vlans)
2749 {
2750     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2751     if (mac_learning_set_flood_vlans(ofproto->ml, flood_vlans)) {
2752         mac_learning_flush(ofproto->ml, &ofproto->revalidate_set);
2753     }
2754     return 0;
2755 }
2756
2757 static bool
2758 is_mirror_output_bundle(const struct ofproto *ofproto_, void *aux)
2759 {
2760     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2761     struct ofbundle *bundle = bundle_lookup(ofproto, aux);
2762     return bundle && bundle->mirror_out != 0;
2763 }
2764
2765 static void
2766 forward_bpdu_changed(struct ofproto *ofproto_)
2767 {
2768     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2769     ofproto->need_revalidate = REV_RECONFIGURE;
2770 }
2771
2772 static void
2773 set_mac_table_config(struct ofproto *ofproto_, unsigned int idle_time,
2774                      size_t max_entries)
2775 {
2776     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2777     mac_learning_set_idle_time(ofproto->ml, idle_time);
2778     mac_learning_set_max_entries(ofproto->ml, max_entries);
2779 }
2780 \f
2781 /* Ports. */
2782
2783 static struct ofport_dpif *
2784 get_ofp_port(const struct ofproto_dpif *ofproto, uint16_t ofp_port)
2785 {
2786     struct ofport *ofport = ofproto_get_port(&ofproto->up, ofp_port);
2787     return ofport ? ofport_dpif_cast(ofport) : NULL;
2788 }
2789
2790 static struct ofport_dpif *
2791 get_odp_port(const struct ofproto_dpif *ofproto, uint32_t odp_port)
2792 {
2793     return get_ofp_port(ofproto, odp_port_to_ofp_port(ofproto, odp_port));
2794 }
2795
2796 static void
2797 ofproto_port_from_dpif_port(struct ofproto_dpif *ofproto,
2798                             struct ofproto_port *ofproto_port,
2799                             struct dpif_port *dpif_port)
2800 {
2801     ofproto_port->name = dpif_port->name;
2802     ofproto_port->type = dpif_port->type;
2803     ofproto_port->ofp_port = odp_port_to_ofp_port(ofproto, dpif_port->port_no);
2804 }
2805
2806 static void
2807 port_run_fast(struct ofport_dpif *ofport)
2808 {
2809     if (ofport->cfm && cfm_should_send_ccm(ofport->cfm)) {
2810         struct ofpbuf packet;
2811
2812         ofpbuf_init(&packet, 0);
2813         cfm_compose_ccm(ofport->cfm, &packet, ofport->up.pp.hw_addr);
2814         send_packet(ofport, &packet);
2815         ofpbuf_uninit(&packet);
2816     }
2817 }
2818
2819 static void
2820 port_run(struct ofport_dpif *ofport)
2821 {
2822     long long int carrier_seq = netdev_get_carrier_resets(ofport->up.netdev);
2823     bool carrier_changed = carrier_seq != ofport->carrier_seq;
2824     bool enable = netdev_get_carrier(ofport->up.netdev);
2825
2826     ofport->carrier_seq = carrier_seq;
2827
2828     port_run_fast(ofport);
2829     if (ofport->cfm) {
2830         int cfm_opup = cfm_get_opup(ofport->cfm);
2831
2832         cfm_run(ofport->cfm);
2833         enable = enable && !cfm_get_fault(ofport->cfm);
2834
2835         if (cfm_opup >= 0) {
2836             enable = enable && cfm_opup;
2837         }
2838     }
2839
2840     if (ofport->bundle) {
2841         enable = enable && lacp_slave_may_enable(ofport->bundle->lacp, ofport);
2842         if (carrier_changed) {
2843             lacp_slave_carrier_changed(ofport->bundle->lacp, ofport);
2844         }
2845     }
2846
2847     if (ofport->may_enable != enable) {
2848         struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2849
2850         if (ofproto->has_bundle_action) {
2851             ofproto->need_revalidate = REV_PORT_TOGGLED;
2852         }
2853     }
2854
2855     ofport->may_enable = enable;
2856 }
2857
2858 static void
2859 port_wait(struct ofport_dpif *ofport)
2860 {
2861     if (ofport->cfm) {
2862         cfm_wait(ofport->cfm);
2863     }
2864 }
2865
2866 static int
2867 port_query_by_name(const struct ofproto *ofproto_, const char *devname,
2868                    struct ofproto_port *ofproto_port)
2869 {
2870     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2871     struct dpif_port dpif_port;
2872     int error;
2873
2874     if (!sset_contains(&ofproto->ports, devname)) {
2875         return ENODEV;
2876     }
2877     error = dpif_port_query_by_name(ofproto->backer->dpif,
2878                                     devname, &dpif_port);
2879     if (!error) {
2880         ofproto_port_from_dpif_port(ofproto, ofproto_port, &dpif_port);
2881     }
2882     return error;
2883 }
2884
2885 static int
2886 port_add(struct ofproto *ofproto_, struct netdev *netdev)
2887 {
2888     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2889     uint32_t odp_port = UINT32_MAX;
2890     int error;
2891
2892     error = dpif_port_add(ofproto->backer->dpif, netdev, &odp_port);
2893     if (!error) {
2894         sset_add(&ofproto->ports, netdev_get_name(netdev));
2895     }
2896     return error;
2897 }
2898
2899 static int
2900 port_del(struct ofproto *ofproto_, uint16_t ofp_port)
2901 {
2902     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2903     uint32_t odp_port = ofp_port_to_odp_port(ofproto, ofp_port);
2904     int error = 0;
2905
2906     if (odp_port != OFPP_NONE) {
2907         error = dpif_port_del(ofproto->backer->dpif, odp_port);
2908     }
2909     if (!error) {
2910         struct ofport_dpif *ofport = get_ofp_port(ofproto, ofp_port);
2911         if (ofport) {
2912             /* The caller is going to close ofport->up.netdev.  If this is a
2913              * bonded port, then the bond is using that netdev, so remove it
2914              * from the bond.  The client will need to reconfigure everything
2915              * after deleting ports, so then the slave will get re-added. */
2916             bundle_remove(&ofport->up);
2917         }
2918     }
2919     return error;
2920 }
2921
2922 static int
2923 port_get_stats(const struct ofport *ofport_, struct netdev_stats *stats)
2924 {
2925     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2926     int error;
2927
2928     error = netdev_get_stats(ofport->up.netdev, stats);
2929
2930     if (!error && ofport->odp_port == OVSP_LOCAL) {
2931         struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2932
2933         /* ofproto->stats.tx_packets represents packets that we created
2934          * internally and sent to some port (e.g. packets sent with
2935          * send_packet()).  Account for them as if they had come from
2936          * OFPP_LOCAL and got forwarded. */
2937
2938         if (stats->rx_packets != UINT64_MAX) {
2939             stats->rx_packets += ofproto->stats.tx_packets;
2940         }
2941
2942         if (stats->rx_bytes != UINT64_MAX) {
2943             stats->rx_bytes += ofproto->stats.tx_bytes;
2944         }
2945
2946         /* ofproto->stats.rx_packets represents packets that were received on
2947          * some port and we processed internally and dropped (e.g. STP).
2948          * Account for them as if they had been forwarded to OFPP_LOCAL. */
2949
2950         if (stats->tx_packets != UINT64_MAX) {
2951             stats->tx_packets += ofproto->stats.rx_packets;
2952         }
2953
2954         if (stats->tx_bytes != UINT64_MAX) {
2955             stats->tx_bytes += ofproto->stats.rx_bytes;
2956         }
2957     }
2958
2959     return error;
2960 }
2961
2962 /* Account packets for LOCAL port. */
2963 static void
2964 ofproto_update_local_port_stats(const struct ofproto *ofproto_,
2965                                 size_t tx_size, size_t rx_size)
2966 {
2967     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2968
2969     if (rx_size) {
2970         ofproto->stats.rx_packets++;
2971         ofproto->stats.rx_bytes += rx_size;
2972     }
2973     if (tx_size) {
2974         ofproto->stats.tx_packets++;
2975         ofproto->stats.tx_bytes += tx_size;
2976     }
2977 }
2978
2979 struct port_dump_state {
2980     uint32_t bucket;
2981     uint32_t offset;
2982 };
2983
2984 static int
2985 port_dump_start(const struct ofproto *ofproto_ OVS_UNUSED, void **statep)
2986 {
2987     struct port_dump_state *state;
2988
2989     *statep = state = xmalloc(sizeof *state);
2990     state->bucket = 0;
2991     state->offset = 0;
2992     return 0;
2993 }
2994
2995 static int
2996 port_dump_next(const struct ofproto *ofproto_ OVS_UNUSED, void *state_,
2997                struct ofproto_port *port)
2998 {
2999     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3000     struct port_dump_state *state = state_;
3001     struct sset_node *node;
3002
3003     while ((node = sset_at_position(&ofproto->ports, &state->bucket,
3004                                &state->offset))) {
3005         int error;
3006
3007         error = port_query_by_name(ofproto_, node->name, port);
3008         if (error != ENODEV) {
3009             return error;
3010         }
3011     }
3012
3013     return EOF;
3014 }
3015
3016 static int
3017 port_dump_done(const struct ofproto *ofproto_ OVS_UNUSED, void *state_)
3018 {
3019     struct port_dump_state *state = state_;
3020
3021     free(state);
3022     return 0;
3023 }
3024
3025 static int
3026 port_poll(const struct ofproto *ofproto_, char **devnamep)
3027 {
3028     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3029
3030     if (ofproto->port_poll_errno) {
3031         int error = ofproto->port_poll_errno;
3032         ofproto->port_poll_errno = 0;
3033         return error;
3034     }
3035
3036     if (sset_is_empty(&ofproto->port_poll_set)) {
3037         return EAGAIN;
3038     }
3039
3040     *devnamep = sset_pop(&ofproto->port_poll_set);
3041     return 0;
3042 }
3043
3044 static void
3045 port_poll_wait(const struct ofproto *ofproto_)
3046 {
3047     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3048     dpif_port_poll_wait(ofproto->backer->dpif);
3049 }
3050
3051 static int
3052 port_is_lacp_current(const struct ofport *ofport_)
3053 {
3054     const struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
3055     return (ofport->bundle && ofport->bundle->lacp
3056             ? lacp_slave_is_current(ofport->bundle->lacp, ofport)
3057             : -1);
3058 }
3059 \f
3060 /* Upcall handling. */
3061
3062 /* Flow miss batching.
3063  *
3064  * Some dpifs implement operations faster when you hand them off in a batch.
3065  * To allow batching, "struct flow_miss" queues the dpif-related work needed
3066  * for a given flow.  Each "struct flow_miss" corresponds to sending one or
3067  * more packets, plus possibly installing the flow in the dpif.
3068  *
3069  * So far we only batch the operations that affect flow setup time the most.
3070  * It's possible to batch more than that, but the benefit might be minimal. */
3071 struct flow_miss {
3072     struct hmap_node hmap_node;
3073     struct ofproto_dpif *ofproto;
3074     struct flow flow;
3075     enum odp_key_fitness key_fitness;
3076     const struct nlattr *key;
3077     size_t key_len;
3078     ovs_be16 initial_tci;
3079     struct list packets;
3080     enum dpif_upcall_type upcall_type;
3081     uint32_t odp_in_port;
3082 };
3083
3084 struct flow_miss_op {
3085     struct dpif_op dpif_op;
3086     struct subfacet *subfacet;  /* Subfacet  */
3087     void *garbage;              /* Pointer to pass to free(), NULL if none. */
3088     uint64_t stub[1024 / 8];    /* Temporary buffer. */
3089 };
3090
3091 /* Sends an OFPT_PACKET_IN message for 'packet' of type OFPR_NO_MATCH to each
3092  * OpenFlow controller as necessary according to their individual
3093  * configurations. */
3094 static void
3095 send_packet_in_miss(struct ofproto_dpif *ofproto, const struct ofpbuf *packet,
3096                     const struct flow *flow)
3097 {
3098     struct ofputil_packet_in pin;
3099
3100     pin.packet = packet->data;
3101     pin.packet_len = packet->size;
3102     pin.reason = OFPR_NO_MATCH;
3103     pin.controller_id = 0;
3104
3105     pin.table_id = 0;
3106     pin.cookie = 0;
3107
3108     pin.send_len = 0;           /* not used for flow table misses */
3109
3110     flow_get_metadata(flow, &pin.fmd);
3111
3112     connmgr_send_packet_in(ofproto->up.connmgr, &pin);
3113 }
3114
3115 static enum slow_path_reason
3116 process_special(struct ofproto_dpif *ofproto, const struct flow *flow,
3117                 const struct ofpbuf *packet)
3118 {
3119     struct ofport_dpif *ofport = get_ofp_port(ofproto, flow->in_port);
3120
3121     if (!ofport) {
3122         return 0;
3123     }
3124
3125     if (ofport->cfm && cfm_should_process_flow(ofport->cfm, flow)) {
3126         if (packet) {
3127             cfm_process_heartbeat(ofport->cfm, packet);
3128         }
3129         return SLOW_CFM;
3130     } else if (ofport->bundle && ofport->bundle->lacp
3131                && flow->dl_type == htons(ETH_TYPE_LACP)) {
3132         if (packet) {
3133             lacp_process_packet(ofport->bundle->lacp, ofport, packet);
3134         }
3135         return SLOW_LACP;
3136     } else if (ofproto->stp && stp_should_process_flow(flow)) {
3137         if (packet) {
3138             stp_process_packet(ofport, packet);
3139         }
3140         return SLOW_STP;
3141     }
3142     return 0;
3143 }
3144
3145 static struct flow_miss *
3146 flow_miss_find(struct hmap *todo, const struct flow *flow, uint32_t hash)
3147 {
3148     struct flow_miss *miss;
3149
3150     HMAP_FOR_EACH_WITH_HASH (miss, hmap_node, hash, todo) {
3151         if (flow_equal(&miss->flow, flow)) {
3152             return miss;
3153         }
3154     }
3155
3156     return NULL;
3157 }
3158
3159 /* Partially Initializes 'op' as an "execute" operation for 'miss' and
3160  * 'packet'.  The caller must initialize op->actions and op->actions_len.  If
3161  * 'miss' is associated with a subfacet the caller must also initialize the
3162  * returned op->subfacet, and if anything needs to be freed after processing
3163  * the op, the caller must initialize op->garbage also. */
3164 static void
3165 init_flow_miss_execute_op(struct flow_miss *miss, struct ofpbuf *packet,
3166                           struct flow_miss_op *op)
3167 {
3168     if (miss->flow.vlan_tci != miss->initial_tci) {
3169         /* This packet was received on a VLAN splinter port.  We
3170          * added a VLAN to the packet to make the packet resemble
3171          * the flow, but the actions were composed assuming that
3172          * the packet contained no VLAN.  So, we must remove the
3173          * VLAN header from the packet before trying to execute the
3174          * actions. */
3175         eth_pop_vlan(packet);
3176     }
3177
3178     op->subfacet = NULL;
3179     op->garbage = NULL;
3180     op->dpif_op.type = DPIF_OP_EXECUTE;
3181     op->dpif_op.u.execute.key = miss->key;
3182     op->dpif_op.u.execute.key_len = miss->key_len;
3183     op->dpif_op.u.execute.packet = packet;
3184 }
3185
3186 /* Helper for handle_flow_miss_without_facet() and
3187  * handle_flow_miss_with_facet(). */
3188 static void
3189 handle_flow_miss_common(struct rule_dpif *rule,
3190                         struct ofpbuf *packet, const struct flow *flow)
3191 {
3192     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
3193
3194     ofproto->n_matches++;
3195
3196     if (rule->up.cr.priority == FAIL_OPEN_PRIORITY) {
3197         /*
3198          * Extra-special case for fail-open mode.
3199          *
3200          * We are in fail-open mode and the packet matched the fail-open
3201          * rule, but we are connected to a controller too.  We should send
3202          * the packet up to the controller in the hope that it will try to
3203          * set up a flow and thereby allow us to exit fail-open.
3204          *
3205          * See the top-level comment in fail-open.c for more information.
3206          */
3207         send_packet_in_miss(ofproto, packet, flow);
3208     }
3209 }
3210
3211 /* Figures out whether a flow that missed in 'ofproto', whose details are in
3212  * 'miss', is likely to be worth tracking in detail in userspace and (usually)
3213  * installing a datapath flow.  The answer is usually "yes" (a return value of
3214  * true).  However, for short flows the cost of bookkeeping is much higher than
3215  * the benefits, so when the datapath holds a large number of flows we impose
3216  * some heuristics to decide which flows are likely to be worth tracking. */
3217 static bool
3218 flow_miss_should_make_facet(struct ofproto_dpif *ofproto,
3219                             struct flow_miss *miss, uint32_t hash)
3220 {
3221     if (!ofproto->governor) {
3222         size_t n_subfacets;
3223
3224         n_subfacets = hmap_count(&ofproto->subfacets);
3225         if (n_subfacets * 2 <= ofproto->up.flow_eviction_threshold) {
3226             return true;
3227         }
3228
3229         ofproto->governor = governor_create(ofproto->up.name);
3230     }
3231
3232     return governor_should_install_flow(ofproto->governor, hash,
3233                                         list_size(&miss->packets));
3234 }
3235
3236 /* Handles 'miss', which matches 'rule', without creating a facet or subfacet
3237  * or creating any datapath flow.  May add an "execute" operation to 'ops' and
3238  * increment '*n_ops'. */
3239 static void
3240 handle_flow_miss_without_facet(struct flow_miss *miss,
3241                                struct rule_dpif *rule,
3242                                struct flow_miss_op *ops, size_t *n_ops)
3243 {
3244     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
3245     long long int now = time_msec();
3246     struct action_xlate_ctx ctx;
3247     struct ofpbuf *packet;
3248
3249     LIST_FOR_EACH (packet, list_node, &miss->packets) {
3250         struct flow_miss_op *op = &ops[*n_ops];
3251         struct dpif_flow_stats stats;
3252         struct ofpbuf odp_actions;
3253
3254         COVERAGE_INC(facet_suppress);
3255
3256         ofpbuf_use_stub(&odp_actions, op->stub, sizeof op->stub);
3257
3258         dpif_flow_stats_extract(&miss->flow, packet, now, &stats);
3259         rule_credit_stats(rule, &stats);
3260
3261         action_xlate_ctx_init(&ctx, ofproto, &miss->flow, miss->initial_tci,
3262                               rule, 0, packet);
3263         ctx.resubmit_stats = &stats;
3264         xlate_actions(&ctx, rule->up.ofpacts, rule->up.ofpacts_len,
3265                       &odp_actions);
3266
3267         if (odp_actions.size) {
3268             struct dpif_execute *execute = &op->dpif_op.u.execute;
3269
3270             init_flow_miss_execute_op(miss, packet, op);
3271             execute->actions = odp_actions.data;
3272             execute->actions_len = odp_actions.size;
3273             op->garbage = ofpbuf_get_uninit_pointer(&odp_actions);
3274
3275             (*n_ops)++;
3276         } else {
3277             ofpbuf_uninit(&odp_actions);
3278         }
3279     }
3280 }
3281
3282 /* Handles 'miss', which matches 'facet'.  May add any required datapath
3283  * operations to 'ops', incrementing '*n_ops' for each new op.
3284  *
3285  * All of the packets in 'miss' are considered to have arrived at time 'now'.
3286  * This is really important only for new facets: if we just called time_msec()
3287  * here, then the new subfacet or its packets could look (occasionally) as
3288  * though it was used some time after the facet was used.  That can make a
3289  * one-packet flow look like it has a nonzero duration, which looks odd in
3290  * e.g. NetFlow statistics. */
3291 static void
3292 handle_flow_miss_with_facet(struct flow_miss *miss, struct facet *facet,
3293                             long long int now,
3294                             struct flow_miss_op *ops, size_t *n_ops)
3295 {
3296     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
3297     enum subfacet_path want_path;
3298     struct subfacet *subfacet;
3299     struct ofpbuf *packet;
3300
3301     subfacet = subfacet_create(facet, miss, now);
3302
3303     LIST_FOR_EACH (packet, list_node, &miss->packets) {
3304         struct flow_miss_op *op = &ops[*n_ops];
3305         struct dpif_flow_stats stats;
3306         struct ofpbuf odp_actions;
3307
3308         handle_flow_miss_common(facet->rule, packet, &miss->flow);
3309
3310         ofpbuf_use_stub(&odp_actions, op->stub, sizeof op->stub);
3311         if (!subfacet->actions || subfacet->slow) {
3312             subfacet_make_actions(subfacet, packet, &odp_actions);
3313         }
3314
3315         dpif_flow_stats_extract(&facet->flow, packet, now, &stats);
3316         subfacet_update_stats(subfacet, &stats);
3317
3318         if (subfacet->actions_len) {
3319             struct dpif_execute *execute = &op->dpif_op.u.execute;
3320
3321             init_flow_miss_execute_op(miss, packet, op);
3322             op->subfacet = subfacet;
3323             if (!subfacet->slow) {
3324                 execute->actions = subfacet->actions;
3325                 execute->actions_len = subfacet->actions_len;
3326                 ofpbuf_uninit(&odp_actions);
3327             } else {
3328                 execute->actions = odp_actions.data;
3329                 execute->actions_len = odp_actions.size;
3330                 op->garbage = ofpbuf_get_uninit_pointer(&odp_actions);
3331             }
3332
3333             (*n_ops)++;
3334         } else {
3335             ofpbuf_uninit(&odp_actions);
3336         }
3337     }
3338
3339     want_path = subfacet_want_path(subfacet->slow);
3340     if (miss->upcall_type == DPIF_UC_MISS || subfacet->path != want_path) {
3341         struct flow_miss_op *op = &ops[(*n_ops)++];
3342         struct dpif_flow_put *put = &op->dpif_op.u.flow_put;
3343
3344         op->subfacet = subfacet;
3345         op->garbage = NULL;
3346         op->dpif_op.type = DPIF_OP_FLOW_PUT;
3347         put->flags = DPIF_FP_CREATE | DPIF_FP_MODIFY;
3348         put->key = miss->key;
3349         put->key_len = miss->key_len;
3350         if (want_path == SF_FAST_PATH) {
3351             put->actions = subfacet->actions;
3352             put->actions_len = subfacet->actions_len;
3353         } else {
3354             compose_slow_path(ofproto, &facet->flow, subfacet->slow,
3355                               op->stub, sizeof op->stub,
3356                               &put->actions, &put->actions_len);
3357         }
3358         put->stats = NULL;
3359     }
3360 }
3361
3362 /* Handles flow miss 'miss'.  May add any required datapath operations
3363  * to 'ops', incrementing '*n_ops' for each new op. */
3364 static void
3365 handle_flow_miss(struct flow_miss *miss, struct flow_miss_op *ops,
3366                  size_t *n_ops)
3367 {
3368     struct ofproto_dpif *ofproto = miss->ofproto;
3369     struct facet *facet;
3370     long long int now;
3371     uint32_t hash;
3372
3373     /* The caller must ensure that miss->hmap_node.hash contains
3374      * flow_hash(miss->flow, 0). */
3375     hash = miss->hmap_node.hash;
3376
3377     facet = facet_lookup_valid(ofproto, &miss->flow, hash);
3378     if (!facet) {
3379         struct rule_dpif *rule = rule_dpif_lookup(ofproto, &miss->flow);
3380
3381         if (!flow_miss_should_make_facet(ofproto, miss, hash)) {
3382             handle_flow_miss_without_facet(miss, rule, ops, n_ops);
3383             return;
3384         }
3385
3386         facet = facet_create(rule, &miss->flow, hash);
3387         now = facet->used;
3388     } else {
3389         now = time_msec();
3390     }
3391     handle_flow_miss_with_facet(miss, facet, now, ops, n_ops);
3392 }
3393
3394 /* This function does post-processing on data returned from
3395  * odp_flow_key_to_flow() to help make VLAN splinters transparent to the
3396  * rest of the upcall processing logic.  In particular, if the extracted
3397  * in_port is a VLAN splinter port, it replaces flow->in_port by the "real"
3398  * port, sets flow->vlan_tci correctly for the VLAN of the VLAN splinter
3399  * port, and pushes a VLAN header onto 'packet' (if it is nonnull). The
3400  * caller must have called odp_flow_key_to_flow() and supply 'fitness' and
3401  * 'flow' from its output.  The 'flow' argument must have had the "in_port"
3402  * member converted to the OpenFlow number.
3403  *
3404  * Sets '*initial_tci' to the VLAN TCI with which the packet was really
3405  * received, that is, the actual VLAN TCI extracted by odp_flow_key_to_flow().
3406  * (This differs from the value returned in flow->vlan_tci only for packets
3407  * received on VLAN splinters.) */
3408 static enum odp_key_fitness
3409 ofproto_dpif_vsp_adjust(const struct ofproto_dpif *ofproto,
3410                         enum odp_key_fitness fitness,
3411                         struct flow *flow, ovs_be16 *initial_tci,
3412                         struct ofpbuf *packet)
3413 {
3414     if (fitness == ODP_FIT_ERROR) {
3415         return fitness;
3416     }
3417     *initial_tci = flow->vlan_tci;
3418
3419     if (vsp_adjust_flow(ofproto, flow)) {
3420         if (packet) {
3421             /* Make the packet resemble the flow, so that it gets sent to an
3422              * OpenFlow controller properly, so that it looks correct for
3423              * sFlow, and so that flow_extract() will get the correct vlan_tci
3424              * if it is called on 'packet'.
3425              *
3426              * The allocated space inside 'packet' probably also contains
3427              * 'key', that is, both 'packet' and 'key' are probably part of a
3428              * struct dpif_upcall (see the large comment on that structure
3429              * definition), so pushing data on 'packet' is in general not a
3430              * good idea since it could overwrite 'key' or free it as a side
3431              * effect.  However, it's OK in this special case because we know
3432              * that 'packet' is inside a Netlink attribute: pushing 4 bytes
3433              * will just overwrite the 4-byte "struct nlattr", which is fine
3434              * since we don't need that header anymore. */
3435             eth_push_vlan(packet, flow->vlan_tci);
3436         }
3437
3438         /* Let the caller know that we can't reproduce 'key' from 'flow'. */
3439         if (fitness == ODP_FIT_PERFECT) {
3440             fitness = ODP_FIT_TOO_MUCH;
3441         }
3442     }
3443
3444     return fitness;
3445 }
3446
3447 static void
3448 handle_miss_upcalls(struct dpif_backer *backer, struct dpif_upcall *upcalls,
3449                     size_t n_upcalls)
3450 {
3451     struct dpif_upcall *upcall;
3452     struct flow_miss *miss;
3453     struct flow_miss misses[FLOW_MISS_MAX_BATCH];
3454     struct flow_miss_op flow_miss_ops[FLOW_MISS_MAX_BATCH * 2];
3455     struct dpif_op *dpif_ops[FLOW_MISS_MAX_BATCH * 2];
3456     struct hmap todo;
3457     int n_misses;
3458     size_t n_ops;
3459     size_t i;
3460
3461     if (!n_upcalls) {
3462         return;
3463     }
3464
3465     /* Construct the to-do list.
3466      *
3467      * This just amounts to extracting the flow from each packet and sticking
3468      * the packets that have the same flow in the same "flow_miss" structure so
3469      * that we can process them together. */
3470     hmap_init(&todo);
3471     n_misses = 0;
3472     for (upcall = upcalls; upcall < &upcalls[n_upcalls]; upcall++) {
3473         struct flow_miss *miss = &misses[n_misses];
3474         struct flow_miss *existing_miss;
3475         enum odp_key_fitness fitness;
3476         struct ofproto_dpif *ofproto;
3477         struct ofport_dpif *port;
3478         uint32_t odp_in_port;
3479         struct flow flow;
3480         uint32_t hash;
3481
3482         fitness = odp_flow_key_to_flow(upcall->key, upcall->key_len, &flow);
3483         port = odp_port_to_ofport(backer, flow.in_port);
3484         if (!port) {
3485             /* Received packet on port for which we couldn't associate
3486              * an ofproto.  This can happen if a port is removed while
3487              * traffic is being received.  Print a rate-limited message
3488              * in case it happens frequently. */
3489             VLOG_INFO_RL(&rl, "received packet on unassociated port %"PRIu32,
3490                          flow.in_port);
3491             continue;
3492         }
3493         ofproto = ofproto_dpif_cast(port->up.ofproto);
3494         odp_in_port = flow.in_port;
3495         flow.in_port = port->up.ofp_port;
3496
3497         /* Obtain metadata and check userspace/kernel agreement on flow match,
3498          * then set 'flow''s header pointers. */
3499         miss->key_fitness = ofproto_dpif_vsp_adjust(ofproto, fitness,
3500                                 &flow, &miss->initial_tci, upcall->packet);
3501         if (miss->key_fitness == ODP_FIT_ERROR) {
3502             continue;
3503         }
3504         flow_extract(upcall->packet, flow.skb_priority, flow.skb_mark,
3505                      &flow.tunnel, flow.in_port, &miss->flow);
3506
3507         /* Add other packets to a to-do list. */
3508         hash = flow_hash(&miss->flow, 0);
3509         existing_miss = flow_miss_find(&todo, &miss->flow, hash);
3510         if (!existing_miss) {
3511             hmap_insert(&todo, &miss->hmap_node, hash);
3512             miss->ofproto = ofproto;
3513             miss->key = upcall->key;
3514             miss->key_len = upcall->key_len;
3515             miss->upcall_type = upcall->type;
3516             miss->odp_in_port = odp_in_port;
3517             list_init(&miss->packets);
3518
3519             n_misses++;
3520         } else {
3521             miss = existing_miss;
3522         }
3523         list_push_back(&miss->packets, &upcall->packet->list_node);
3524     }
3525
3526     /* Process each element in the to-do list, constructing the set of
3527      * operations to batch. */
3528     n_ops = 0;
3529     HMAP_FOR_EACH (miss, hmap_node, &todo) {
3530         handle_flow_miss(miss, flow_miss_ops, &n_ops);
3531     }
3532     assert(n_ops <= ARRAY_SIZE(flow_miss_ops));
3533
3534     /* Execute batch. */
3535     for (i = 0; i < n_ops; i++) {
3536         dpif_ops[i] = &flow_miss_ops[i].dpif_op;
3537     }
3538     dpif_operate(backer->dpif, dpif_ops, n_ops);
3539
3540     /* Free memory and update facets. */
3541     for (i = 0; i < n_ops; i++) {
3542         struct flow_miss_op *op = &flow_miss_ops[i];
3543
3544         switch (op->dpif_op.type) {
3545         case DPIF_OP_EXECUTE:
3546             break;
3547
3548         case DPIF_OP_FLOW_PUT:
3549             if (!op->dpif_op.error) {
3550                 op->subfacet->path = subfacet_want_path(op->subfacet->slow);
3551             }
3552             break;
3553
3554         case DPIF_OP_FLOW_DEL:
3555             NOT_REACHED();
3556         }
3557
3558         free(op->garbage);
3559     }
3560     hmap_destroy(&todo);
3561 }
3562
3563 static enum { SFLOW_UPCALL, MISS_UPCALL, BAD_UPCALL }
3564 classify_upcall(const struct dpif_upcall *upcall)
3565 {
3566     union user_action_cookie cookie;
3567
3568     /* First look at the upcall type. */
3569     switch (upcall->type) {
3570     case DPIF_UC_ACTION:
3571         break;
3572
3573     case DPIF_UC_MISS:
3574         return MISS_UPCALL;
3575
3576     case DPIF_N_UC_TYPES:
3577     default:
3578         VLOG_WARN_RL(&rl, "upcall has unexpected type %"PRIu32, upcall->type);
3579         return BAD_UPCALL;
3580     }
3581
3582     /* "action" upcalls need a closer look. */
3583     memcpy(&cookie, &upcall->userdata, sizeof(cookie));
3584     switch (cookie.type) {
3585     case USER_ACTION_COOKIE_SFLOW:
3586         return SFLOW_UPCALL;
3587
3588     case USER_ACTION_COOKIE_SLOW_PATH:
3589         return MISS_UPCALL;
3590
3591     case USER_ACTION_COOKIE_UNSPEC:
3592     default:
3593         VLOG_WARN_RL(&rl, "invalid user cookie : 0x%"PRIx64, upcall->userdata);
3594         return BAD_UPCALL;
3595     }
3596 }
3597
3598 static void
3599 handle_sflow_upcall(struct dpif_backer *backer,
3600                     const struct dpif_upcall *upcall)
3601 {
3602     struct ofproto_dpif *ofproto;
3603     union user_action_cookie cookie;
3604     enum odp_key_fitness fitness;
3605     struct ofport_dpif *port;
3606     ovs_be16 initial_tci;
3607     struct flow flow;
3608     uint32_t odp_in_port;
3609
3610     fitness = odp_flow_key_to_flow(upcall->key, upcall->key_len, &flow);
3611
3612     port = odp_port_to_ofport(backer, flow.in_port);
3613     if (!port) {
3614         return;
3615     }
3616
3617     ofproto = ofproto_dpif_cast(port->up.ofproto);
3618     if (!ofproto->sflow) {
3619         return;
3620     }
3621
3622     odp_in_port = flow.in_port;
3623     flow.in_port = port->up.ofp_port;
3624     fitness = ofproto_dpif_vsp_adjust(ofproto, fitness, &flow,
3625                                       &initial_tci, upcall->packet);
3626     if (fitness == ODP_FIT_ERROR) {
3627         return;
3628     }
3629
3630     memcpy(&cookie, &upcall->userdata, sizeof(cookie));
3631     dpif_sflow_received(ofproto->sflow, upcall->packet, &flow,
3632                         odp_in_port, &cookie);
3633 }
3634
3635 static int
3636 handle_upcalls(struct dpif_backer *backer, unsigned int max_batch)
3637 {
3638     struct dpif_upcall misses[FLOW_MISS_MAX_BATCH];
3639     struct ofpbuf miss_bufs[FLOW_MISS_MAX_BATCH];
3640     uint64_t miss_buf_stubs[FLOW_MISS_MAX_BATCH][4096 / 8];
3641     int n_processed;
3642     int n_misses;
3643     int i;
3644
3645     assert(max_batch <= FLOW_MISS_MAX_BATCH);
3646
3647     n_misses = 0;
3648     for (n_processed = 0; n_processed < max_batch; n_processed++) {
3649         struct dpif_upcall *upcall = &misses[n_misses];
3650         struct ofpbuf *buf = &miss_bufs[n_misses];
3651         int error;
3652
3653         ofpbuf_use_stub(buf, miss_buf_stubs[n_misses],
3654                         sizeof miss_buf_stubs[n_misses]);
3655         error = dpif_recv(backer->dpif, upcall, buf);
3656         if (error) {
3657             ofpbuf_uninit(buf);
3658             break;
3659         }
3660
3661         switch (classify_upcall(upcall)) {
3662         case MISS_UPCALL:
3663             /* Handle it later. */
3664             n_misses++;
3665             break;
3666
3667         case SFLOW_UPCALL:
3668             handle_sflow_upcall(backer, upcall);
3669             ofpbuf_uninit(buf);
3670             break;
3671
3672         case BAD_UPCALL:
3673             ofpbuf_uninit(buf);
3674             break;
3675         }
3676     }
3677
3678     /* Handle deferred MISS_UPCALL processing. */
3679     handle_miss_upcalls(backer, misses, n_misses);
3680     for (i = 0; i < n_misses; i++) {
3681         ofpbuf_uninit(&miss_bufs[i]);
3682     }
3683
3684     return n_processed;
3685 }
3686 \f
3687 /* Flow expiration. */
3688
3689 static int subfacet_max_idle(const struct ofproto_dpif *);
3690 static void update_stats(struct dpif_backer *);
3691 static void rule_expire(struct rule_dpif *);
3692 static void expire_subfacets(struct ofproto_dpif *, int dp_max_idle);
3693
3694 /* This function is called periodically by run().  Its job is to collect
3695  * updates for the flows that have been installed into the datapath, most
3696  * importantly when they last were used, and then use that information to
3697  * expire flows that have not been used recently.
3698  *
3699  * Returns the number of milliseconds after which it should be called again. */
3700 static int
3701 expire(struct dpif_backer *backer)
3702 {
3703     struct ofproto_dpif *ofproto;
3704     int max_idle = INT32_MAX;
3705
3706     /* Update stats for each flow in the backer. */
3707     update_stats(backer);
3708
3709     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
3710         struct rule_dpif *rule, *next_rule;
3711         struct oftable *table;
3712         int dp_max_idle;
3713
3714         if (ofproto->backer != backer) {
3715             continue;
3716         }
3717
3718         /* Expire subfacets that have been idle too long. */
3719         dp_max_idle = subfacet_max_idle(ofproto);
3720         expire_subfacets(ofproto, dp_max_idle);
3721
3722         max_idle = MIN(max_idle, dp_max_idle);
3723
3724         /* Expire OpenFlow flows whose idle_timeout or hard_timeout
3725          * has passed. */
3726         OFPROTO_FOR_EACH_TABLE (table, &ofproto->up) {
3727             struct cls_cursor cursor;
3728
3729             cls_cursor_init(&cursor, &table->cls, NULL);
3730             CLS_CURSOR_FOR_EACH_SAFE (rule, next_rule, up.cr, &cursor) {
3731                 rule_expire(rule);
3732             }
3733         }
3734
3735         /* All outstanding data in existing flows has been accounted, so it's a
3736          * good time to do bond rebalancing. */
3737         if (ofproto->has_bonded_bundles) {
3738             struct ofbundle *bundle;
3739
3740             HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) {
3741                 if (bundle->bond) {
3742                     bond_rebalance(bundle->bond, &ofproto->revalidate_set);
3743                 }
3744             }
3745         }
3746     }
3747
3748     return MIN(max_idle, 1000);
3749 }
3750
3751 /* Updates flow table statistics given that the datapath just reported 'stats'
3752  * as 'subfacet''s statistics. */
3753 static void
3754 update_subfacet_stats(struct subfacet *subfacet,
3755                       const struct dpif_flow_stats *stats)
3756 {
3757     struct facet *facet = subfacet->facet;
3758
3759     if (stats->n_packets >= subfacet->dp_packet_count) {
3760         uint64_t extra = stats->n_packets - subfacet->dp_packet_count;
3761         facet->packet_count += extra;
3762     } else {
3763         VLOG_WARN_RL(&rl, "unexpected packet count from the datapath");
3764     }
3765
3766     if (stats->n_bytes >= subfacet->dp_byte_count) {
3767         facet->byte_count += stats->n_bytes - subfacet->dp_byte_count;
3768     } else {
3769         VLOG_WARN_RL(&rl, "unexpected byte count from datapath");
3770     }
3771
3772     subfacet->dp_packet_count = stats->n_packets;
3773     subfacet->dp_byte_count = stats->n_bytes;
3774
3775     facet->tcp_flags |= stats->tcp_flags;
3776
3777     subfacet_update_time(subfacet, stats->used);
3778     if (facet->accounted_bytes < facet->byte_count) {
3779         facet_learn(facet);
3780         facet_account(facet);
3781         facet->accounted_bytes = facet->byte_count;
3782     }
3783     facet_push_stats(facet);
3784 }
3785
3786 /* 'key' with length 'key_len' bytes is a flow in 'dpif' that we know nothing
3787  * about, or a flow that shouldn't be installed but was anyway.  Delete it. */
3788 static void
3789 delete_unexpected_flow(struct ofproto_dpif *ofproto,
3790                        const struct nlattr *key, size_t key_len)
3791 {
3792     if (!VLOG_DROP_WARN(&rl)) {
3793         struct ds s;
3794
3795         ds_init(&s);
3796         odp_flow_key_format(key, key_len, &s);
3797         VLOG_WARN("unexpected flow on %s: %s", ofproto->up.name, ds_cstr(&s));
3798         ds_destroy(&s);
3799     }
3800
3801     COVERAGE_INC(facet_unexpected);
3802     dpif_flow_del(ofproto->backer->dpif, key, key_len, NULL);
3803 }
3804
3805 /* Update 'packet_count', 'byte_count', and 'used' members of installed facets.
3806  *
3807  * This function also pushes statistics updates to rules which each facet
3808  * resubmits into.  Generally these statistics will be accurate.  However, if a
3809  * facet changes the rule it resubmits into at some time in between
3810  * update_stats() runs, it is possible that statistics accrued to the
3811  * old rule will be incorrectly attributed to the new rule.  This could be
3812  * avoided by calling update_stats() whenever rules are created or
3813  * deleted.  However, the performance impact of making so many calls to the
3814  * datapath do not justify the benefit of having perfectly accurate statistics.
3815  */
3816 static void
3817 update_stats(struct dpif_backer *backer)
3818 {
3819     const struct dpif_flow_stats *stats;
3820     struct dpif_flow_dump dump;
3821     const struct nlattr *key;
3822     size_t key_len;
3823
3824     dpif_flow_dump_start(&dump, backer->dpif);
3825     while (dpif_flow_dump_next(&dump, &key, &key_len, NULL, NULL, &stats)) {
3826         struct flow flow;
3827         struct subfacet *subfacet;
3828         enum odp_key_fitness fitness;
3829         struct ofproto_dpif *ofproto;
3830         struct ofport_dpif *port;
3831         uint32_t key_hash;
3832
3833         fitness = odp_flow_key_to_flow(key, key_len, &flow);
3834         if (fitness == ODP_FIT_ERROR) {
3835             continue;
3836         }
3837
3838         port = odp_port_to_ofport(backer, flow.in_port);
3839         if (!port) {
3840             /* This flow is for a port for which we couldn't associate an
3841              * ofproto.  This can happen if a port is removed while
3842              * traffic is being received.  Ignore this flow, since it
3843              * will get timed out. */
3844             continue;
3845         }
3846
3847         ofproto = ofproto_dpif_cast(port->up.ofproto);
3848         flow.in_port = port->up.ofp_port;
3849         key_hash = odp_flow_key_hash(key, key_len);
3850
3851         subfacet = subfacet_find(ofproto, key, key_len, key_hash, &flow);
3852         switch (subfacet ? subfacet->path : SF_NOT_INSTALLED) {
3853         case SF_FAST_PATH:
3854             update_subfacet_stats(subfacet, stats);
3855             break;
3856
3857         case SF_SLOW_PATH:
3858             /* Stats are updated per-packet. */
3859             break;
3860
3861         case SF_NOT_INSTALLED:
3862         default:
3863             delete_unexpected_flow(ofproto, key, key_len);
3864             break;
3865         }
3866     }
3867     dpif_flow_dump_done(&dump);
3868 }
3869
3870 /* Calculates and returns the number of milliseconds of idle time after which
3871  * subfacets should expire from the datapath.  When a subfacet expires, we fold
3872  * its statistics into its facet, and when a facet's last subfacet expires, we
3873  * fold its statistic into its rule. */
3874 static int
3875 subfacet_max_idle(const struct ofproto_dpif *ofproto)
3876 {
3877     /*
3878      * Idle time histogram.
3879      *
3880      * Most of the time a switch has a relatively small number of subfacets.
3881      * When this is the case we might as well keep statistics for all of them
3882      * in userspace and to cache them in the kernel datapath for performance as
3883      * well.
3884      *
3885      * As the number of subfacets increases, the memory required to maintain
3886      * statistics about them in userspace and in the kernel becomes
3887      * significant.  However, with a large number of subfacets it is likely
3888      * that only a few of them are "heavy hitters" that consume a large amount
3889      * of bandwidth.  At this point, only heavy hitters are worth caching in
3890      * the kernel and maintaining in userspaces; other subfacets we can
3891      * discard.
3892      *
3893      * The technique used to compute the idle time is to build a histogram with
3894      * N_BUCKETS buckets whose width is BUCKET_WIDTH msecs each.  Each subfacet
3895      * that is installed in the kernel gets dropped in the appropriate bucket.
3896      * After the histogram has been built, we compute the cutoff so that only
3897      * the most-recently-used 1% of subfacets (but at least
3898      * ofproto->up.flow_eviction_threshold flows) are kept cached.  At least
3899      * the most-recently-used bucket of subfacets is kept, so actually an
3900      * arbitrary number of subfacets can be kept in any given expiration run
3901      * (though the next run will delete most of those unless they receive
3902      * additional data).
3903      *
3904      * This requires a second pass through the subfacets, in addition to the
3905      * pass made by update_stats(), because the former function never looks at
3906      * uninstallable subfacets.
3907      */
3908     enum { BUCKET_WIDTH = ROUND_UP(100, TIME_UPDATE_INTERVAL) };
3909     enum { N_BUCKETS = 5000 / BUCKET_WIDTH };
3910     int buckets[N_BUCKETS] = { 0 };
3911     int total, subtotal, bucket;
3912     struct subfacet *subfacet;
3913     long long int now;
3914     int i;
3915
3916     total = hmap_count(&ofproto->subfacets);
3917     if (total <= ofproto->up.flow_eviction_threshold) {
3918         return N_BUCKETS * BUCKET_WIDTH;
3919     }
3920
3921     /* Build histogram. */
3922     now = time_msec();
3923     HMAP_FOR_EACH (subfacet, hmap_node, &ofproto->subfacets) {
3924         long long int idle = now - subfacet->used;
3925         int bucket = (idle <= 0 ? 0
3926                       : idle >= BUCKET_WIDTH * N_BUCKETS ? N_BUCKETS - 1
3927                       : (unsigned int) idle / BUCKET_WIDTH);
3928         buckets[bucket]++;
3929     }
3930
3931     /* Find the first bucket whose flows should be expired. */
3932     subtotal = bucket = 0;
3933     do {
3934         subtotal += buckets[bucket++];
3935     } while (bucket < N_BUCKETS &&
3936              subtotal < MAX(ofproto->up.flow_eviction_threshold, total / 100));
3937
3938     if (VLOG_IS_DBG_ENABLED()) {
3939         struct ds s;
3940
3941         ds_init(&s);
3942         ds_put_cstr(&s, "keep");
3943         for (i = 0; i < N_BUCKETS; i++) {
3944             if (i == bucket) {
3945                 ds_put_cstr(&s, ", drop");
3946             }
3947             if (buckets[i]) {
3948                 ds_put_format(&s, " %d:%d", i * BUCKET_WIDTH, buckets[i]);
3949             }
3950         }
3951         VLOG_INFO("%s: %s (msec:count)", ofproto->up.name, ds_cstr(&s));
3952         ds_destroy(&s);
3953     }
3954
3955     return bucket * BUCKET_WIDTH;
3956 }
3957
3958 static void
3959 expire_subfacets(struct ofproto_dpif *ofproto, int dp_max_idle)
3960 {
3961     /* Cutoff time for most flows. */
3962     long long int normal_cutoff = time_msec() - dp_max_idle;
3963
3964     /* We really want to keep flows for special protocols around, so use a more
3965      * conservative cutoff. */
3966     long long int special_cutoff = time_msec() - 10000;
3967
3968     struct subfacet *subfacet, *next_subfacet;
3969     struct subfacet *batch[SUBFACET_DESTROY_MAX_BATCH];
3970     int n_batch;
3971
3972     n_batch = 0;
3973     HMAP_FOR_EACH_SAFE (subfacet, next_subfacet, hmap_node,
3974                         &ofproto->subfacets) {
3975         long long int cutoff;
3976
3977         cutoff = (subfacet->slow & (SLOW_CFM | SLOW_LACP | SLOW_STP)
3978                   ? special_cutoff
3979                   : normal_cutoff);
3980         if (subfacet->used < cutoff) {
3981             if (subfacet->path != SF_NOT_INSTALLED) {
3982                 batch[n_batch++] = subfacet;
3983                 if (n_batch >= SUBFACET_DESTROY_MAX_BATCH) {
3984                     subfacet_destroy_batch(ofproto, batch, n_batch);
3985                     n_batch = 0;
3986                 }
3987             } else {
3988                 subfacet_destroy(subfacet);
3989             }
3990         }
3991     }
3992
3993     if (n_batch > 0) {
3994         subfacet_destroy_batch(ofproto, batch, n_batch);
3995     }
3996 }
3997
3998 /* If 'rule' is an OpenFlow rule, that has expired according to OpenFlow rules,
3999  * then delete it entirely. */
4000 static void
4001 rule_expire(struct rule_dpif *rule)
4002 {
4003     struct facet *facet, *next_facet;
4004     long long int now;
4005     uint8_t reason;
4006
4007     if (rule->up.pending) {
4008         /* We'll have to expire it later. */
4009         return;
4010     }
4011
4012     /* Has 'rule' expired? */
4013     now = time_msec();
4014     if (rule->up.hard_timeout
4015         && now > rule->up.modified + rule->up.hard_timeout * 1000) {
4016         reason = OFPRR_HARD_TIMEOUT;
4017     } else if (rule->up.idle_timeout
4018                && now > rule->up.used + rule->up.idle_timeout * 1000) {
4019         reason = OFPRR_IDLE_TIMEOUT;
4020     } else {
4021         return;
4022     }
4023
4024     COVERAGE_INC(ofproto_dpif_expired);
4025
4026     /* Update stats.  (This is a no-op if the rule expired due to an idle
4027      * timeout, because that only happens when the rule has no facets left.) */
4028     LIST_FOR_EACH_SAFE (facet, next_facet, list_node, &rule->facets) {
4029         facet_remove(facet);
4030     }
4031
4032     /* Get rid of the rule. */
4033     ofproto_rule_expire(&rule->up, reason);
4034 }
4035 \f
4036 /* Facets. */
4037
4038 /* Creates and returns a new facet owned by 'rule', given a 'flow'.
4039  *
4040  * The caller must already have determined that no facet with an identical
4041  * 'flow' exists in 'ofproto' and that 'flow' is the best match for 'rule' in
4042  * the ofproto's classifier table.
4043  *
4044  * 'hash' must be the return value of flow_hash(flow, 0).
4045  *
4046  * The facet will initially have no subfacets.  The caller should create (at
4047  * least) one subfacet with subfacet_create(). */
4048 static struct facet *
4049 facet_create(struct rule_dpif *rule, const struct flow *flow, uint32_t hash)
4050 {
4051     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
4052     struct facet *facet;
4053
4054     facet = xzalloc(sizeof *facet);
4055     facet->used = time_msec();
4056     hmap_insert(&ofproto->facets, &facet->hmap_node, hash);
4057     list_push_back(&rule->facets, &facet->list_node);
4058     facet->rule = rule;
4059     facet->flow = *flow;
4060     list_init(&facet->subfacets);
4061     netflow_flow_init(&facet->nf_flow);
4062     netflow_flow_update_time(ofproto->netflow, &facet->nf_flow, facet->used);
4063
4064     return facet;
4065 }
4066
4067 static void
4068 facet_free(struct facet *facet)
4069 {
4070     free(facet);
4071 }
4072
4073 /* Executes, within 'ofproto', the 'n_actions' actions in 'actions' on
4074  * 'packet', which arrived on 'in_port'.
4075  *
4076  * Takes ownership of 'packet'. */
4077 static bool
4078 execute_odp_actions(struct ofproto_dpif *ofproto, const struct flow *flow,
4079                     const struct nlattr *odp_actions, size_t actions_len,
4080                     struct ofpbuf *packet)
4081 {
4082     struct odputil_keybuf keybuf;
4083     struct ofpbuf key;
4084     int error;
4085
4086     ofpbuf_use_stack(&key, &keybuf, sizeof keybuf);
4087     odp_flow_key_from_flow(&key, flow,
4088                            ofp_port_to_odp_port(ofproto, flow->in_port));
4089
4090     error = dpif_execute(ofproto->backer->dpif, key.data, key.size,
4091                          odp_actions, actions_len, packet);
4092
4093     ofpbuf_delete(packet);
4094     return !error;
4095 }
4096
4097 /* Remove 'facet' from 'ofproto' and free up the associated memory:
4098  *
4099  *   - If 'facet' was installed in the datapath, uninstalls it and updates its
4100  *     rule's statistics, via subfacet_uninstall().
4101  *
4102  *   - Removes 'facet' from its rule and from ofproto->facets.
4103  */
4104 static void
4105 facet_remove(struct facet *facet)
4106 {
4107     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4108     struct subfacet *subfacet, *next_subfacet;
4109
4110     assert(!list_is_empty(&facet->subfacets));
4111
4112     /* First uninstall all of the subfacets to get final statistics. */
4113     LIST_FOR_EACH (subfacet, list_node, &facet->subfacets) {
4114         subfacet_uninstall(subfacet);
4115     }
4116
4117     /* Flush the final stats to the rule.
4118      *
4119      * This might require us to have at least one subfacet around so that we
4120      * can use its actions for accounting in facet_account(), which is why we
4121      * have uninstalled but not yet destroyed the subfacets. */
4122     facet_flush_stats(facet);
4123
4124     /* Now we're really all done so destroy everything. */
4125     LIST_FOR_EACH_SAFE (subfacet, next_subfacet, list_node,
4126                         &facet->subfacets) {
4127         subfacet_destroy__(subfacet);
4128     }
4129     hmap_remove(&ofproto->facets, &facet->hmap_node);
4130     list_remove(&facet->list_node);
4131     facet_free(facet);
4132 }
4133
4134 /* Feed information from 'facet' back into the learning table to keep it in
4135  * sync with what is actually flowing through the datapath. */
4136 static void
4137 facet_learn(struct facet *facet)
4138 {
4139     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4140     struct action_xlate_ctx ctx;
4141
4142     if (!facet->has_learn
4143         && !facet->has_normal
4144         && (!facet->has_fin_timeout
4145             || !(facet->tcp_flags & (TCP_FIN | TCP_RST)))) {
4146         return;
4147     }
4148
4149     action_xlate_ctx_init(&ctx, ofproto, &facet->flow,
4150                           facet->flow.vlan_tci,
4151                           facet->rule, facet->tcp_flags, NULL);
4152     ctx.may_learn = true;
4153     xlate_actions_for_side_effects(&ctx, facet->rule->up.ofpacts,
4154                                    facet->rule->up.ofpacts_len);
4155 }
4156
4157 static void
4158 facet_account(struct facet *facet)
4159 {
4160     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4161     struct subfacet *subfacet;
4162     const struct nlattr *a;
4163     unsigned int left;
4164     ovs_be16 vlan_tci;
4165     uint64_t n_bytes;
4166
4167     if (!facet->has_normal || !ofproto->has_bonded_bundles) {
4168         return;
4169     }
4170     n_bytes = facet->byte_count - facet->accounted_bytes;
4171
4172     /* This loop feeds byte counters to bond_account() for rebalancing to use
4173      * as a basis.  We also need to track the actual VLAN on which the packet
4174      * is going to be sent to ensure that it matches the one passed to
4175      * bond_choose_output_slave().  (Otherwise, we will account to the wrong
4176      * hash bucket.)
4177      *
4178      * We use the actions from an arbitrary subfacet because they should all
4179      * be equally valid for our purpose. */
4180     subfacet = CONTAINER_OF(list_front(&facet->subfacets),
4181                             struct subfacet, list_node);
4182     vlan_tci = facet->flow.vlan_tci;
4183     NL_ATTR_FOR_EACH_UNSAFE (a, left,
4184                              subfacet->actions, subfacet->actions_len) {
4185         const struct ovs_action_push_vlan *vlan;
4186         struct ofport_dpif *port;
4187
4188         switch (nl_attr_type(a)) {
4189         case OVS_ACTION_ATTR_OUTPUT:
4190             port = get_odp_port(ofproto, nl_attr_get_u32(a));
4191             if (port && port->bundle && port->bundle->bond) {
4192                 bond_account(port->bundle->bond, &facet->flow,
4193                              vlan_tci_to_vid(vlan_tci), n_bytes);
4194             }
4195             break;
4196
4197         case OVS_ACTION_ATTR_POP_VLAN:
4198             vlan_tci = htons(0);
4199             break;
4200
4201         case OVS_ACTION_ATTR_PUSH_VLAN:
4202             vlan = nl_attr_get(a);
4203             vlan_tci = vlan->vlan_tci;
4204             break;
4205         }
4206     }
4207 }
4208
4209 /* Returns true if the only action for 'facet' is to send to the controller.
4210  * (We don't report NetFlow expiration messages for such facets because they
4211  * are just part of the control logic for the network, not real traffic). */
4212 static bool
4213 facet_is_controller_flow(struct facet *facet)
4214 {
4215     if (facet) {
4216         const struct rule *rule = &facet->rule->up;
4217         const struct ofpact *ofpacts = rule->ofpacts;
4218         size_t ofpacts_len = rule->ofpacts_len;
4219
4220         if (ofpacts_len > 0 &&
4221             ofpacts->type == OFPACT_CONTROLLER &&
4222             ofpact_next(ofpacts) >= ofpact_end(ofpacts, ofpacts_len)) {
4223             return true;
4224         }
4225     }
4226     return false;
4227 }
4228
4229 /* Folds all of 'facet''s statistics into its rule.  Also updates the
4230  * accounting ofhook and emits a NetFlow expiration if appropriate.  All of
4231  * 'facet''s statistics in the datapath should have been zeroed and folded into
4232  * its packet and byte counts before this function is called. */
4233 static void
4234 facet_flush_stats(struct facet *facet)
4235 {
4236     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4237     struct subfacet *subfacet;
4238
4239     LIST_FOR_EACH (subfacet, list_node, &facet->subfacets) {
4240         assert(!subfacet->dp_byte_count);
4241         assert(!subfacet->dp_packet_count);
4242     }
4243
4244     facet_push_stats(facet);
4245     if (facet->accounted_bytes < facet->byte_count) {
4246         facet_account(facet);
4247         facet->accounted_bytes = facet->byte_count;
4248     }
4249
4250     if (ofproto->netflow && !facet_is_controller_flow(facet)) {
4251         struct ofexpired expired;
4252         expired.flow = facet->flow;
4253         expired.packet_count = facet->packet_count;
4254         expired.byte_count = facet->byte_count;
4255         expired.used = facet->used;
4256         netflow_expire(ofproto->netflow, &facet->nf_flow, &expired);
4257     }
4258
4259     facet->rule->packet_count += facet->packet_count;
4260     facet->rule->byte_count += facet->byte_count;
4261
4262     /* Reset counters to prevent double counting if 'facet' ever gets
4263      * reinstalled. */
4264     facet_reset_counters(facet);
4265
4266     netflow_flow_clear(&facet->nf_flow);
4267     facet->tcp_flags = 0;
4268 }
4269
4270 /* Searches 'ofproto''s table of facets for one exactly equal to 'flow'.
4271  * Returns it if found, otherwise a null pointer.
4272  *
4273  * 'hash' must be the return value of flow_hash(flow, 0).
4274  *
4275  * The returned facet might need revalidation; use facet_lookup_valid()
4276  * instead if that is important. */
4277 static struct facet *
4278 facet_find(struct ofproto_dpif *ofproto,
4279            const struct flow *flow, uint32_t hash)
4280 {
4281     struct facet *facet;
4282
4283     HMAP_FOR_EACH_WITH_HASH (facet, hmap_node, hash, &ofproto->facets) {
4284         if (flow_equal(flow, &facet->flow)) {
4285             return facet;
4286         }
4287     }
4288
4289     return NULL;
4290 }
4291
4292 /* Searches 'ofproto''s table of facets for one exactly equal to 'flow'.
4293  * Returns it if found, otherwise a null pointer.
4294  *
4295  * 'hash' must be the return value of flow_hash(flow, 0).
4296  *
4297  * The returned facet is guaranteed to be valid. */
4298 static struct facet *
4299 facet_lookup_valid(struct ofproto_dpif *ofproto, const struct flow *flow,
4300                    uint32_t hash)
4301 {
4302     struct facet *facet;
4303
4304     facet = facet_find(ofproto, flow, hash);
4305     if (facet
4306         && (ofproto->need_revalidate
4307             || tag_set_intersects(&ofproto->revalidate_set, facet->tags))) {
4308         facet_revalidate(facet);
4309     }
4310
4311     return facet;
4312 }
4313
4314 static const char *
4315 subfacet_path_to_string(enum subfacet_path path)
4316 {
4317     switch (path) {
4318     case SF_NOT_INSTALLED:
4319         return "not installed";
4320     case SF_FAST_PATH:
4321         return "in fast path";
4322     case SF_SLOW_PATH:
4323         return "in slow path";
4324     default:
4325         return "<error>";
4326     }
4327 }
4328
4329 /* Returns the path in which a subfacet should be installed if its 'slow'
4330  * member has the specified value. */
4331 static enum subfacet_path
4332 subfacet_want_path(enum slow_path_reason slow)
4333 {
4334     return slow ? SF_SLOW_PATH : SF_FAST_PATH;
4335 }
4336
4337 /* Returns true if 'subfacet' needs to have its datapath flow updated,
4338  * supposing that its actions have been recalculated as 'want_actions' and that
4339  * 'slow' is nonzero iff 'subfacet' should be in the slow path. */
4340 static bool
4341 subfacet_should_install(struct subfacet *subfacet, enum slow_path_reason slow,
4342                         const struct ofpbuf *want_actions)
4343 {
4344     enum subfacet_path want_path = subfacet_want_path(slow);
4345     return (want_path != subfacet->path
4346             || (want_path == SF_FAST_PATH
4347                 && (subfacet->actions_len != want_actions->size
4348                     || memcmp(subfacet->actions, want_actions->data,
4349                               subfacet->actions_len))));
4350 }
4351
4352 static bool
4353 facet_check_consistency(struct facet *facet)
4354 {
4355     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 15);
4356
4357     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4358
4359     uint64_t odp_actions_stub[1024 / 8];
4360     struct ofpbuf odp_actions;
4361
4362     struct rule_dpif *rule;
4363     struct subfacet *subfacet;
4364     bool may_log = false;
4365     bool ok;
4366
4367     /* Check the rule for consistency. */
4368     rule = rule_dpif_lookup(ofproto, &facet->flow);
4369     ok = rule == facet->rule;
4370     if (!ok) {
4371         may_log = !VLOG_DROP_WARN(&rl);
4372         if (may_log) {
4373             struct ds s;
4374
4375             ds_init(&s);
4376             flow_format(&s, &facet->flow);
4377             ds_put_format(&s, ": facet associated with wrong rule (was "
4378                           "table=%"PRIu8",", facet->rule->up.table_id);
4379             cls_rule_format(&facet->rule->up.cr, &s);
4380             ds_put_format(&s, ") (should have been table=%"PRIu8",",
4381                           rule->up.table_id);
4382             cls_rule_format(&rule->up.cr, &s);
4383             ds_put_char(&s, ')');
4384
4385             VLOG_WARN("%s", ds_cstr(&s));
4386             ds_destroy(&s);
4387         }
4388     }
4389
4390     /* Check the datapath actions for consistency. */
4391     ofpbuf_use_stub(&odp_actions, odp_actions_stub, sizeof odp_actions_stub);
4392     LIST_FOR_EACH (subfacet, list_node, &facet->subfacets) {
4393         enum subfacet_path want_path;
4394         struct odputil_keybuf keybuf;
4395         struct action_xlate_ctx ctx;
4396         struct ofpbuf key;
4397         struct ds s;
4398
4399         action_xlate_ctx_init(&ctx, ofproto, &facet->flow,
4400                               subfacet->initial_tci, rule, 0, NULL);
4401         xlate_actions(&ctx, rule->up.ofpacts, rule->up.ofpacts_len,
4402                       &odp_actions);
4403
4404         if (subfacet->path == SF_NOT_INSTALLED) {
4405             /* This only happens if the datapath reported an error when we
4406              * tried to install the flow.  Don't flag another error here. */
4407             continue;
4408         }
4409
4410         want_path = subfacet_want_path(subfacet->slow);
4411         if (want_path == SF_SLOW_PATH && subfacet->path == SF_SLOW_PATH) {
4412             /* The actions for slow-path flows may legitimately vary from one
4413              * packet to the next.  We're done. */
4414             continue;
4415         }
4416
4417         if (!subfacet_should_install(subfacet, subfacet->slow, &odp_actions)) {
4418             continue;
4419         }
4420
4421         /* Inconsistency! */
4422         if (ok) {
4423             may_log = !VLOG_DROP_WARN(&rl);
4424             ok = false;
4425         }
4426         if (!may_log) {
4427             /* Rate-limited, skip reporting. */
4428             continue;
4429         }
4430
4431         ds_init(&s);
4432         subfacet_get_key(subfacet, &keybuf, &key);
4433         odp_flow_key_format(key.data, key.size, &s);
4434
4435         ds_put_cstr(&s, ": inconsistency in subfacet");
4436         if (want_path != subfacet->path) {
4437             enum odp_key_fitness fitness = subfacet->key_fitness;
4438
4439             ds_put_format(&s, " (%s, fitness=%s)",
4440                           subfacet_path_to_string(subfacet->path),
4441                           odp_key_fitness_to_string(fitness));
4442             ds_put_format(&s, " (should have been %s)",
4443                           subfacet_path_to_string(want_path));
4444         } else if (want_path == SF_FAST_PATH) {
4445             ds_put_cstr(&s, " (actions were: ");
4446             format_odp_actions(&s, subfacet->actions,
4447                                subfacet->actions_len);
4448             ds_put_cstr(&s, ") (correct actions: ");
4449             format_odp_actions(&s, odp_actions.data, odp_actions.size);
4450             ds_put_char(&s, ')');
4451         } else {
4452             ds_put_cstr(&s, " (actions: ");
4453             format_odp_actions(&s, subfacet->actions,
4454                                subfacet->actions_len);
4455             ds_put_char(&s, ')');
4456         }
4457         VLOG_WARN("%s", ds_cstr(&s));
4458         ds_destroy(&s);
4459     }
4460     ofpbuf_uninit(&odp_actions);
4461
4462     return ok;
4463 }
4464
4465 /* Re-searches the classifier for 'facet':
4466  *
4467  *   - If the rule found is different from 'facet''s current rule, moves
4468  *     'facet' to the new rule and recompiles its actions.
4469  *
4470  *   - If the rule found is the same as 'facet''s current rule, leaves 'facet'
4471  *     where it is and recompiles its actions anyway. */
4472 static void
4473 facet_revalidate(struct facet *facet)
4474 {
4475     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4476     struct actions {
4477         struct nlattr *odp_actions;
4478         size_t actions_len;
4479     };
4480     struct actions *new_actions;
4481
4482     struct action_xlate_ctx ctx;
4483     uint64_t odp_actions_stub[1024 / 8];
4484     struct ofpbuf odp_actions;
4485
4486     struct rule_dpif *new_rule;
4487     struct subfacet *subfacet;
4488     int i;
4489
4490     COVERAGE_INC(facet_revalidate);
4491
4492     new_rule = rule_dpif_lookup(ofproto, &facet->flow);
4493
4494     /* Calculate new datapath actions.
4495      *
4496      * We do not modify any 'facet' state yet, because we might need to, e.g.,
4497      * emit a NetFlow expiration and, if so, we need to have the old state
4498      * around to properly compose it. */
4499
4500     /* If the datapath actions changed or the installability changed,
4501      * then we need to talk to the datapath. */
4502     i = 0;
4503     new_actions = NULL;
4504     memset(&ctx, 0, sizeof ctx);
4505     ofpbuf_use_stub(&odp_actions, odp_actions_stub, sizeof odp_actions_stub);
4506     LIST_FOR_EACH (subfacet, list_node, &facet->subfacets) {
4507         enum slow_path_reason slow;
4508
4509         action_xlate_ctx_init(&ctx, ofproto, &facet->flow,
4510                               subfacet->initial_tci, new_rule, 0, NULL);
4511         xlate_actions(&ctx, new_rule->up.ofpacts, new_rule->up.ofpacts_len,
4512                       &odp_actions);
4513
4514         slow = (subfacet->slow & SLOW_MATCH) | ctx.slow;
4515         if (subfacet_should_install(subfacet, slow, &odp_actions)) {
4516             struct dpif_flow_stats stats;
4517
4518             subfacet_install(subfacet,
4519                              odp_actions.data, odp_actions.size, &stats, slow);
4520             subfacet_update_stats(subfacet, &stats);
4521
4522             if (!new_actions) {
4523                 new_actions = xcalloc(list_size(&facet->subfacets),
4524                                       sizeof *new_actions);
4525             }
4526             new_actions[i].odp_actions = xmemdup(odp_actions.data,
4527                                                  odp_actions.size);
4528             new_actions[i].actions_len = odp_actions.size;
4529         }
4530
4531         i++;
4532     }
4533     ofpbuf_uninit(&odp_actions);
4534
4535     if (new_actions) {
4536         facet_flush_stats(facet);
4537     }
4538
4539     /* Update 'facet' now that we've taken care of all the old state. */
4540     facet->tags = ctx.tags;
4541     facet->nf_flow.output_iface = ctx.nf_output_iface;
4542     facet->has_learn = ctx.has_learn;
4543     facet->has_normal = ctx.has_normal;
4544     facet->has_fin_timeout = ctx.has_fin_timeout;
4545     facet->mirrors = ctx.mirrors;
4546
4547     i = 0;
4548     LIST_FOR_EACH (subfacet, list_node, &facet->subfacets) {
4549         subfacet->slow = (subfacet->slow & SLOW_MATCH) | ctx.slow;
4550
4551         if (new_actions && new_actions[i].odp_actions) {
4552             free(subfacet->actions);
4553             subfacet->actions = new_actions[i].odp_actions;
4554             subfacet->actions_len = new_actions[i].actions_len;
4555         }
4556         i++;
4557     }
4558     free(new_actions);
4559
4560     if (facet->rule != new_rule) {
4561         COVERAGE_INC(facet_changed_rule);
4562         list_remove(&facet->list_node);
4563         list_push_back(&new_rule->facets, &facet->list_node);
4564         facet->rule = new_rule;
4565         facet->used = new_rule->up.created;
4566         facet->prev_used = facet->used;
4567     }
4568 }
4569
4570 /* Updates 'facet''s used time.  Caller is responsible for calling
4571  * facet_push_stats() to update the flows which 'facet' resubmits into. */
4572 static void
4573 facet_update_time(struct facet *facet, long long int used)
4574 {
4575     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4576     if (used > facet->used) {
4577         facet->used = used;
4578         ofproto_rule_update_used(&facet->rule->up, used);
4579         netflow_flow_update_time(ofproto->netflow, &facet->nf_flow, used);
4580     }
4581 }
4582
4583 static void
4584 facet_reset_counters(struct facet *facet)
4585 {
4586     facet->packet_count = 0;
4587     facet->byte_count = 0;
4588     facet->prev_packet_count = 0;
4589     facet->prev_byte_count = 0;
4590     facet->accounted_bytes = 0;
4591 }
4592
4593 static void
4594 facet_push_stats(struct facet *facet)
4595 {
4596     struct dpif_flow_stats stats;
4597
4598     assert(facet->packet_count >= facet->prev_packet_count);
4599     assert(facet->byte_count >= facet->prev_byte_count);
4600     assert(facet->used >= facet->prev_used);
4601
4602     stats.n_packets = facet->packet_count - facet->prev_packet_count;
4603     stats.n_bytes = facet->byte_count - facet->prev_byte_count;
4604     stats.used = facet->used;
4605     stats.tcp_flags = 0;
4606
4607     if (stats.n_packets || stats.n_bytes || facet->used > facet->prev_used) {
4608         facet->prev_packet_count = facet->packet_count;
4609         facet->prev_byte_count = facet->byte_count;
4610         facet->prev_used = facet->used;
4611
4612         flow_push_stats(facet->rule, &facet->flow, &stats);
4613
4614         update_mirror_stats(ofproto_dpif_cast(facet->rule->up.ofproto),
4615                             facet->mirrors, stats.n_packets, stats.n_bytes);
4616     }
4617 }
4618
4619 static void
4620 rule_credit_stats(struct rule_dpif *rule, const struct dpif_flow_stats *stats)
4621 {
4622     rule->packet_count += stats->n_packets;
4623     rule->byte_count += stats->n_bytes;
4624     ofproto_rule_update_used(&rule->up, stats->used);
4625 }
4626
4627 /* Pushes flow statistics to the rules which 'flow' resubmits into given
4628  * 'rule''s actions and mirrors. */
4629 static void
4630 flow_push_stats(struct rule_dpif *rule,
4631                 const struct flow *flow, const struct dpif_flow_stats *stats)
4632 {
4633     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
4634     struct action_xlate_ctx ctx;
4635
4636     ofproto_rule_update_used(&rule->up, stats->used);
4637
4638     action_xlate_ctx_init(&ctx, ofproto, flow, flow->vlan_tci, rule,
4639                           0, NULL);
4640     ctx.resubmit_stats = stats;
4641     xlate_actions_for_side_effects(&ctx, rule->up.ofpacts,
4642                                    rule->up.ofpacts_len);
4643 }
4644 \f
4645 /* Subfacets. */
4646
4647 static struct subfacet *
4648 subfacet_find(struct ofproto_dpif *ofproto,
4649               const struct nlattr *key, size_t key_len, uint32_t key_hash,
4650               const struct flow *flow)
4651 {
4652     struct subfacet *subfacet;
4653
4654     HMAP_FOR_EACH_WITH_HASH (subfacet, hmap_node, key_hash,
4655                              &ofproto->subfacets) {
4656         if (subfacet->key
4657             ? (subfacet->key_len == key_len
4658                && !memcmp(key, subfacet->key, key_len))
4659             : flow_equal(flow, &subfacet->facet->flow)) {
4660             return subfacet;
4661         }
4662     }
4663
4664     return NULL;
4665 }
4666
4667 /* Searches 'facet' (within 'ofproto') for a subfacet with the specified
4668  * 'key_fitness', 'key', and 'key_len' members in 'miss'.  Returns the
4669  * existing subfacet if there is one, otherwise creates and returns a
4670  * new subfacet.
4671  *
4672  * If the returned subfacet is new, then subfacet->actions will be NULL, in
4673  * which case the caller must populate the actions with
4674  * subfacet_make_actions(). */
4675 static struct subfacet *
4676 subfacet_create(struct facet *facet, struct flow_miss *miss,
4677                 long long int now)
4678 {
4679     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4680     enum odp_key_fitness key_fitness = miss->key_fitness;
4681     const struct nlattr *key = miss->key;
4682     size_t key_len = miss->key_len;
4683     uint32_t key_hash;
4684     struct subfacet *subfacet;
4685
4686     key_hash = odp_flow_key_hash(key, key_len);
4687
4688     if (list_is_empty(&facet->subfacets)) {
4689         subfacet = &facet->one_subfacet;
4690     } else {
4691         subfacet = subfacet_find(ofproto, key, key_len, key_hash,
4692                                  &facet->flow);
4693         if (subfacet) {
4694             if (subfacet->facet == facet) {
4695                 return subfacet;
4696             }
4697
4698             /* This shouldn't happen. */
4699             VLOG_ERR_RL(&rl, "subfacet with wrong facet");
4700             subfacet_destroy(subfacet);
4701         }
4702
4703         subfacet = xmalloc(sizeof *subfacet);
4704     }
4705
4706     hmap_insert(&ofproto->subfacets, &subfacet->hmap_node, key_hash);
4707     list_push_back(&facet->subfacets, &subfacet->list_node);
4708     subfacet->facet = facet;
4709     subfacet->key_fitness = key_fitness;
4710     if (key_fitness != ODP_FIT_PERFECT) {
4711         subfacet->key = xmemdup(key, key_len);
4712         subfacet->key_len = key_len;
4713     } else {
4714         subfacet->key = NULL;
4715         subfacet->key_len = 0;
4716     }
4717     subfacet->used = now;
4718     subfacet->dp_packet_count = 0;
4719     subfacet->dp_byte_count = 0;
4720     subfacet->actions_len = 0;
4721     subfacet->actions = NULL;
4722     subfacet->slow = (subfacet->key_fitness == ODP_FIT_TOO_LITTLE
4723                       ? SLOW_MATCH
4724                       : 0);
4725     subfacet->path = SF_NOT_INSTALLED;
4726     subfacet->initial_tci = miss->initial_tci;
4727     subfacet->odp_in_port = miss->odp_in_port;
4728
4729     return subfacet;
4730 }
4731
4732 /* Uninstalls 'subfacet' from the datapath, if it is installed, removes it from
4733  * its facet within 'ofproto', and frees it. */
4734 static void
4735 subfacet_destroy__(struct subfacet *subfacet)
4736 {
4737     struct facet *facet = subfacet->facet;
4738     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4739
4740     subfacet_uninstall(subfacet);
4741     hmap_remove(&ofproto->subfacets, &subfacet->hmap_node);
4742     list_remove(&subfacet->list_node);
4743     free(subfacet->key);
4744     free(subfacet->actions);
4745     if (subfacet != &facet->one_subfacet) {
4746         free(subfacet);
4747     }
4748 }
4749
4750 /* Destroys 'subfacet', as with subfacet_destroy__(), and then if this was the
4751  * last remaining subfacet in its facet destroys the facet too. */
4752 static void
4753 subfacet_destroy(struct subfacet *subfacet)
4754 {
4755     struct facet *facet = subfacet->facet;
4756
4757     if (list_is_singleton(&facet->subfacets)) {
4758         /* facet_remove() needs at least one subfacet (it will remove it). */
4759         facet_remove(facet);
4760     } else {
4761         subfacet_destroy__(subfacet);
4762     }
4763 }
4764
4765 static void
4766 subfacet_destroy_batch(struct ofproto_dpif *ofproto,
4767                        struct subfacet **subfacets, int n)
4768 {
4769     struct odputil_keybuf keybufs[SUBFACET_DESTROY_MAX_BATCH];
4770     struct dpif_op ops[SUBFACET_DESTROY_MAX_BATCH];
4771     struct dpif_op *opsp[SUBFACET_DESTROY_MAX_BATCH];
4772     struct ofpbuf keys[SUBFACET_DESTROY_MAX_BATCH];
4773     struct dpif_flow_stats stats[SUBFACET_DESTROY_MAX_BATCH];
4774     int i;
4775
4776     for (i = 0; i < n; i++) {
4777         ops[i].type = DPIF_OP_FLOW_DEL;
4778         subfacet_get_key(subfacets[i], &keybufs[i], &keys[i]);
4779         ops[i].u.flow_del.key = keys[i].data;
4780         ops[i].u.flow_del.key_len = keys[i].size;
4781         ops[i].u.flow_del.stats = &stats[i];
4782         opsp[i] = &ops[i];
4783     }
4784
4785     dpif_operate(ofproto->backer->dpif, opsp, n);
4786     for (i = 0; i < n; i++) {
4787         subfacet_reset_dp_stats(subfacets[i], &stats[i]);
4788         subfacets[i]->path = SF_NOT_INSTALLED;
4789         subfacet_destroy(subfacets[i]);
4790     }
4791 }
4792
4793 /* Initializes 'key' with the sequence of OVS_KEY_ATTR_* Netlink attributes
4794  * that can be used to refer to 'subfacet'.  The caller must provide 'keybuf'
4795  * for use as temporary storage. */
4796 static void
4797 subfacet_get_key(struct subfacet *subfacet, struct odputil_keybuf *keybuf,
4798                  struct ofpbuf *key)
4799 {
4800
4801     if (!subfacet->key) {
4802         struct flow *flow = &subfacet->facet->flow;
4803
4804         ofpbuf_use_stack(key, keybuf, sizeof *keybuf);
4805         odp_flow_key_from_flow(key, flow, subfacet->odp_in_port);
4806     } else {
4807         ofpbuf_use_const(key, subfacet->key, subfacet->key_len);
4808     }
4809 }
4810
4811 /* Composes the datapath actions for 'subfacet' based on its rule's actions.
4812  * Translates the actions into 'odp_actions', which the caller must have
4813  * initialized and is responsible for uninitializing. */
4814 static void
4815 subfacet_make_actions(struct subfacet *subfacet, const struct ofpbuf *packet,
4816                       struct ofpbuf *odp_actions)
4817 {
4818     struct facet *facet = subfacet->facet;
4819     struct rule_dpif *rule = facet->rule;
4820     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
4821
4822     struct action_xlate_ctx ctx;
4823
4824     action_xlate_ctx_init(&ctx, ofproto, &facet->flow, subfacet->initial_tci,
4825                           rule, 0, packet);
4826     xlate_actions(&ctx, rule->up.ofpacts, rule->up.ofpacts_len, odp_actions);
4827     facet->tags = ctx.tags;
4828     facet->has_learn = ctx.has_learn;
4829     facet->has_normal = ctx.has_normal;
4830     facet->has_fin_timeout = ctx.has_fin_timeout;
4831     facet->nf_flow.output_iface = ctx.nf_output_iface;
4832     facet->mirrors = ctx.mirrors;
4833
4834     subfacet->slow = (subfacet->slow & SLOW_MATCH) | ctx.slow;
4835     if (subfacet->actions_len != odp_actions->size
4836         || memcmp(subfacet->actions, odp_actions->data, odp_actions->size)) {
4837         free(subfacet->actions);
4838         subfacet->actions_len = odp_actions->size;
4839         subfacet->actions = xmemdup(odp_actions->data, odp_actions->size);
4840     }
4841 }
4842
4843 /* Updates 'subfacet''s datapath flow, setting its actions to 'actions_len'
4844  * bytes of actions in 'actions'.  If 'stats' is non-null, statistics counters
4845  * in the datapath will be zeroed and 'stats' will be updated with traffic new
4846  * since 'subfacet' was last updated.
4847  *
4848  * Returns 0 if successful, otherwise a positive errno value. */
4849 static int
4850 subfacet_install(struct subfacet *subfacet,
4851                  const struct nlattr *actions, size_t actions_len,
4852                  struct dpif_flow_stats *stats,
4853                  enum slow_path_reason slow)
4854 {
4855     struct facet *facet = subfacet->facet;
4856     struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
4857     enum subfacet_path path = subfacet_want_path(slow);
4858     uint64_t slow_path_stub[128 / 8];
4859     struct odputil_keybuf keybuf;
4860     enum dpif_flow_put_flags flags;
4861     struct ofpbuf key;
4862     int ret;
4863
4864     flags = DPIF_FP_CREATE | DPIF_FP_MODIFY;
4865     if (stats) {
4866         flags |= DPIF_FP_ZERO_STATS;
4867     }
4868
4869     if (path == SF_SLOW_PATH) {
4870         compose_slow_path(ofproto, &facet->flow, slow,
4871                           slow_path_stub, sizeof slow_path_stub,
4872                           &actions, &actions_len);
4873     }
4874
4875     subfacet_get_key(subfacet, &keybuf, &key);
4876     ret = dpif_flow_put(ofproto->backer->dpif, flags, key.data, key.size,
4877                         actions, actions_len, stats);
4878
4879     if (stats) {
4880         subfacet_reset_dp_stats(subfacet, stats);
4881     }
4882
4883     if (!ret) {
4884         subfacet->path = path;
4885     }
4886     return ret;
4887 }
4888
4889 static int
4890 subfacet_reinstall(struct subfacet *subfacet, struct dpif_flow_stats *stats)
4891 {
4892     return subfacet_install(subfacet, subfacet->actions, subfacet->actions_len,
4893                             stats, subfacet->slow);
4894 }
4895
4896 /* If 'subfacet' is installed in the datapath, uninstalls it. */
4897 static void
4898 subfacet_uninstall(struct subfacet *subfacet)
4899 {
4900     if (subfacet->path != SF_NOT_INSTALLED) {
4901         struct rule_dpif *rule = subfacet->facet->rule;
4902         struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
4903         struct odputil_keybuf keybuf;
4904         struct dpif_flow_stats stats;
4905         struct ofpbuf key;
4906         int error;
4907
4908         subfacet_get_key(subfacet, &keybuf, &key);
4909         error = dpif_flow_del(ofproto->backer->dpif,
4910                               key.data, key.size, &stats);
4911         subfacet_reset_dp_stats(subfacet, &stats);
4912         if (!error) {
4913             subfacet_update_stats(subfacet, &stats);
4914         }
4915         subfacet->path = SF_NOT_INSTALLED;
4916     } else {
4917         assert(subfacet->dp_packet_count == 0);
4918         assert(subfacet->dp_byte_count == 0);
4919     }
4920 }
4921
4922 /* Resets 'subfacet''s datapath statistics counters.  This should be called
4923  * when 'subfacet''s statistics are cleared in the datapath.  If 'stats' is
4924  * non-null, it should contain the statistics returned by dpif when 'subfacet'
4925  * was reset in the datapath.  'stats' will be modified to include only
4926  * statistics new since 'subfacet' was last updated. */
4927 static void
4928 subfacet_reset_dp_stats(struct subfacet *subfacet,
4929                         struct dpif_flow_stats *stats)
4930 {
4931     if (stats
4932         && subfacet->dp_packet_count <= stats->n_packets
4933         && subfacet->dp_byte_count <= stats->n_bytes) {
4934         stats->n_packets -= subfacet->dp_packet_count;
4935         stats->n_bytes -= subfacet->dp_byte_count;
4936     }
4937
4938     subfacet->dp_packet_count = 0;
4939     subfacet->dp_byte_count = 0;
4940 }
4941
4942 /* Updates 'subfacet''s used time.  The caller is responsible for calling
4943  * facet_push_stats() to update the flows which 'subfacet' resubmits into. */
4944 static void
4945 subfacet_update_time(struct subfacet *subfacet, long long int used)
4946 {
4947     if (used > subfacet->used) {
4948         subfacet->used = used;
4949         facet_update_time(subfacet->facet, used);
4950     }
4951 }
4952
4953 /* Folds the statistics from 'stats' into the counters in 'subfacet'.
4954  *
4955  * Because of the meaning of a subfacet's counters, it only makes sense to do
4956  * this if 'stats' are not tracked in the datapath, that is, if 'stats'
4957  * represents a packet that was sent by hand or if it represents statistics
4958  * that have been cleared out of the datapath. */
4959 static void
4960 subfacet_update_stats(struct subfacet *subfacet,
4961                       const struct dpif_flow_stats *stats)
4962 {
4963     if (stats->n_packets || stats->used > subfacet->used) {
4964         struct facet *facet = subfacet->facet;
4965
4966         subfacet_update_time(subfacet, stats->used);
4967         facet->packet_count += stats->n_packets;
4968         facet->byte_count += stats->n_bytes;
4969         facet->tcp_flags |= stats->tcp_flags;
4970         facet_push_stats(facet);
4971         netflow_flow_update_flags(&facet->nf_flow, stats->tcp_flags);
4972     }
4973 }
4974 \f
4975 /* Rules. */
4976
4977 static struct rule_dpif *
4978 rule_dpif_lookup(struct ofproto_dpif *ofproto, const struct flow *flow)
4979 {
4980     struct rule_dpif *rule;
4981
4982     rule = rule_dpif_lookup__(ofproto, flow, 0);
4983     if (rule) {
4984         return rule;
4985     }
4986
4987     return rule_dpif_miss_rule(ofproto, flow);
4988 }
4989
4990 static struct rule_dpif *
4991 rule_dpif_lookup__(struct ofproto_dpif *ofproto, const struct flow *flow,
4992                    uint8_t table_id)
4993 {
4994     struct cls_rule *cls_rule;
4995     struct classifier *cls;
4996
4997     if (table_id >= N_TABLES) {
4998         return NULL;
4999     }
5000
5001     cls = &ofproto->up.tables[table_id].cls;
5002     if (flow->nw_frag & FLOW_NW_FRAG_ANY
5003         && ofproto->up.frag_handling == OFPC_FRAG_NORMAL) {
5004         /* For OFPC_NORMAL frag_handling, we must pretend that transport ports
5005          * are unavailable. */
5006         struct flow ofpc_normal_flow = *flow;
5007         ofpc_normal_flow.tp_src = htons(0);
5008         ofpc_normal_flow.tp_dst = htons(0);
5009         cls_rule = classifier_lookup(cls, &ofpc_normal_flow);
5010     } else {
5011         cls_rule = classifier_lookup(cls, flow);
5012     }
5013     return rule_dpif_cast(rule_from_cls_rule(cls_rule));
5014 }
5015
5016 static struct rule_dpif *
5017 rule_dpif_miss_rule(struct ofproto_dpif *ofproto, const struct flow *flow)
5018 {
5019     struct ofport_dpif *port;
5020
5021     port = get_ofp_port(ofproto, flow->in_port);
5022     if (!port) {
5023         VLOG_WARN_RL(&rl, "packet-in on unknown port %"PRIu16, flow->in_port);
5024         return ofproto->miss_rule;
5025     }
5026
5027     if (port->up.pp.config & OFPUTIL_PC_NO_PACKET_IN) {
5028         return ofproto->no_packet_in_rule;
5029     }
5030     return ofproto->miss_rule;
5031 }
5032
5033 static void
5034 complete_operation(struct rule_dpif *rule)
5035 {
5036     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
5037
5038     rule_invalidate(rule);
5039     if (clogged) {
5040         struct dpif_completion *c = xmalloc(sizeof *c);
5041         c->op = rule->up.pending;
5042         list_push_back(&ofproto->completions, &c->list_node);
5043     } else {
5044         ofoperation_complete(rule->up.pending, 0);
5045     }
5046 }
5047
5048 static struct rule *
5049 rule_alloc(void)
5050 {
5051     struct rule_dpif *rule = xmalloc(sizeof *rule);
5052     return &rule->up;
5053 }
5054
5055 static void
5056 rule_dealloc(struct rule *rule_)
5057 {
5058     struct rule_dpif *rule = rule_dpif_cast(rule_);
5059     free(rule);
5060 }
5061
5062 static enum ofperr
5063 rule_construct(struct rule *rule_)
5064 {
5065     struct rule_dpif *rule = rule_dpif_cast(rule_);
5066     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
5067     struct rule_dpif *victim;
5068     uint8_t table_id;
5069
5070     rule->packet_count = 0;
5071     rule->byte_count = 0;
5072
5073     victim = rule_dpif_cast(ofoperation_get_victim(rule->up.pending));
5074     if (victim && !list_is_empty(&victim->facets)) {
5075         struct facet *facet;
5076
5077         rule->facets = victim->facets;
5078         list_moved(&rule->facets);
5079         LIST_FOR_EACH (facet, list_node, &rule->facets) {
5080             /* XXX: We're only clearing our local counters here.  It's possible
5081              * that quite a few packets are unaccounted for in the datapath
5082              * statistics.  These will be accounted to the new rule instead of
5083              * cleared as required.  This could be fixed by clearing out the
5084              * datapath statistics for this facet, but currently it doesn't
5085              * seem worth it. */
5086             facet_reset_counters(facet);
5087             facet->rule = rule;
5088         }
5089     } else {
5090         /* Must avoid list_moved() in this case. */
5091         list_init(&rule->facets);
5092     }
5093
5094     table_id = rule->up.table_id;
5095     if (victim) {
5096         rule->tag = victim->tag;
5097     } else if (table_id == 0) {
5098         rule->tag = 0;
5099     } else {
5100         struct flow flow;
5101
5102         miniflow_expand(&rule->up.cr.match.flow, &flow);
5103         rule->tag = rule_calculate_tag(&flow, &rule->up.cr.match.mask,
5104                                        ofproto->tables[table_id].basis);
5105     }
5106
5107     complete_operation(rule);
5108     return 0;
5109 }
5110
5111 static void
5112 rule_destruct(struct rule *rule_)
5113 {
5114     struct rule_dpif *rule = rule_dpif_cast(rule_);
5115     struct facet *facet, *next_facet;
5116
5117     LIST_FOR_EACH_SAFE (facet, next_facet, list_node, &rule->facets) {
5118         facet_revalidate(facet);
5119     }
5120
5121     complete_operation(rule);
5122 }
5123
5124 static void
5125 rule_get_stats(struct rule *rule_, uint64_t *packets, uint64_t *bytes)
5126 {
5127     struct rule_dpif *rule = rule_dpif_cast(rule_);
5128     struct facet *facet;
5129
5130     /* Start from historical data for 'rule' itself that are no longer tracked
5131      * in facets.  This counts, for example, facets that have expired. */
5132     *packets = rule->packet_count;
5133     *bytes = rule->byte_count;
5134
5135     /* Add any statistics that are tracked by facets.  This includes
5136      * statistical data recently updated by ofproto_update_stats() as well as
5137      * stats for packets that were executed "by hand" via dpif_execute(). */
5138     LIST_FOR_EACH (facet, list_node, &rule->facets) {
5139         *packets += facet->packet_count;
5140         *bytes += facet->byte_count;
5141     }
5142 }
5143
5144 static enum ofperr
5145 rule_execute(struct rule *rule_, const struct flow *flow,
5146              struct ofpbuf *packet)
5147 {
5148     struct rule_dpif *rule = rule_dpif_cast(rule_);
5149     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
5150
5151     struct dpif_flow_stats stats;
5152
5153     struct action_xlate_ctx ctx;
5154     uint64_t odp_actions_stub[1024 / 8];
5155     struct ofpbuf odp_actions;
5156
5157     dpif_flow_stats_extract(flow, packet, time_msec(), &stats);
5158     rule_credit_stats(rule, &stats);
5159
5160     ofpbuf_use_stub(&odp_actions, odp_actions_stub, sizeof odp_actions_stub);
5161     action_xlate_ctx_init(&ctx, ofproto, flow, flow->vlan_tci,
5162                           rule, stats.tcp_flags, packet);
5163     ctx.resubmit_stats = &stats;
5164     xlate_actions(&ctx, rule->up.ofpacts, rule->up.ofpacts_len, &odp_actions);
5165
5166     execute_odp_actions(ofproto, flow, odp_actions.data,
5167                         odp_actions.size, packet);
5168
5169     ofpbuf_uninit(&odp_actions);
5170
5171     return 0;
5172 }
5173
5174 static void
5175 rule_modify_actions(struct rule *rule_)
5176 {
5177     struct rule_dpif *rule = rule_dpif_cast(rule_);
5178
5179     complete_operation(rule);
5180 }
5181 \f
5182 /* Sends 'packet' out 'ofport'.
5183  * May modify 'packet'.
5184  * Returns 0 if successful, otherwise a positive errno value. */
5185 static int
5186 send_packet(const struct ofport_dpif *ofport, struct ofpbuf *packet)
5187 {
5188     const struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
5189     struct ofpbuf key, odp_actions;
5190     struct odputil_keybuf keybuf;
5191     uint32_t odp_port;
5192     struct flow flow;
5193     int error;
5194
5195     flow_extract(packet, 0, 0, NULL, OFPP_LOCAL, &flow);
5196     odp_port = vsp_realdev_to_vlandev(ofproto, ofport->odp_port,
5197                                       flow.vlan_tci);
5198     if (odp_port != ofport->odp_port) {
5199         eth_pop_vlan(packet);
5200         flow.vlan_tci = htons(0);
5201     }
5202
5203     ofpbuf_use_stack(&key, &keybuf, sizeof keybuf);
5204     odp_flow_key_from_flow(&key, &flow,
5205                            ofp_port_to_odp_port(ofproto, flow.in_port));
5206
5207     ofpbuf_init(&odp_actions, 32);
5208     compose_sflow_action(ofproto, &odp_actions, &flow, odp_port);
5209
5210     nl_msg_put_u32(&odp_actions, OVS_ACTION_ATTR_OUTPUT, odp_port);
5211     error = dpif_execute(ofproto->backer->dpif,
5212                          key.data, key.size,
5213                          odp_actions.data, odp_actions.size,
5214                          packet);
5215     ofpbuf_uninit(&odp_actions);
5216
5217     if (error) {
5218         VLOG_WARN_RL(&rl, "%s: failed to send packet on port %"PRIu32" (%s)",
5219                      ofproto->up.name, odp_port, strerror(error));
5220     }
5221     ofproto_update_local_port_stats(ofport->up.ofproto, packet->size, 0);
5222     return error;
5223 }
5224 \f
5225 /* OpenFlow to datapath action translation. */
5226
5227 static void do_xlate_actions(const struct ofpact *, size_t ofpacts_len,
5228                              struct action_xlate_ctx *);
5229 static void xlate_normal(struct action_xlate_ctx *);
5230
5231 /* Composes an ODP action for a "slow path" action for 'flow' within 'ofproto'.
5232  * The action will state 'slow' as the reason that the action is in the slow
5233  * path.  (This is purely informational: it allows a human viewing "ovs-dpctl
5234  * dump-flows" output to see why a flow is in the slow path.)
5235  *
5236  * The 'stub_size' bytes in 'stub' will be used to store the action.
5237  * 'stub_size' must be large enough for the action.
5238  *
5239  * The action and its size will be stored in '*actionsp' and '*actions_lenp',
5240  * respectively. */
5241 static void
5242 compose_slow_path(const struct ofproto_dpif *ofproto, const struct flow *flow,
5243                   enum slow_path_reason slow,
5244                   uint64_t *stub, size_t stub_size,
5245                   const struct nlattr **actionsp, size_t *actions_lenp)
5246 {
5247     union user_action_cookie cookie;
5248     struct ofpbuf buf;
5249
5250     cookie.type = USER_ACTION_COOKIE_SLOW_PATH;
5251     cookie.slow_path.unused = 0;
5252     cookie.slow_path.reason = slow;
5253
5254     ofpbuf_use_stack(&buf, stub, stub_size);
5255     if (slow & (SLOW_CFM | SLOW_LACP | SLOW_STP)) {
5256         uint32_t pid = dpif_port_get_pid(ofproto->backer->dpif, UINT16_MAX);
5257         odp_put_userspace_action(pid, &cookie, &buf);
5258     } else {
5259         put_userspace_action(ofproto, &buf, flow, &cookie);
5260     }
5261     *actionsp = buf.data;
5262     *actions_lenp = buf.size;
5263 }
5264
5265 static size_t
5266 put_userspace_action(const struct ofproto_dpif *ofproto,
5267                      struct ofpbuf *odp_actions,
5268                      const struct flow *flow,
5269                      const union user_action_cookie *cookie)
5270 {
5271     uint32_t pid;
5272
5273     pid = dpif_port_get_pid(ofproto->backer->dpif,
5274                             ofp_port_to_odp_port(ofproto, flow->in_port));
5275
5276     return odp_put_userspace_action(pid, cookie, odp_actions);
5277 }
5278
5279 static void
5280 compose_sflow_cookie(const struct ofproto_dpif *ofproto,
5281                      ovs_be16 vlan_tci, uint32_t odp_port,
5282                      unsigned int n_outputs, union user_action_cookie *cookie)
5283 {
5284     int ifindex;
5285
5286     cookie->type = USER_ACTION_COOKIE_SFLOW;
5287     cookie->sflow.vlan_tci = vlan_tci;
5288
5289     /* See http://www.sflow.org/sflow_version_5.txt (search for "Input/output
5290      * port information") for the interpretation of cookie->output. */
5291     switch (n_outputs) {
5292     case 0:
5293         /* 0x40000000 | 256 means "packet dropped for unknown reason". */
5294         cookie->sflow.output = 0x40000000 | 256;
5295         break;
5296
5297     case 1:
5298         ifindex = dpif_sflow_odp_port_to_ifindex(ofproto->sflow, odp_port);
5299         if (ifindex) {
5300             cookie->sflow.output = ifindex;
5301             break;
5302         }
5303         /* Fall through. */
5304     default:
5305         /* 0x80000000 means "multiple output ports. */
5306         cookie->sflow.output = 0x80000000 | n_outputs;
5307         break;
5308     }
5309 }
5310
5311 /* Compose SAMPLE action for sFlow. */
5312 static size_t
5313 compose_sflow_action(const struct ofproto_dpif *ofproto,
5314                      struct ofpbuf *odp_actions,
5315                      const struct flow *flow,
5316                      uint32_t odp_port)
5317 {
5318     uint32_t probability;
5319     union user_action_cookie cookie;
5320     size_t sample_offset, actions_offset;
5321     int cookie_offset;
5322
5323     if (!ofproto->sflow || flow->in_port == OFPP_NONE) {
5324         return 0;
5325     }
5326
5327     sample_offset = nl_msg_start_nested(odp_actions, OVS_ACTION_ATTR_SAMPLE);
5328
5329     /* Number of packets out of UINT_MAX to sample. */
5330     probability = dpif_sflow_get_probability(ofproto->sflow);
5331     nl_msg_put_u32(odp_actions, OVS_SAMPLE_ATTR_PROBABILITY, probability);
5332
5333     actions_offset = nl_msg_start_nested(odp_actions, OVS_SAMPLE_ATTR_ACTIONS);
5334     compose_sflow_cookie(ofproto, htons(0), odp_port,
5335                          odp_port == OVSP_NONE ? 0 : 1, &cookie);
5336     cookie_offset = put_userspace_action(ofproto, odp_actions, flow, &cookie);
5337
5338     nl_msg_end_nested(odp_actions, actions_offset);
5339     nl_msg_end_nested(odp_actions, sample_offset);
5340     return cookie_offset;
5341 }
5342
5343 /* SAMPLE action must be first action in any given list of actions.
5344  * At this point we do not have all information required to build it. So try to
5345  * build sample action as complete as possible. */
5346 static void
5347 add_sflow_action(struct action_xlate_ctx *ctx)
5348 {
5349     ctx->user_cookie_offset = compose_sflow_action(ctx->ofproto,
5350                                                    ctx->odp_actions,
5351                                                    &ctx->flow, OVSP_NONE);
5352     ctx->sflow_odp_port = 0;
5353     ctx->sflow_n_outputs = 0;
5354 }
5355
5356 /* Fix SAMPLE action according to data collected while composing ODP actions.
5357  * We need to fix SAMPLE actions OVS_SAMPLE_ATTR_ACTIONS attribute, i.e. nested
5358  * USERSPACE action's user-cookie which is required for sflow. */
5359 static void
5360 fix_sflow_action(struct action_xlate_ctx *ctx)
5361 {
5362     const struct flow *base = &ctx->base_flow;
5363     union user_action_cookie *cookie;
5364
5365     if (!ctx->user_cookie_offset) {
5366         return;
5367     }
5368
5369     cookie = ofpbuf_at(ctx->odp_actions, ctx->user_cookie_offset,
5370                        sizeof(*cookie));
5371     assert(cookie->type == USER_ACTION_COOKIE_SFLOW);
5372
5373     compose_sflow_cookie(ctx->ofproto, base->vlan_tci,
5374                          ctx->sflow_odp_port, ctx->sflow_n_outputs, cookie);
5375 }
5376
5377 static void
5378 compose_output_action__(struct action_xlate_ctx *ctx, uint16_t ofp_port,
5379                         bool check_stp)
5380 {
5381     const struct ofport_dpif *ofport = get_ofp_port(ctx->ofproto, ofp_port);
5382     uint32_t odp_port = ofp_port_to_odp_port(ctx->ofproto, ofp_port);
5383     ovs_be16 flow_vlan_tci = ctx->flow.vlan_tci;
5384     uint8_t flow_nw_tos = ctx->flow.nw_tos;
5385     uint16_t out_port;
5386
5387     if (ofport) {
5388         struct priority_to_dscp *pdscp;
5389
5390         if (ofport->up.pp.config & OFPUTIL_PC_NO_FWD) {
5391             xlate_report(ctx, "OFPPC_NO_FWD set, skipping output");
5392             return;
5393         } else if (check_stp && !stp_forward_in_state(ofport->stp_state)) {
5394             xlate_report(ctx, "STP not in forwarding state, skipping output");
5395             return;
5396         }
5397
5398         pdscp = get_priority(ofport, ctx->flow.skb_priority);
5399         if (pdscp) {
5400             ctx->flow.nw_tos &= ~IP_DSCP_MASK;
5401             ctx->flow.nw_tos |= pdscp->dscp;
5402         }
5403     } else {
5404         /* We may not have an ofport record for this port, but it doesn't hurt
5405          * to allow forwarding to it anyhow.  Maybe such a port will appear
5406          * later and we're pre-populating the flow table.  */
5407     }
5408
5409     out_port = vsp_realdev_to_vlandev(ctx->ofproto, odp_port,
5410                                       ctx->flow.vlan_tci);
5411     if (out_port != odp_port) {
5412         ctx->flow.vlan_tci = htons(0);
5413     }
5414     commit_odp_actions(&ctx->flow, &ctx->base_flow, ctx->odp_actions);
5415     nl_msg_put_u32(ctx->odp_actions, OVS_ACTION_ATTR_OUTPUT, out_port);
5416
5417     ctx->sflow_odp_port = odp_port;
5418     ctx->sflow_n_outputs++;
5419     ctx->nf_output_iface = ofp_port;
5420     ctx->flow.vlan_tci = flow_vlan_tci;
5421     ctx->flow.nw_tos = flow_nw_tos;
5422 }
5423
5424 static void
5425 compose_output_action(struct action_xlate_ctx *ctx, uint16_t ofp_port)
5426 {
5427     compose_output_action__(ctx, ofp_port, true);
5428 }
5429
5430 static void
5431 xlate_table_action(struct action_xlate_ctx *ctx,
5432                    uint16_t in_port, uint8_t table_id, bool may_packet_in)
5433 {
5434     if (ctx->recurse < MAX_RESUBMIT_RECURSION) {
5435         struct ofproto_dpif *ofproto = ctx->ofproto;
5436         struct rule_dpif *rule;
5437         uint16_t old_in_port;
5438         uint8_t old_table_id;
5439
5440         old_table_id = ctx->table_id;
5441         ctx->table_id = table_id;
5442
5443         /* Look up a flow with 'in_port' as the input port. */
5444         old_in_port = ctx->flow.in_port;
5445         ctx->flow.in_port = in_port;
5446         rule = rule_dpif_lookup__(ofproto, &ctx->flow, table_id);
5447
5448         /* Tag the flow. */
5449         if (table_id > 0 && table_id < N_TABLES) {
5450             struct table_dpif *table = &ofproto->tables[table_id];
5451             if (table->other_table) {
5452                 ctx->tags |= (rule && rule->tag
5453                               ? rule->tag
5454                               : rule_calculate_tag(&ctx->flow,
5455                                                    &table->other_table->mask,
5456                                                    table->basis));
5457             }
5458         }
5459
5460         /* Restore the original input port.  Otherwise OFPP_NORMAL and
5461          * OFPP_IN_PORT will have surprising behavior. */
5462         ctx->flow.in_port = old_in_port;
5463
5464         if (ctx->resubmit_hook) {
5465             ctx->resubmit_hook(ctx, rule);
5466         }
5467
5468         if (rule == NULL && may_packet_in) {
5469             /* TODO:XXX
5470              * check if table configuration flags
5471              * OFPTC_TABLE_MISS_CONTROLLER, default.
5472              * OFPTC_TABLE_MISS_CONTINUE,
5473              * OFPTC_TABLE_MISS_DROP
5474              * When OF1.0, OFPTC_TABLE_MISS_CONTINUE is used. What to do?
5475              */
5476             rule = rule_dpif_miss_rule(ofproto, &ctx->flow);
5477         }
5478
5479         if (rule) {
5480             struct rule_dpif *old_rule = ctx->rule;
5481
5482             if (ctx->resubmit_stats) {
5483                 rule_credit_stats(rule, ctx->resubmit_stats);
5484             }
5485
5486             ctx->recurse++;
5487             ctx->rule = rule;
5488             do_xlate_actions(rule->up.ofpacts, rule->up.ofpacts_len, ctx);
5489             ctx->rule = old_rule;
5490             ctx->recurse--;
5491         }
5492
5493         ctx->table_id = old_table_id;
5494     } else {
5495         static struct vlog_rate_limit recurse_rl = VLOG_RATE_LIMIT_INIT(1, 1);
5496
5497         VLOG_ERR_RL(&recurse_rl, "resubmit actions recursed over %d times",
5498                     MAX_RESUBMIT_RECURSION);
5499         ctx->max_resubmit_trigger = true;
5500     }
5501 }
5502
5503 static void
5504 xlate_ofpact_resubmit(struct action_xlate_ctx *ctx,
5505                       const struct ofpact_resubmit *resubmit)
5506 {
5507     uint16_t in_port;
5508     uint8_t table_id;
5509
5510     in_port = resubmit->in_port;
5511     if (in_port == OFPP_IN_PORT) {
5512         in_port = ctx->flow.in_port;
5513     }
5514
5515     table_id = resubmit->table_id;
5516     if (table_id == 255) {
5517         table_id = ctx->table_id;
5518     }
5519
5520     xlate_table_action(ctx, in_port, table_id, false);
5521 }
5522
5523 static void
5524 flood_packets(struct action_xlate_ctx *ctx, bool all)
5525 {
5526     struct ofport_dpif *ofport;
5527
5528     HMAP_FOR_EACH (ofport, up.hmap_node, &ctx->ofproto->up.ports) {
5529         uint16_t ofp_port = ofport->up.ofp_port;
5530
5531         if (ofp_port == ctx->flow.in_port) {
5532             continue;
5533         }
5534
5535         if (all) {
5536             compose_output_action__(ctx, ofp_port, false);
5537         } else if (!(ofport->up.pp.config & OFPUTIL_PC_NO_FLOOD)) {
5538             compose_output_action(ctx, ofp_port);
5539         }
5540     }
5541
5542     ctx->nf_output_iface = NF_OUT_FLOOD;
5543 }
5544
5545 static void
5546 execute_controller_action(struct action_xlate_ctx *ctx, int len,
5547                           enum ofp_packet_in_reason reason,
5548                           uint16_t controller_id)
5549 {
5550     struct ofputil_packet_in pin;
5551     struct ofpbuf *packet;
5552
5553     ctx->slow |= SLOW_CONTROLLER;
5554     if (!ctx->packet) {
5555         return;
5556     }
5557
5558     packet = ofpbuf_clone(ctx->packet);
5559
5560     if (packet->l2 && packet->l3) {
5561         struct eth_header *eh;
5562
5563         eth_pop_vlan(packet);
5564         eh = packet->l2;
5565
5566         /* If the Ethernet type is less than ETH_TYPE_MIN, it's likely an 802.2
5567          * LLC frame.  Calculating the Ethernet type of these frames is more
5568          * trouble than seems appropriate for a simple assertion. */
5569         assert(ntohs(eh->eth_type) < ETH_TYPE_MIN
5570                || eh->eth_type == ctx->flow.dl_type);
5571
5572         memcpy(eh->eth_src, ctx->flow.dl_src, sizeof eh->eth_src);
5573         memcpy(eh->eth_dst, ctx->flow.dl_dst, sizeof eh->eth_dst);
5574
5575         if (ctx->flow.vlan_tci & htons(VLAN_CFI)) {
5576             eth_push_vlan(packet, ctx->flow.vlan_tci);
5577         }
5578
5579         if (packet->l4) {
5580             if (ctx->flow.dl_type == htons(ETH_TYPE_IP)) {
5581                 packet_set_ipv4(packet, ctx->flow.nw_src, ctx->flow.nw_dst,
5582                                 ctx->flow.nw_tos, ctx->flow.nw_ttl);
5583             }
5584
5585             if (packet->l7) {
5586                 if (ctx->flow.nw_proto == IPPROTO_TCP) {
5587                     packet_set_tcp_port(packet, ctx->flow.tp_src,
5588                                         ctx->flow.tp_dst);
5589                 } else if (ctx->flow.nw_proto == IPPROTO_UDP) {
5590                     packet_set_udp_port(packet, ctx->flow.tp_src,
5591                                         ctx->flow.tp_dst);
5592                 }
5593             }
5594         }
5595     }
5596
5597     pin.packet = packet->data;
5598     pin.packet_len = packet->size;
5599     pin.reason = reason;
5600     pin.controller_id = controller_id;
5601     pin.table_id = ctx->table_id;
5602     pin.cookie = ctx->rule ? ctx->rule->up.flow_cookie : 0;
5603
5604     pin.send_len = len;
5605     flow_get_metadata(&ctx->flow, &pin.fmd);
5606
5607     connmgr_send_packet_in(ctx->ofproto->up.connmgr, &pin);
5608     ofpbuf_delete(packet);
5609 }
5610
5611 static bool
5612 compose_dec_ttl(struct action_xlate_ctx *ctx, struct ofpact_cnt_ids *ids)
5613 {
5614     if (ctx->flow.dl_type != htons(ETH_TYPE_IP) &&
5615         ctx->flow.dl_type != htons(ETH_TYPE_IPV6)) {
5616         return false;
5617     }
5618
5619     if (ctx->flow.nw_ttl > 1) {
5620         ctx->flow.nw_ttl--;
5621         return false;
5622     } else {
5623         size_t i;
5624
5625         for (i = 0; i < ids->n_controllers; i++) {
5626             execute_controller_action(ctx, UINT16_MAX, OFPR_INVALID_TTL,
5627                                       ids->cnt_ids[i]);
5628         }
5629
5630         /* Stop processing for current table. */
5631         return true;
5632     }
5633 }
5634
5635 static void
5636 xlate_output_action(struct action_xlate_ctx *ctx,
5637                     uint16_t port, uint16_t max_len, bool may_packet_in)
5638 {
5639     uint16_t prev_nf_output_iface = ctx->nf_output_iface;
5640
5641     ctx->nf_output_iface = NF_OUT_DROP;
5642
5643     switch (port) {
5644     case OFPP_IN_PORT:
5645         compose_output_action(ctx, ctx->flow.in_port);
5646         break;
5647     case OFPP_TABLE:
5648         xlate_table_action(ctx, ctx->flow.in_port, 0, may_packet_in);
5649         break;
5650     case OFPP_NORMAL:
5651         xlate_normal(ctx);
5652         break;
5653     case OFPP_FLOOD:
5654         flood_packets(ctx,  false);
5655         break;
5656     case OFPP_ALL:
5657         flood_packets(ctx, true);
5658         break;
5659     case OFPP_CONTROLLER:
5660         execute_controller_action(ctx, max_len, OFPR_ACTION, 0);
5661         break;
5662     case OFPP_NONE:
5663         break;
5664     case OFPP_LOCAL:
5665     default:
5666         if (port != ctx->flow.in_port) {
5667             compose_output_action(ctx, port);
5668         } else {
5669             xlate_report(ctx, "skipping output to input port");
5670         }
5671         break;
5672     }
5673
5674     if (prev_nf_output_iface == NF_OUT_FLOOD) {
5675         ctx->nf_output_iface = NF_OUT_FLOOD;
5676     } else if (ctx->nf_output_iface == NF_OUT_DROP) {
5677         ctx->nf_output_iface = prev_nf_output_iface;
5678     } else if (prev_nf_output_iface != NF_OUT_DROP &&
5679                ctx->nf_output_iface != NF_OUT_FLOOD) {
5680         ctx->nf_output_iface = NF_OUT_MULTI;
5681     }
5682 }
5683
5684 static void
5685 xlate_output_reg_action(struct action_xlate_ctx *ctx,
5686                         const struct ofpact_output_reg *or)
5687 {
5688     uint64_t port = mf_get_subfield(&or->src, &ctx->flow);
5689     if (port <= UINT16_MAX) {
5690         xlate_output_action(ctx, port, or->max_len, false);
5691     }
5692 }
5693
5694 static void
5695 xlate_enqueue_action(struct action_xlate_ctx *ctx,
5696                      const struct ofpact_enqueue *enqueue)
5697 {
5698     uint16_t ofp_port = enqueue->port;
5699     uint32_t queue_id = enqueue->queue;
5700     uint32_t flow_priority, priority;
5701     int error;
5702
5703     /* Translate queue to priority. */
5704     error = dpif_queue_to_priority(ctx->ofproto->backer->dpif,
5705                                    queue_id, &priority);
5706     if (error) {
5707         /* Fall back to ordinary output action. */
5708         xlate_output_action(ctx, enqueue->port, 0, false);
5709         return;
5710     }
5711
5712     /* Check output port. */
5713     if (ofp_port == OFPP_IN_PORT) {
5714         ofp_port = ctx->flow.in_port;
5715     } else if (ofp_port == ctx->flow.in_port) {
5716         return;
5717     }
5718
5719     /* Add datapath actions. */
5720     flow_priority = ctx->flow.skb_priority;
5721     ctx->flow.skb_priority = priority;
5722     compose_output_action(ctx, ofp_port);
5723     ctx->flow.skb_priority = flow_priority;
5724
5725     /* Update NetFlow output port. */
5726     if (ctx->nf_output_iface == NF_OUT_DROP) {
5727         ctx->nf_output_iface = ofp_port;
5728     } else if (ctx->nf_output_iface != NF_OUT_FLOOD) {
5729         ctx->nf_output_iface = NF_OUT_MULTI;
5730     }
5731 }
5732
5733 static void
5734 xlate_set_queue_action(struct action_xlate_ctx *ctx, uint32_t queue_id)
5735 {
5736     uint32_t skb_priority;
5737
5738     if (!dpif_queue_to_priority(ctx->ofproto->backer->dpif,
5739                                 queue_id, &skb_priority)) {
5740         ctx->flow.skb_priority = skb_priority;
5741     } else {
5742         /* Couldn't translate queue to a priority.  Nothing to do.  A warning
5743          * has already been logged. */
5744     }
5745 }
5746
5747 struct xlate_reg_state {
5748     ovs_be16 vlan_tci;
5749     ovs_be64 tun_id;
5750 };
5751
5752 static void
5753 xlate_autopath(struct action_xlate_ctx *ctx,
5754                const struct ofpact_autopath *ap)
5755 {
5756     uint16_t ofp_port = ap->port;
5757     struct ofport_dpif *port = get_ofp_port(ctx->ofproto, ofp_port);
5758
5759     if (!port || !port->bundle) {
5760         ofp_port = OFPP_NONE;
5761     } else if (port->bundle->bond) {
5762         /* Autopath does not support VLAN hashing. */
5763         struct ofport_dpif *slave = bond_choose_output_slave(
5764             port->bundle->bond, &ctx->flow, 0, &ctx->tags);
5765         if (slave) {
5766             ofp_port = slave->up.ofp_port;
5767         }
5768     }
5769     nxm_reg_load(&ap->dst, ofp_port, &ctx->flow);
5770 }
5771
5772 static bool
5773 slave_enabled_cb(uint16_t ofp_port, void *ofproto_)
5774 {
5775     struct ofproto_dpif *ofproto = ofproto_;
5776     struct ofport_dpif *port;
5777
5778     switch (ofp_port) {
5779     case OFPP_IN_PORT:
5780     case OFPP_TABLE:
5781     case OFPP_NORMAL:
5782     case OFPP_FLOOD:
5783     case OFPP_ALL:
5784     case OFPP_NONE:
5785         return true;
5786     case OFPP_CONTROLLER: /* Not supported by the bundle action. */
5787         return false;
5788     default:
5789         port = get_ofp_port(ofproto, ofp_port);
5790         return port ? port->may_enable : false;
5791     }
5792 }
5793
5794 static void
5795 xlate_bundle_action(struct action_xlate_ctx *ctx,
5796                     const struct ofpact_bundle *bundle)
5797 {
5798     uint16_t port;
5799
5800     port = bundle_execute(bundle, &ctx->flow, slave_enabled_cb, ctx->ofproto);
5801     if (bundle->dst.field) {
5802         nxm_reg_load(&bundle->dst, port, &ctx->flow);
5803     } else {
5804         xlate_output_action(ctx, port, 0, false);
5805     }
5806 }
5807
5808 static void
5809 xlate_learn_action(struct action_xlate_ctx *ctx,
5810                    const struct ofpact_learn *learn)
5811 {
5812     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1);
5813     struct ofputil_flow_mod fm;
5814     uint64_t ofpacts_stub[1024 / 8];
5815     struct ofpbuf ofpacts;
5816     int error;
5817
5818     ofpbuf_use_stack(&ofpacts, ofpacts_stub, sizeof ofpacts_stub);
5819     learn_execute(learn, &ctx->flow, &fm, &ofpacts);
5820
5821     error = ofproto_flow_mod(&ctx->ofproto->up, &fm);
5822     if (error && !VLOG_DROP_WARN(&rl)) {
5823         VLOG_WARN("learning action failed to modify flow table (%s)",
5824                   ofperr_get_name(error));
5825     }
5826
5827     ofpbuf_uninit(&ofpacts);
5828 }
5829
5830 /* Reduces '*timeout' to no more than 'max'.  A value of zero in either case
5831  * means "infinite". */
5832 static void
5833 reduce_timeout(uint16_t max, uint16_t *timeout)
5834 {
5835     if (max && (!*timeout || *timeout > max)) {
5836         *timeout = max;
5837     }
5838 }
5839
5840 static void
5841 xlate_fin_timeout(struct action_xlate_ctx *ctx,
5842                   const struct ofpact_fin_timeout *oft)
5843 {
5844     if (ctx->tcp_flags & (TCP_FIN | TCP_RST) && ctx->rule) {
5845         struct rule_dpif *rule = ctx->rule;
5846
5847         reduce_timeout(oft->fin_idle_timeout, &rule->up.idle_timeout);
5848         reduce_timeout(oft->fin_hard_timeout, &rule->up.hard_timeout);
5849     }
5850 }
5851
5852 static bool
5853 may_receive(const struct ofport_dpif *port, struct action_xlate_ctx *ctx)
5854 {
5855     if (port->up.pp.config & (eth_addr_equals(ctx->flow.dl_dst, eth_addr_stp)
5856                               ? OFPUTIL_PC_NO_RECV_STP
5857                               : OFPUTIL_PC_NO_RECV)) {
5858         return false;
5859     }
5860
5861     /* Only drop packets here if both forwarding and learning are
5862      * disabled.  If just learning is enabled, we need to have
5863      * OFPP_NORMAL and the learning action have a look at the packet
5864      * before we can drop it. */
5865     if (!stp_forward_in_state(port->stp_state)
5866             && !stp_learn_in_state(port->stp_state)) {
5867         return false;
5868     }
5869
5870     return true;
5871 }
5872
5873 static void
5874 do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
5875                  struct action_xlate_ctx *ctx)
5876 {
5877     const struct ofport_dpif *port;
5878     bool was_evictable = true;
5879     const struct ofpact *a;
5880
5881     port = get_ofp_port(ctx->ofproto, ctx->flow.in_port);
5882     if (port && !may_receive(port, ctx)) {
5883         /* Drop this flow. */
5884         return;
5885     }
5886
5887     if (ctx->rule) {
5888         /* Don't let the rule we're working on get evicted underneath us. */
5889         was_evictable = ctx->rule->up.evictable;
5890         ctx->rule->up.evictable = false;
5891     }
5892     OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
5893         struct ofpact_controller *controller;
5894         const struct ofpact_metadata *metadata;
5895
5896         if (ctx->exit) {
5897             break;
5898         }
5899
5900         switch (a->type) {
5901         case OFPACT_OUTPUT:
5902             xlate_output_action(ctx, ofpact_get_OUTPUT(a)->port,
5903                                 ofpact_get_OUTPUT(a)->max_len, true);
5904             break;
5905
5906         case OFPACT_CONTROLLER:
5907             controller = ofpact_get_CONTROLLER(a);
5908             execute_controller_action(ctx, controller->max_len,
5909                                       controller->reason,
5910                                       controller->controller_id);
5911             break;
5912
5913         case OFPACT_ENQUEUE:
5914             xlate_enqueue_action(ctx, ofpact_get_ENQUEUE(a));
5915             break;
5916
5917         case OFPACT_SET_VLAN_VID:
5918             ctx->flow.vlan_tci &= ~htons(VLAN_VID_MASK);
5919             ctx->flow.vlan_tci |= (htons(ofpact_get_SET_VLAN_VID(a)->vlan_vid)
5920                                    | htons(VLAN_CFI));
5921             break;
5922
5923         case OFPACT_SET_VLAN_PCP:
5924             ctx->flow.vlan_tci &= ~htons(VLAN_PCP_MASK);
5925             ctx->flow.vlan_tci |= htons((ofpact_get_SET_VLAN_PCP(a)->vlan_pcp
5926                                          << VLAN_PCP_SHIFT)
5927                                         | VLAN_CFI);
5928             break;
5929
5930         case OFPACT_STRIP_VLAN:
5931             ctx->flow.vlan_tci = htons(0);
5932             break;
5933
5934         case OFPACT_PUSH_VLAN:
5935             /* TODO:XXX 802.1AD(QinQ) */
5936             ctx->flow.vlan_tci = htons(VLAN_CFI);
5937             break;
5938
5939         case OFPACT_SET_ETH_SRC:
5940             memcpy(ctx->flow.dl_src, ofpact_get_SET_ETH_SRC(a)->mac,
5941                    ETH_ADDR_LEN);
5942             break;
5943
5944         case OFPACT_SET_ETH_DST:
5945             memcpy(ctx->flow.dl_dst, ofpact_get_SET_ETH_DST(a)->mac,
5946                    ETH_ADDR_LEN);
5947             break;
5948
5949         case OFPACT_SET_IPV4_SRC:
5950             ctx->flow.nw_src = ofpact_get_SET_IPV4_SRC(a)->ipv4;
5951             break;
5952
5953         case OFPACT_SET_IPV4_DST:
5954             ctx->flow.nw_dst = ofpact_get_SET_IPV4_DST(a)->ipv4;
5955             break;
5956
5957         case OFPACT_SET_IPV4_DSCP:
5958             /* OpenFlow 1.0 only supports IPv4. */
5959             if (ctx->flow.dl_type == htons(ETH_TYPE_IP)) {
5960                 ctx->flow.nw_tos &= ~IP_DSCP_MASK;
5961                 ctx->flow.nw_tos |= ofpact_get_SET_IPV4_DSCP(a)->dscp;
5962             }
5963             break;
5964
5965         case OFPACT_SET_L4_SRC_PORT:
5966             ctx->flow.tp_src = htons(ofpact_get_SET_L4_SRC_PORT(a)->port);
5967             break;
5968
5969         case OFPACT_SET_L4_DST_PORT:
5970             ctx->flow.tp_dst = htons(ofpact_get_SET_L4_DST_PORT(a)->port);
5971             break;
5972
5973         case OFPACT_RESUBMIT:
5974             xlate_ofpact_resubmit(ctx, ofpact_get_RESUBMIT(a));
5975             break;
5976
5977         case OFPACT_SET_TUNNEL:
5978             ctx->flow.tunnel.tun_id = htonll(ofpact_get_SET_TUNNEL(a)->tun_id);
5979             break;
5980
5981         case OFPACT_SET_QUEUE:
5982             xlate_set_queue_action(ctx, ofpact_get_SET_QUEUE(a)->queue_id);
5983             break;
5984
5985         case OFPACT_POP_QUEUE:
5986             ctx->flow.skb_priority = ctx->orig_skb_priority;
5987             break;
5988
5989         case OFPACT_REG_MOVE:
5990             nxm_execute_reg_move(ofpact_get_REG_MOVE(a), &ctx->flow);
5991             break;
5992
5993         case OFPACT_REG_LOAD:
5994             nxm_execute_reg_load(ofpact_get_REG_LOAD(a), &ctx->flow);
5995             break;
5996
5997         case OFPACT_DEC_TTL:
5998             if (compose_dec_ttl(ctx, ofpact_get_DEC_TTL(a))) {
5999                 goto out;
6000             }
6001             break;
6002
6003         case OFPACT_NOTE:
6004             /* Nothing to do. */
6005             break;
6006
6007         case OFPACT_MULTIPATH:
6008             multipath_execute(ofpact_get_MULTIPATH(a), &ctx->flow);
6009             break;
6010
6011         case OFPACT_AUTOPATH:
6012             xlate_autopath(ctx, ofpact_get_AUTOPATH(a));
6013             break;
6014
6015         case OFPACT_BUNDLE:
6016             ctx->ofproto->has_bundle_action = true;
6017             xlate_bundle_action(ctx, ofpact_get_BUNDLE(a));
6018             break;
6019
6020         case OFPACT_OUTPUT_REG:
6021             xlate_output_reg_action(ctx, ofpact_get_OUTPUT_REG(a));
6022             break;
6023
6024         case OFPACT_LEARN:
6025             ctx->has_learn = true;
6026             if (ctx->may_learn) {
6027                 xlate_learn_action(ctx, ofpact_get_LEARN(a));
6028             }
6029             break;
6030
6031         case OFPACT_EXIT:
6032             ctx->exit = true;
6033             break;
6034
6035         case OFPACT_FIN_TIMEOUT:
6036             ctx->has_fin_timeout = true;
6037             xlate_fin_timeout(ctx, ofpact_get_FIN_TIMEOUT(a));
6038             break;
6039
6040         case OFPACT_CLEAR_ACTIONS:
6041             /* TODO:XXX
6042              * Nothing to do because writa-actions is not supported for now.
6043              * When writa-actions is supported, clear-actions also must
6044              * be supported at the same time.
6045              */
6046             break;
6047
6048         case OFPACT_WRITE_METADATA:
6049             metadata = ofpact_get_WRITE_METADATA(a);
6050             ctx->flow.metadata &= ~metadata->mask;
6051             ctx->flow.metadata |= metadata->metadata & metadata->mask;
6052             break;
6053
6054         case OFPACT_GOTO_TABLE: {
6055             /* TODO:XXX remove recursion */
6056             /* It is assumed that goto-table is last action */
6057             struct ofpact_goto_table *ogt = ofpact_get_GOTO_TABLE(a);
6058             assert(ctx->table_id < ogt->table_id);
6059             xlate_table_action(ctx, ctx->flow.in_port, ogt->table_id, true);
6060             break;
6061         }
6062         }
6063     }
6064
6065 out:
6066     /* We've let OFPP_NORMAL and the learning action look at the packet,
6067      * so drop it now if forwarding is disabled. */
6068     if (port && !stp_forward_in_state(port->stp_state)) {
6069         ofpbuf_clear(ctx->odp_actions);
6070         add_sflow_action(ctx);
6071     }
6072     if (ctx->rule) {
6073         ctx->rule->up.evictable = was_evictable;
6074     }
6075 }
6076
6077 static void
6078 action_xlate_ctx_init(struct action_xlate_ctx *ctx,
6079                       struct ofproto_dpif *ofproto, const struct flow *flow,
6080                       ovs_be16 initial_tci, struct rule_dpif *rule,
6081                       uint8_t tcp_flags, const struct ofpbuf *packet)
6082 {
6083     ctx->ofproto = ofproto;
6084     ctx->flow = *flow;
6085     ctx->base_flow = ctx->flow;
6086     memset(&ctx->base_flow.tunnel, 0, sizeof ctx->base_flow.tunnel);
6087     ctx->base_flow.vlan_tci = initial_tci;
6088     ctx->rule = rule;
6089     ctx->packet = packet;
6090     ctx->may_learn = packet != NULL;
6091     ctx->tcp_flags = tcp_flags;
6092     ctx->resubmit_hook = NULL;
6093     ctx->report_hook = NULL;
6094     ctx->resubmit_stats = NULL;
6095 }
6096
6097 /* Translates the 'ofpacts_len' bytes of "struct ofpacts" starting at 'ofpacts'
6098  * into datapath actions in 'odp_actions', using 'ctx'. */
6099 static void
6100 xlate_actions(struct action_xlate_ctx *ctx,
6101               const struct ofpact *ofpacts, size_t ofpacts_len,
6102               struct ofpbuf *odp_actions)
6103 {
6104     /* Normally false.  Set to true if we ever hit MAX_RESUBMIT_RECURSION, so
6105      * that in the future we always keep a copy of the original flow for
6106      * tracing purposes. */
6107     static bool hit_resubmit_limit;
6108
6109     enum slow_path_reason special;
6110
6111     COVERAGE_INC(ofproto_dpif_xlate);
6112
6113     ofpbuf_clear(odp_actions);
6114     ofpbuf_reserve(odp_actions, NL_A_U32_SIZE);
6115
6116     ctx->odp_actions = odp_actions;
6117     ctx->tags = 0;
6118     ctx->slow = 0;
6119     ctx->has_learn = false;
6120     ctx->has_normal = false;
6121     ctx->has_fin_timeout = false;
6122     ctx->nf_output_iface = NF_OUT_DROP;
6123     ctx->mirrors = 0;
6124     ctx->recurse = 0;
6125     ctx->max_resubmit_trigger = false;
6126     ctx->orig_skb_priority = ctx->flow.skb_priority;
6127     ctx->table_id = 0;
6128     ctx->exit = false;
6129
6130     if (ctx->ofproto->has_mirrors || hit_resubmit_limit) {
6131         /* Do this conditionally because the copy is expensive enough that it
6132          * shows up in profiles.
6133          *
6134          * We keep orig_flow in 'ctx' only because I couldn't make GCC 4.4
6135          * believe that I wasn't using it without initializing it if I kept it
6136          * in a local variable. */
6137         ctx->orig_flow = ctx->flow;
6138     }
6139
6140     if (ctx->flow.nw_frag & FLOW_NW_FRAG_ANY) {
6141         switch (ctx->ofproto->up.frag_handling) {
6142         case OFPC_FRAG_NORMAL:
6143             /* We must pretend that transport ports are unavailable. */
6144             ctx->flow.tp_src = ctx->base_flow.tp_src = htons(0);
6145             ctx->flow.tp_dst = ctx->base_flow.tp_dst = htons(0);
6146             break;
6147
6148         case OFPC_FRAG_DROP:
6149             return;
6150
6151         case OFPC_FRAG_REASM:
6152             NOT_REACHED();
6153
6154         case OFPC_FRAG_NX_MATCH:
6155             /* Nothing to do. */
6156             break;
6157
6158         case OFPC_INVALID_TTL_TO_CONTROLLER:
6159             NOT_REACHED();
6160         }
6161     }
6162
6163     special = process_special(ctx->ofproto, &ctx->flow, ctx->packet);
6164     if (special) {
6165         ctx->slow |= special;
6166     } else {
6167         static struct vlog_rate_limit trace_rl = VLOG_RATE_LIMIT_INIT(1, 1);
6168         ovs_be16 initial_tci = ctx->base_flow.vlan_tci;
6169
6170         add_sflow_action(ctx);
6171         do_xlate_actions(ofpacts, ofpacts_len, ctx);
6172
6173         if (ctx->max_resubmit_trigger && !ctx->resubmit_hook) {
6174             if (!hit_resubmit_limit) {
6175                 /* We didn't record the original flow.  Make sure we do from
6176                  * now on. */
6177                 hit_resubmit_limit = true;
6178             } else if (!VLOG_DROP_ERR(&trace_rl)) {
6179                 struct ds ds = DS_EMPTY_INITIALIZER;
6180
6181                 ofproto_trace(ctx->ofproto, &ctx->orig_flow, ctx->packet,
6182                               initial_tci, &ds);
6183                 VLOG_ERR("Trace triggered by excessive resubmit "
6184                          "recursion:\n%s", ds_cstr(&ds));
6185                 ds_destroy(&ds);
6186             }
6187         }
6188
6189         if (!connmgr_may_set_up_flow(ctx->ofproto->up.connmgr, &ctx->flow,
6190                                      ctx->odp_actions->data,
6191                                      ctx->odp_actions->size)) {
6192             ctx->slow |= SLOW_IN_BAND;
6193             if (ctx->packet
6194                 && connmgr_msg_in_hook(ctx->ofproto->up.connmgr, &ctx->flow,
6195                                        ctx->packet)) {
6196                 compose_output_action(ctx, OFPP_LOCAL);
6197             }
6198         }
6199         if (ctx->ofproto->has_mirrors) {
6200             add_mirror_actions(ctx, &ctx->orig_flow);
6201         }
6202         fix_sflow_action(ctx);
6203     }
6204 }
6205
6206 /* Translates the 'ofpacts_len' bytes of "struct ofpact"s starting at 'ofpacts'
6207  * into datapath actions, using 'ctx', and discards the datapath actions. */
6208 static void
6209 xlate_actions_for_side_effects(struct action_xlate_ctx *ctx,
6210                                const struct ofpact *ofpacts,
6211                                size_t ofpacts_len)
6212 {
6213     uint64_t odp_actions_stub[1024 / 8];
6214     struct ofpbuf odp_actions;
6215
6216     ofpbuf_use_stub(&odp_actions, odp_actions_stub, sizeof odp_actions_stub);
6217     xlate_actions(ctx, ofpacts, ofpacts_len, &odp_actions);
6218     ofpbuf_uninit(&odp_actions);
6219 }
6220
6221 static void
6222 xlate_report(struct action_xlate_ctx *ctx, const char *s)
6223 {
6224     if (ctx->report_hook) {
6225         ctx->report_hook(ctx, s);
6226     }
6227 }
6228 \f
6229 /* OFPP_NORMAL implementation. */
6230
6231 static struct ofport_dpif *ofbundle_get_a_port(const struct ofbundle *);
6232
6233 /* Given 'vid', the VID obtained from the 802.1Q header that was received as
6234  * part of a packet (specify 0 if there was no 802.1Q header), and 'in_bundle',
6235  * the bundle on which the packet was received, returns the VLAN to which the
6236  * packet belongs.
6237  *
6238  * Both 'vid' and the return value are in the range 0...4095. */
6239 static uint16_t
6240 input_vid_to_vlan(const struct ofbundle *in_bundle, uint16_t vid)
6241 {
6242     switch (in_bundle->vlan_mode) {
6243     case PORT_VLAN_ACCESS:
6244         return in_bundle->vlan;
6245         break;
6246
6247     case PORT_VLAN_TRUNK:
6248         return vid;
6249
6250     case PORT_VLAN_NATIVE_UNTAGGED:
6251     case PORT_VLAN_NATIVE_TAGGED:
6252         return vid ? vid : in_bundle->vlan;
6253
6254     default:
6255         NOT_REACHED();
6256     }
6257 }
6258
6259 /* Checks whether a packet with the given 'vid' may ingress on 'in_bundle'.
6260  * If so, returns true.  Otherwise, returns false and, if 'warn' is true, logs
6261  * a warning.
6262  *
6263  * 'vid' should be the VID obtained from the 802.1Q header that was received as
6264  * part of a packet (specify 0 if there was no 802.1Q header), in the range
6265  * 0...4095. */
6266 static bool
6267 input_vid_is_valid(uint16_t vid, struct ofbundle *in_bundle, bool warn)
6268 {
6269     /* Allow any VID on the OFPP_NONE port. */
6270     if (in_bundle == &ofpp_none_bundle) {
6271         return true;
6272     }
6273
6274     switch (in_bundle->vlan_mode) {
6275     case PORT_VLAN_ACCESS:
6276         if (vid) {
6277             if (warn) {
6278                 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
6279                 VLOG_WARN_RL(&rl, "bridge %s: dropping VLAN %"PRIu16" tagged "
6280                              "packet received on port %s configured as VLAN "
6281                              "%"PRIu16" access port",
6282                              in_bundle->ofproto->up.name, vid,
6283                              in_bundle->name, in_bundle->vlan);
6284             }
6285             return false;
6286         }
6287         return true;
6288
6289     case PORT_VLAN_NATIVE_UNTAGGED:
6290     case PORT_VLAN_NATIVE_TAGGED:
6291         if (!vid) {
6292             /* Port must always carry its native VLAN. */
6293             return true;
6294         }
6295         /* Fall through. */
6296     case PORT_VLAN_TRUNK:
6297         if (!ofbundle_includes_vlan(in_bundle, vid)) {
6298             if (warn) {
6299                 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
6300                 VLOG_WARN_RL(&rl, "bridge %s: dropping VLAN %"PRIu16" packet "
6301                              "received on port %s not configured for trunking "
6302                              "VLAN %"PRIu16,
6303                              in_bundle->ofproto->up.name, vid,
6304                              in_bundle->name, vid);
6305             }
6306             return false;
6307         }
6308         return true;
6309
6310     default:
6311         NOT_REACHED();
6312     }
6313
6314 }
6315
6316 /* Given 'vlan', the VLAN that a packet belongs to, and
6317  * 'out_bundle', a bundle on which the packet is to be output, returns the VID
6318  * that should be included in the 802.1Q header.  (If the return value is 0,
6319  * then the 802.1Q header should only be included in the packet if there is a
6320  * nonzero PCP.)
6321  *
6322  * Both 'vlan' and the return value are in the range 0...4095. */
6323 static uint16_t
6324 output_vlan_to_vid(const struct ofbundle *out_bundle, uint16_t vlan)
6325 {
6326     switch (out_bundle->vlan_mode) {
6327     case PORT_VLAN_ACCESS:
6328         return 0;
6329
6330     case PORT_VLAN_TRUNK:
6331     case PORT_VLAN_NATIVE_TAGGED:
6332         return vlan;
6333
6334     case PORT_VLAN_NATIVE_UNTAGGED:
6335         return vlan == out_bundle->vlan ? 0 : vlan;
6336
6337     default:
6338         NOT_REACHED();
6339     }
6340 }
6341
6342 static void
6343 output_normal(struct action_xlate_ctx *ctx, const struct ofbundle *out_bundle,
6344               uint16_t vlan)
6345 {
6346     struct ofport_dpif *port;
6347     uint16_t vid;
6348     ovs_be16 tci, old_tci;
6349
6350     vid = output_vlan_to_vid(out_bundle, vlan);
6351     if (!out_bundle->bond) {
6352         port = ofbundle_get_a_port(out_bundle);
6353     } else {
6354         port = bond_choose_output_slave(out_bundle->bond, &ctx->flow,
6355                                         vid, &ctx->tags);
6356         if (!port) {
6357             /* No slaves enabled, so drop packet. */
6358             return;
6359         }
6360     }
6361
6362     old_tci = ctx->flow.vlan_tci;
6363     tci = htons(vid);
6364     if (tci || out_bundle->use_priority_tags) {
6365         tci |= ctx->flow.vlan_tci & htons(VLAN_PCP_MASK);
6366         if (tci) {
6367             tci |= htons(VLAN_CFI);
6368         }
6369     }
6370     ctx->flow.vlan_tci = tci;
6371
6372     compose_output_action(ctx, port->up.ofp_port);
6373     ctx->flow.vlan_tci = old_tci;
6374 }
6375
6376 static int
6377 mirror_mask_ffs(mirror_mask_t mask)
6378 {
6379     BUILD_ASSERT_DECL(sizeof(unsigned int) >= sizeof(mask));
6380     return ffs(mask);
6381 }
6382
6383 static bool
6384 ofbundle_trunks_vlan(const struct ofbundle *bundle, uint16_t vlan)
6385 {
6386     return (bundle->vlan_mode != PORT_VLAN_ACCESS
6387             && (!bundle->trunks || bitmap_is_set(bundle->trunks, vlan)));
6388 }
6389
6390 static bool
6391 ofbundle_includes_vlan(const struct ofbundle *bundle, uint16_t vlan)
6392 {
6393     return vlan == bundle->vlan || ofbundle_trunks_vlan(bundle, vlan);
6394 }
6395
6396 /* Returns an arbitrary interface within 'bundle'. */
6397 static struct ofport_dpif *
6398 ofbundle_get_a_port(const struct ofbundle *bundle)
6399 {
6400     return CONTAINER_OF(list_front(&bundle->ports),
6401                         struct ofport_dpif, bundle_node);
6402 }
6403
6404 static bool
6405 vlan_is_mirrored(const struct ofmirror *m, int vlan)
6406 {
6407     return !m->vlans || bitmap_is_set(m->vlans, vlan);
6408 }
6409
6410 static void
6411 add_mirror_actions(struct action_xlate_ctx *ctx, const struct flow *orig_flow)
6412 {
6413     struct ofproto_dpif *ofproto = ctx->ofproto;
6414     mirror_mask_t mirrors;
6415     struct ofbundle *in_bundle;
6416     uint16_t vlan;
6417     uint16_t vid;
6418     const struct nlattr *a;
6419     size_t left;
6420
6421     in_bundle = lookup_input_bundle(ctx->ofproto, orig_flow->in_port,
6422                                     ctx->packet != NULL, NULL);
6423     if (!in_bundle) {
6424         return;
6425     }
6426     mirrors = in_bundle->src_mirrors;
6427
6428     /* Drop frames on bundles reserved for mirroring. */
6429     if (in_bundle->mirror_out) {
6430         if (ctx->packet != NULL) {
6431             static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
6432             VLOG_WARN_RL(&rl, "bridge %s: dropping packet received on port "
6433                          "%s, which is reserved exclusively for mirroring",
6434                          ctx->ofproto->up.name, in_bundle->name);
6435         }
6436         return;
6437     }
6438
6439     /* Check VLAN. */
6440     vid = vlan_tci_to_vid(orig_flow->vlan_tci);
6441     if (!input_vid_is_valid(vid, in_bundle, ctx->packet != NULL)) {
6442         return;
6443     }
6444     vlan = input_vid_to_vlan(in_bundle, vid);
6445
6446     /* Look at the output ports to check for destination selections. */
6447
6448     NL_ATTR_FOR_EACH (a, left, ctx->odp_actions->data,
6449                       ctx->odp_actions->size) {
6450         enum ovs_action_attr type = nl_attr_type(a);
6451         struct ofport_dpif *ofport;
6452
6453         if (type != OVS_ACTION_ATTR_OUTPUT) {
6454             continue;
6455         }
6456
6457         ofport = get_odp_port(ofproto, nl_attr_get_u32(a));
6458         if (ofport && ofport->bundle) {
6459             mirrors |= ofport->bundle->dst_mirrors;
6460         }
6461     }
6462
6463     if (!mirrors) {
6464         return;
6465     }
6466
6467     /* Restore the original packet before adding the mirror actions. */
6468     ctx->flow = *orig_flow;
6469
6470     while (mirrors) {
6471         struct ofmirror *m;
6472
6473         m = ofproto->mirrors[mirror_mask_ffs(mirrors) - 1];
6474
6475         if (!vlan_is_mirrored(m, vlan)) {
6476             mirrors = zero_rightmost_1bit(mirrors);
6477             continue;
6478         }
6479
6480         mirrors &= ~m->dup_mirrors;
6481         ctx->mirrors |= m->dup_mirrors;
6482         if (m->out) {
6483             output_normal(ctx, m->out, vlan);
6484         } else if (vlan != m->out_vlan
6485                    && !eth_addr_is_reserved(orig_flow->dl_dst)) {
6486             struct ofbundle *bundle;
6487
6488             HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) {
6489                 if (ofbundle_includes_vlan(bundle, m->out_vlan)
6490                     && !bundle->mirror_out) {
6491                     output_normal(ctx, bundle, m->out_vlan);
6492                 }
6493             }
6494         }
6495     }
6496 }
6497
6498 static void
6499 update_mirror_stats(struct ofproto_dpif *ofproto, mirror_mask_t mirrors,
6500                     uint64_t packets, uint64_t bytes)
6501 {
6502     if (!mirrors) {
6503         return;
6504     }
6505
6506     for (; mirrors; mirrors = zero_rightmost_1bit(mirrors)) {
6507         struct ofmirror *m;
6508
6509         m = ofproto->mirrors[mirror_mask_ffs(mirrors) - 1];
6510
6511         if (!m) {
6512             /* In normal circumstances 'm' will not be NULL.  However,
6513              * if mirrors are reconfigured, we can temporarily get out
6514              * of sync in facet_revalidate().  We could "correct" the
6515              * mirror list before reaching here, but doing that would
6516              * not properly account the traffic stats we've currently
6517              * accumulated for previous mirror configuration. */
6518             continue;
6519         }
6520
6521         m->packet_count += packets;
6522         m->byte_count += bytes;
6523     }
6524 }
6525
6526 /* A VM broadcasts a gratuitous ARP to indicate that it has resumed after
6527  * migration.  Older Citrix-patched Linux DomU used gratuitous ARP replies to
6528  * indicate this; newer upstream kernels use gratuitous ARP requests. */
6529 static bool
6530 is_gratuitous_arp(const struct flow *flow)
6531 {
6532     return (flow->dl_type == htons(ETH_TYPE_ARP)
6533             && eth_addr_is_broadcast(flow->dl_dst)
6534             && (flow->nw_proto == ARP_OP_REPLY
6535                 || (flow->nw_proto == ARP_OP_REQUEST
6536                     && flow->nw_src == flow->nw_dst)));
6537 }
6538
6539 static void
6540 update_learning_table(struct ofproto_dpif *ofproto,
6541                       const struct flow *flow, int vlan,
6542                       struct ofbundle *in_bundle)
6543 {
6544     struct mac_entry *mac;
6545
6546     /* Don't learn the OFPP_NONE port. */
6547     if (in_bundle == &ofpp_none_bundle) {
6548         return;
6549     }
6550
6551     if (!mac_learning_may_learn(ofproto->ml, flow->dl_src, vlan)) {
6552         return;
6553     }
6554
6555     mac = mac_learning_insert(ofproto->ml, flow->dl_src, vlan);
6556     if (is_gratuitous_arp(flow)) {
6557         /* We don't want to learn from gratuitous ARP packets that are
6558          * reflected back over bond slaves so we lock the learning table. */
6559         if (!in_bundle->bond) {
6560             mac_entry_set_grat_arp_lock(mac);
6561         } else if (mac_entry_is_grat_arp_locked(mac)) {
6562             return;
6563         }
6564     }
6565
6566     if (mac_entry_is_new(mac) || mac->port.p != in_bundle) {
6567         /* The log messages here could actually be useful in debugging,
6568          * so keep the rate limit relatively high. */
6569         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30, 300);
6570         VLOG_DBG_RL(&rl, "bridge %s: learned that "ETH_ADDR_FMT" is "
6571                     "on port %s in VLAN %d",
6572                     ofproto->up.name, ETH_ADDR_ARGS(flow->dl_src),
6573                     in_bundle->name, vlan);
6574
6575         mac->port.p = in_bundle;
6576         tag_set_add(&ofproto->revalidate_set,
6577                     mac_learning_changed(ofproto->ml, mac));
6578     }
6579 }
6580
6581 static struct ofbundle *
6582 lookup_input_bundle(const struct ofproto_dpif *ofproto, uint16_t in_port,
6583                     bool warn, struct ofport_dpif **in_ofportp)
6584 {
6585     struct ofport_dpif *ofport;
6586
6587     /* Find the port and bundle for the received packet. */
6588     ofport = get_ofp_port(ofproto, in_port);
6589     if (in_ofportp) {
6590         *in_ofportp = ofport;
6591     }
6592     if (ofport && ofport->bundle) {
6593         return ofport->bundle;
6594     }
6595
6596     /* Special-case OFPP_NONE, which a controller may use as the ingress
6597      * port for traffic that it is sourcing. */
6598     if (in_port == OFPP_NONE) {
6599         return &ofpp_none_bundle;
6600     }
6601
6602     /* Odd.  A few possible reasons here:
6603      *
6604      * - We deleted a port but there are still a few packets queued up
6605      *   from it.
6606      *
6607      * - Someone externally added a port (e.g. "ovs-dpctl add-if") that
6608      *   we don't know about.
6609      *
6610      * - The ofproto client didn't configure the port as part of a bundle.
6611      *   This is particularly likely to happen if a packet was received on the
6612      *   port after it was created, but before the client had a chance to
6613      *   configure its bundle.
6614      */
6615     if (warn) {
6616         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
6617
6618         VLOG_WARN_RL(&rl, "bridge %s: received packet on unknown "
6619                      "port %"PRIu16, ofproto->up.name, in_port);
6620     }
6621     return NULL;
6622 }
6623
6624 /* Determines whether packets in 'flow' within 'ofproto' should be forwarded or
6625  * dropped.  Returns true if they may be forwarded, false if they should be
6626  * dropped.
6627  *
6628  * 'in_port' must be the ofport_dpif that corresponds to flow->in_port.
6629  * 'in_port' must be part of a bundle (e.g. in_port->bundle must be nonnull).
6630  *
6631  * 'vlan' must be the VLAN that corresponds to flow->vlan_tci on 'in_port', as
6632  * returned by input_vid_to_vlan().  It must be a valid VLAN for 'in_port', as
6633  * checked by input_vid_is_valid().
6634  *
6635  * May also add tags to '*tags', although the current implementation only does
6636  * so in one special case.
6637  */
6638 static bool
6639 is_admissible(struct action_xlate_ctx *ctx, struct ofport_dpif *in_port,
6640               uint16_t vlan)
6641 {
6642     struct ofproto_dpif *ofproto = ctx->ofproto;
6643     struct flow *flow = &ctx->flow;
6644     struct ofbundle *in_bundle = in_port->bundle;
6645
6646     /* Drop frames for reserved multicast addresses
6647      * only if forward_bpdu option is absent. */
6648     if (!ofproto->up.forward_bpdu && eth_addr_is_reserved(flow->dl_dst)) {
6649         xlate_report(ctx, "packet has reserved destination MAC, dropping");
6650         return false;
6651     }
6652
6653     if (in_bundle->bond) {
6654         struct mac_entry *mac;
6655
6656         switch (bond_check_admissibility(in_bundle->bond, in_port,
6657                                          flow->dl_dst, &ctx->tags)) {
6658         case BV_ACCEPT:
6659             break;
6660
6661         case BV_DROP:
6662             xlate_report(ctx, "bonding refused admissibility, dropping");
6663             return false;
6664
6665         case BV_DROP_IF_MOVED:
6666             mac = mac_learning_lookup(ofproto->ml, flow->dl_src, vlan, NULL);
6667             if (mac && mac->port.p != in_bundle &&
6668                 (!is_gratuitous_arp(flow)
6669                  || mac_entry_is_grat_arp_locked(mac))) {
6670                 xlate_report(ctx, "SLB bond thinks this packet looped back, "
6671                             "dropping");
6672                 return false;
6673             }
6674             break;
6675         }
6676     }
6677
6678     return true;
6679 }
6680
6681 static void
6682 xlate_normal(struct action_xlate_ctx *ctx)
6683 {
6684     struct ofport_dpif *in_port;
6685     struct ofbundle *in_bundle;
6686     struct mac_entry *mac;
6687     uint16_t vlan;
6688     uint16_t vid;
6689
6690     ctx->has_normal = true;
6691
6692     in_bundle = lookup_input_bundle(ctx->ofproto, ctx->flow.in_port,
6693                                     ctx->packet != NULL, &in_port);
6694     if (!in_bundle) {
6695         xlate_report(ctx, "no input bundle, dropping");
6696         return;
6697     }
6698
6699     /* Drop malformed frames. */
6700     if (ctx->flow.dl_type == htons(ETH_TYPE_VLAN) &&
6701         !(ctx->flow.vlan_tci & htons(VLAN_CFI))) {
6702         if (ctx->packet != NULL) {
6703             static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
6704             VLOG_WARN_RL(&rl, "bridge %s: dropping packet with partial "
6705                          "VLAN tag received on port %s",
6706                          ctx->ofproto->up.name, in_bundle->name);
6707         }
6708         xlate_report(ctx, "partial VLAN tag, dropping");
6709         return;
6710     }
6711
6712     /* Drop frames on bundles reserved for mirroring. */
6713     if (in_bundle->mirror_out) {
6714         if (ctx->packet != NULL) {
6715             static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
6716             VLOG_WARN_RL(&rl, "bridge %s: dropping packet received on port "
6717                          "%s, which is reserved exclusively for mirroring",
6718                          ctx->ofproto->up.name, in_bundle->name);
6719         }
6720         xlate_report(ctx, "input port is mirror output port, dropping");
6721         return;
6722     }
6723
6724     /* Check VLAN. */
6725     vid = vlan_tci_to_vid(ctx->flow.vlan_tci);
6726     if (!input_vid_is_valid(vid, in_bundle, ctx->packet != NULL)) {
6727         xlate_report(ctx, "disallowed VLAN VID for this input port, dropping");
6728         return;
6729     }
6730     vlan = input_vid_to_vlan(in_bundle, vid);
6731
6732     /* Check other admissibility requirements. */
6733     if (in_port && !is_admissible(ctx, in_port, vlan)) {
6734         return;
6735     }
6736
6737     /* Learn source MAC. */
6738     if (ctx->may_learn) {
6739         update_learning_table(ctx->ofproto, &ctx->flow, vlan, in_bundle);
6740     }
6741
6742     /* Determine output bundle. */
6743     mac = mac_learning_lookup(ctx->ofproto->ml, ctx->flow.dl_dst, vlan,
6744                               &ctx->tags);
6745     if (mac) {
6746         if (mac->port.p != in_bundle) {
6747             xlate_report(ctx, "forwarding to learned port");
6748             output_normal(ctx, mac->port.p, vlan);
6749         } else {
6750             xlate_report(ctx, "learned port is input port, dropping");
6751         }
6752     } else {
6753         struct ofbundle *bundle;
6754
6755         xlate_report(ctx, "no learned MAC for destination, flooding");
6756         HMAP_FOR_EACH (bundle, hmap_node, &ctx->ofproto->bundles) {
6757             if (bundle != in_bundle
6758                 && ofbundle_includes_vlan(bundle, vlan)
6759                 && bundle->floodable
6760                 && !bundle->mirror_out) {
6761                 output_normal(ctx, bundle, vlan);
6762             }
6763         }
6764         ctx->nf_output_iface = NF_OUT_FLOOD;
6765     }
6766 }
6767 \f
6768 /* Optimized flow revalidation.
6769  *
6770  * It's a difficult problem, in general, to tell which facets need to have
6771  * their actions recalculated whenever the OpenFlow flow table changes.  We
6772  * don't try to solve that general problem: for most kinds of OpenFlow flow
6773  * table changes, we recalculate the actions for every facet.  This is
6774  * relatively expensive, but it's good enough if the OpenFlow flow table
6775  * doesn't change very often.
6776  *
6777  * However, we can expect one particular kind of OpenFlow flow table change to
6778  * happen frequently: changes caused by MAC learning.  To avoid wasting a lot
6779  * of CPU on revalidating every facet whenever MAC learning modifies the flow
6780  * table, we add a special case that applies to flow tables in which every rule
6781  * has the same form (that is, the same wildcards), except that the table is
6782  * also allowed to have a single "catch-all" flow that matches all packets.  We
6783  * optimize this case by tagging all of the facets that resubmit into the table
6784  * and invalidating the same tag whenever a flow changes in that table.  The
6785  * end result is that we revalidate just the facets that need it (and sometimes
6786  * a few more, but not all of the facets or even all of the facets that
6787  * resubmit to the table modified by MAC learning). */
6788
6789 /* Calculates the tag to use for 'flow' and mask 'mask' when it is inserted
6790  * into an OpenFlow table with the given 'basis'. */
6791 static tag_type
6792 rule_calculate_tag(const struct flow *flow, const struct minimask *mask,
6793                    uint32_t secret)
6794 {
6795     if (minimask_is_catchall(mask)) {
6796         return 0;
6797     } else {
6798         uint32_t hash = flow_hash_in_minimask(flow, mask, secret);
6799         return tag_create_deterministic(hash);
6800     }
6801 }
6802
6803 /* Following a change to OpenFlow table 'table_id' in 'ofproto', update the
6804  * taggability of that table.
6805  *
6806  * This function must be called after *each* change to a flow table.  If you
6807  * skip calling it on some changes then the pointer comparisons at the end can
6808  * be invalid if you get unlucky.  For example, if a flow removal causes a
6809  * cls_table to be destroyed and then a flow insertion causes a cls_table with
6810  * different wildcards to be created with the same address, then this function
6811  * will incorrectly skip revalidation. */
6812 static void
6813 table_update_taggable(struct ofproto_dpif *ofproto, uint8_t table_id)
6814 {
6815     struct table_dpif *table = &ofproto->tables[table_id];
6816     const struct oftable *oftable = &ofproto->up.tables[table_id];
6817     struct cls_table *catchall, *other;
6818     struct cls_table *t;
6819
6820     catchall = other = NULL;
6821
6822     switch (hmap_count(&oftable->cls.tables)) {
6823     case 0:
6824         /* We could tag this OpenFlow table but it would make the logic a
6825          * little harder and it's a corner case that doesn't seem worth it
6826          * yet. */
6827         break;
6828
6829     case 1:
6830     case 2:
6831         HMAP_FOR_EACH (t, hmap_node, &oftable->cls.tables) {
6832             if (cls_table_is_catchall(t)) {
6833                 catchall = t;
6834             } else if (!other) {
6835                 other = t;
6836             } else {
6837                 /* Indicate that we can't tag this by setting both tables to
6838                  * NULL.  (We know that 'catchall' is already NULL.) */
6839                 other = NULL;
6840             }
6841         }
6842         break;
6843
6844     default:
6845         /* Can't tag this table. */
6846         break;
6847     }
6848
6849     if (table->catchall_table != catchall || table->other_table != other) {
6850         table->catchall_table = catchall;
6851         table->other_table = other;
6852         ofproto->need_revalidate = REV_FLOW_TABLE;
6853     }
6854 }
6855
6856 /* Given 'rule' that has changed in some way (either it is a rule being
6857  * inserted, a rule being deleted, or a rule whose actions are being
6858  * modified), marks facets for revalidation to ensure that packets will be
6859  * forwarded correctly according to the new state of the flow table.
6860  *
6861  * This function must be called after *each* change to a flow table.  See
6862  * the comment on table_update_taggable() for more information. */
6863 static void
6864 rule_invalidate(const struct rule_dpif *rule)
6865 {
6866     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
6867
6868     table_update_taggable(ofproto, rule->up.table_id);
6869
6870     if (!ofproto->need_revalidate) {
6871         struct table_dpif *table = &ofproto->tables[rule->up.table_id];
6872
6873         if (table->other_table && rule->tag) {
6874             tag_set_add(&ofproto->revalidate_set, rule->tag);
6875         } else {
6876             ofproto->need_revalidate = REV_FLOW_TABLE;
6877         }
6878     }
6879 }
6880 \f
6881 static bool
6882 set_frag_handling(struct ofproto *ofproto_,
6883                   enum ofp_config_flags frag_handling)
6884 {
6885     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
6886
6887     if (frag_handling != OFPC_FRAG_REASM) {
6888         ofproto->need_revalidate = REV_RECONFIGURE;
6889         return true;
6890     } else {
6891         return false;
6892     }
6893 }
6894
6895 static enum ofperr
6896 packet_out(struct ofproto *ofproto_, struct ofpbuf *packet,
6897            const struct flow *flow,
6898            const struct ofpact *ofpacts, size_t ofpacts_len)
6899 {
6900     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
6901     struct odputil_keybuf keybuf;
6902     struct dpif_flow_stats stats;
6903
6904     struct ofpbuf key;
6905
6906     struct action_xlate_ctx ctx;
6907     uint64_t odp_actions_stub[1024 / 8];
6908     struct ofpbuf odp_actions;
6909
6910     ofpbuf_use_stack(&key, &keybuf, sizeof keybuf);
6911     odp_flow_key_from_flow(&key, flow,
6912                            ofp_port_to_odp_port(ofproto, flow->in_port));
6913
6914     dpif_flow_stats_extract(flow, packet, time_msec(), &stats);
6915
6916     action_xlate_ctx_init(&ctx, ofproto, flow, flow->vlan_tci, NULL,
6917                           packet_get_tcp_flags(packet, flow), packet);
6918     ctx.resubmit_stats = &stats;
6919
6920     ofpbuf_use_stub(&odp_actions,
6921                     odp_actions_stub, sizeof odp_actions_stub);
6922     xlate_actions(&ctx, ofpacts, ofpacts_len, &odp_actions);
6923     dpif_execute(ofproto->backer->dpif, key.data, key.size,
6924                  odp_actions.data, odp_actions.size, packet);
6925     ofpbuf_uninit(&odp_actions);
6926
6927     return 0;
6928 }
6929 \f
6930 /* NetFlow. */
6931
6932 static int
6933 set_netflow(struct ofproto *ofproto_,
6934             const struct netflow_options *netflow_options)
6935 {
6936     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
6937
6938     if (netflow_options) {
6939         if (!ofproto->netflow) {
6940             ofproto->netflow = netflow_create();
6941         }
6942         return netflow_set_options(ofproto->netflow, netflow_options);
6943     } else {
6944         netflow_destroy(ofproto->netflow);
6945         ofproto->netflow = NULL;
6946         return 0;
6947     }
6948 }
6949
6950 static void
6951 get_netflow_ids(const struct ofproto *ofproto_,
6952                 uint8_t *engine_type, uint8_t *engine_id)
6953 {
6954     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
6955
6956     dpif_get_netflow_ids(ofproto->backer->dpif, engine_type, engine_id);
6957 }
6958
6959 static void
6960 send_active_timeout(struct ofproto_dpif *ofproto, struct facet *facet)
6961 {
6962     if (!facet_is_controller_flow(facet) &&
6963         netflow_active_timeout_expired(ofproto->netflow, &facet->nf_flow)) {
6964         struct subfacet *subfacet;
6965         struct ofexpired expired;
6966
6967         LIST_FOR_EACH (subfacet, list_node, &facet->subfacets) {
6968             if (subfacet->path == SF_FAST_PATH) {
6969                 struct dpif_flow_stats stats;
6970
6971                 subfacet_reinstall(subfacet, &stats);
6972                 subfacet_update_stats(subfacet, &stats);
6973             }
6974         }
6975
6976         expired.flow = facet->flow;
6977         expired.packet_count = facet->packet_count;
6978         expired.byte_count = facet->byte_count;
6979         expired.used = facet->used;
6980         netflow_expire(ofproto->netflow, &facet->nf_flow, &expired);
6981     }
6982 }
6983
6984 static void
6985 send_netflow_active_timeouts(struct ofproto_dpif *ofproto)
6986 {
6987     struct facet *facet;
6988
6989     HMAP_FOR_EACH (facet, hmap_node, &ofproto->facets) {
6990         send_active_timeout(ofproto, facet);
6991     }
6992 }
6993 \f
6994 static struct ofproto_dpif *
6995 ofproto_dpif_lookup(const char *name)
6996 {
6997     struct ofproto_dpif *ofproto;
6998
6999     HMAP_FOR_EACH_WITH_HASH (ofproto, all_ofproto_dpifs_node,
7000                              hash_string(name, 0), &all_ofproto_dpifs) {
7001         if (!strcmp(ofproto->up.name, name)) {
7002             return ofproto;
7003         }
7004     }
7005     return NULL;
7006 }
7007
7008 static void
7009 ofproto_unixctl_fdb_flush(struct unixctl_conn *conn, int argc,
7010                           const char *argv[], void *aux OVS_UNUSED)
7011 {
7012     struct ofproto_dpif *ofproto;
7013
7014     if (argc > 1) {
7015         ofproto = ofproto_dpif_lookup(argv[1]);
7016         if (!ofproto) {
7017             unixctl_command_reply_error(conn, "no such bridge");
7018             return;
7019         }
7020         mac_learning_flush(ofproto->ml, &ofproto->revalidate_set);
7021     } else {
7022         HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
7023             mac_learning_flush(ofproto->ml, &ofproto->revalidate_set);
7024         }
7025     }
7026
7027     unixctl_command_reply(conn, "table successfully flushed");
7028 }
7029
7030 static void
7031 ofproto_unixctl_fdb_show(struct unixctl_conn *conn, int argc OVS_UNUSED,
7032                          const char *argv[], void *aux OVS_UNUSED)
7033 {
7034     struct ds ds = DS_EMPTY_INITIALIZER;
7035     const struct ofproto_dpif *ofproto;
7036     const struct mac_entry *e;
7037
7038     ofproto = ofproto_dpif_lookup(argv[1]);
7039     if (!ofproto) {
7040         unixctl_command_reply_error(conn, "no such bridge");
7041         return;
7042     }
7043
7044     ds_put_cstr(&ds, " port  VLAN  MAC                Age\n");
7045     LIST_FOR_EACH (e, lru_node, &ofproto->ml->lrus) {
7046         struct ofbundle *bundle = e->port.p;
7047         ds_put_format(&ds, "%5d  %4d  "ETH_ADDR_FMT"  %3d\n",
7048                       ofbundle_get_a_port(bundle)->odp_port,
7049                       e->vlan, ETH_ADDR_ARGS(e->mac),
7050                       mac_entry_age(ofproto->ml, e));
7051     }
7052     unixctl_command_reply(conn, ds_cstr(&ds));
7053     ds_destroy(&ds);
7054 }
7055
7056 struct trace_ctx {
7057     struct action_xlate_ctx ctx;
7058     struct flow flow;
7059     struct ds *result;
7060 };
7061
7062 static void
7063 trace_format_rule(struct ds *result, uint8_t table_id, int level,
7064                   const struct rule_dpif *rule)
7065 {
7066     ds_put_char_multiple(result, '\t', level);
7067     if (!rule) {
7068         ds_put_cstr(result, "No match\n");
7069         return;
7070     }
7071
7072     ds_put_format(result, "Rule: table=%"PRIu8" cookie=%#"PRIx64" ",
7073                   table_id, ntohll(rule->up.flow_cookie));
7074     cls_rule_format(&rule->up.cr, result);
7075     ds_put_char(result, '\n');
7076
7077     ds_put_char_multiple(result, '\t', level);
7078     ds_put_cstr(result, "OpenFlow ");
7079     ofpacts_format(rule->up.ofpacts, rule->up.ofpacts_len, result);
7080     ds_put_char(result, '\n');
7081 }
7082
7083 static void
7084 trace_format_flow(struct ds *result, int level, const char *title,
7085                  struct trace_ctx *trace)
7086 {
7087     ds_put_char_multiple(result, '\t', level);
7088     ds_put_format(result, "%s: ", title);
7089     if (flow_equal(&trace->ctx.flow, &trace->flow)) {
7090         ds_put_cstr(result, "unchanged");
7091     } else {
7092         flow_format(result, &trace->ctx.flow);
7093         trace->flow = trace->ctx.flow;
7094     }
7095     ds_put_char(result, '\n');
7096 }
7097
7098 static void
7099 trace_format_regs(struct ds *result, int level, const char *title,
7100                   struct trace_ctx *trace)
7101 {
7102     size_t i;
7103
7104     ds_put_char_multiple(result, '\t', level);
7105     ds_put_format(result, "%s:", title);
7106     for (i = 0; i < FLOW_N_REGS; i++) {
7107         ds_put_format(result, " reg%zu=0x%"PRIx32, i, trace->flow.regs[i]);
7108     }
7109     ds_put_char(result, '\n');
7110 }
7111
7112 static void
7113 trace_format_odp(struct ds *result, int level, const char *title,
7114                  struct trace_ctx *trace)
7115 {
7116     struct ofpbuf *odp_actions = trace->ctx.odp_actions;
7117
7118     ds_put_char_multiple(result, '\t', level);
7119     ds_put_format(result, "%s: ", title);
7120     format_odp_actions(result, odp_actions->data, odp_actions->size);
7121     ds_put_char(result, '\n');
7122 }
7123
7124 static void
7125 trace_resubmit(struct action_xlate_ctx *ctx, struct rule_dpif *rule)
7126 {
7127     struct trace_ctx *trace = CONTAINER_OF(ctx, struct trace_ctx, ctx);
7128     struct ds *result = trace->result;
7129
7130     ds_put_char(result, '\n');
7131     trace_format_flow(result, ctx->recurse + 1, "Resubmitted flow", trace);
7132     trace_format_regs(result, ctx->recurse + 1, "Resubmitted regs", trace);
7133     trace_format_odp(result,  ctx->recurse + 1, "Resubmitted  odp", trace);
7134     trace_format_rule(result, ctx->table_id, ctx->recurse + 1, rule);
7135 }
7136
7137 static void
7138 trace_report(struct action_xlate_ctx *ctx, const char *s)
7139 {
7140     struct trace_ctx *trace = CONTAINER_OF(ctx, struct trace_ctx, ctx);
7141     struct ds *result = trace->result;
7142
7143     ds_put_char_multiple(result, '\t', ctx->recurse);
7144     ds_put_cstr(result, s);
7145     ds_put_char(result, '\n');
7146 }
7147
7148 static void
7149 ofproto_unixctl_trace(struct unixctl_conn *conn, int argc, const char *argv[],
7150                       void *aux OVS_UNUSED)
7151 {
7152     const char *dpname = argv[1];
7153     struct ofproto_dpif *ofproto;
7154     struct ofpbuf odp_key;
7155     struct ofpbuf *packet;
7156     ovs_be16 initial_tci;
7157     struct ds result;
7158     struct flow flow;
7159     char *s;
7160
7161     packet = NULL;
7162     ofpbuf_init(&odp_key, 0);
7163     ds_init(&result);
7164
7165     ofproto = ofproto_dpif_lookup(dpname);
7166     if (!ofproto) {
7167         unixctl_command_reply_error(conn, "Unknown ofproto (use ofproto/list "
7168                                     "for help)");
7169         goto exit;
7170     }
7171     if (argc == 3 || (argc == 4 && !strcmp(argv[3], "-generate"))) {
7172         /* ofproto/trace dpname flow [-generate] */
7173         const char *flow_s = argv[2];
7174         const char *generate_s = argv[3];
7175
7176         /* Allow 'flow_s' to be either a datapath flow or an OpenFlow-like
7177          * flow.  We guess which type it is based on whether 'flow_s' contains
7178          * an '(', since a datapath flow always contains '(') but an
7179          * OpenFlow-like flow should not (in fact it's allowed but I believe
7180          * that's not documented anywhere).
7181          *
7182          * An alternative would be to try to parse 'flow_s' both ways, but then
7183          * it would be tricky giving a sensible error message.  After all, do
7184          * you just say "syntax error" or do you present both error messages?
7185          * Both choices seem lousy. */
7186         if (strchr(flow_s, '(')) {
7187             enum odp_key_fitness fitness;
7188             int error;
7189
7190             /* Convert string to datapath key. */
7191             ofpbuf_init(&odp_key, 0);
7192             error = odp_flow_key_from_string(flow_s, NULL, &odp_key);
7193             if (error) {
7194                 unixctl_command_reply_error(conn, "Bad flow syntax");
7195                 goto exit;
7196             }
7197
7198             fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, &flow);
7199             flow.in_port = odp_port_to_ofp_port(ofproto, flow.in_port);
7200
7201             /* Convert odp_key to flow. */
7202             error = ofproto_dpif_vsp_adjust(ofproto, fitness, &flow,
7203                                             &initial_tci, NULL);
7204             if (error == ODP_FIT_ERROR) {
7205                 unixctl_command_reply_error(conn, "Invalid flow");
7206                 goto exit;
7207             }
7208         } else {
7209             char *error_s;
7210
7211             error_s = parse_ofp_exact_flow(&flow, argv[2]);
7212             if (error_s) {
7213                 unixctl_command_reply_error(conn, error_s);
7214                 free(error_s);
7215                 goto exit;
7216             }
7217
7218             initial_tci = flow.vlan_tci;
7219             vsp_adjust_flow(ofproto, &flow);
7220         }
7221
7222         /* Generate a packet, if requested. */
7223         if (generate_s) {
7224             packet = ofpbuf_new(0);
7225             flow_compose(packet, &flow);
7226         }
7227     } else if (argc == 7) {
7228         /* ofproto/trace dpname priority tun_id in_port mark packet */
7229         const char *priority_s = argv[2];
7230         const char *tun_id_s = argv[3];
7231         const char *in_port_s = argv[4];
7232         const char *mark_s = argv[5];
7233         const char *packet_s = argv[6];
7234         uint32_t in_port = atoi(in_port_s);
7235         ovs_be64 tun_id = htonll(strtoull(tun_id_s, NULL, 0));
7236         uint32_t priority = atoi(priority_s);
7237         uint32_t mark = atoi(mark_s);
7238         const char *msg;
7239
7240         msg = eth_from_hex(packet_s, &packet);
7241         if (msg) {
7242             unixctl_command_reply_error(conn, msg);
7243             goto exit;
7244         }
7245
7246         ds_put_cstr(&result, "Packet: ");
7247         s = ofp_packet_to_string(packet->data, packet->size);
7248         ds_put_cstr(&result, s);
7249         free(s);
7250
7251         flow_extract(packet, priority, mark, NULL, in_port, &flow);
7252         flow.tunnel.tun_id = tun_id;
7253         initial_tci = flow.vlan_tci;
7254     } else {
7255         unixctl_command_reply_error(conn, "Bad command syntax");
7256         goto exit;
7257     }
7258
7259     ofproto_trace(ofproto, &flow, packet, initial_tci, &result);
7260     unixctl_command_reply(conn, ds_cstr(&result));
7261
7262 exit:
7263     ds_destroy(&result);
7264     ofpbuf_delete(packet);
7265     ofpbuf_uninit(&odp_key);
7266 }
7267
7268 static void
7269 ofproto_trace(struct ofproto_dpif *ofproto, const struct flow *flow,
7270               const struct ofpbuf *packet, ovs_be16 initial_tci,
7271               struct ds *ds)
7272 {
7273     struct rule_dpif *rule;
7274
7275     ds_put_cstr(ds, "Flow: ");
7276     flow_format(ds, flow);
7277     ds_put_char(ds, '\n');
7278
7279     rule = rule_dpif_lookup(ofproto, flow);
7280
7281     trace_format_rule(ds, 0, 0, rule);
7282     if (rule == ofproto->miss_rule) {
7283         ds_put_cstr(ds, "\nNo match, flow generates \"packet in\"s.\n");
7284     } else if (rule == ofproto->no_packet_in_rule) {
7285         ds_put_cstr(ds, "\nNo match, packets dropped because "
7286                     "OFPPC_NO_PACKET_IN is set on in_port.\n");
7287     }
7288
7289     if (rule) {
7290         uint64_t odp_actions_stub[1024 / 8];
7291         struct ofpbuf odp_actions;
7292
7293         struct trace_ctx trace;
7294         uint8_t tcp_flags;
7295
7296         tcp_flags = packet ? packet_get_tcp_flags(packet, flow) : 0;
7297         trace.result = ds;
7298         trace.flow = *flow;
7299         ofpbuf_use_stub(&odp_actions,
7300                         odp_actions_stub, sizeof odp_actions_stub);
7301         action_xlate_ctx_init(&trace.ctx, ofproto, flow, initial_tci,
7302                               rule, tcp_flags, packet);
7303         trace.ctx.resubmit_hook = trace_resubmit;
7304         trace.ctx.report_hook = trace_report;
7305         xlate_actions(&trace.ctx, rule->up.ofpacts, rule->up.ofpacts_len,
7306                       &odp_actions);
7307
7308         ds_put_char(ds, '\n');
7309         trace_format_flow(ds, 0, "Final flow", &trace);
7310         ds_put_cstr(ds, "Datapath actions: ");
7311         format_odp_actions(ds, odp_actions.data, odp_actions.size);
7312         ofpbuf_uninit(&odp_actions);
7313
7314         if (trace.ctx.slow) {
7315             enum slow_path_reason slow;
7316
7317             ds_put_cstr(ds, "\nThis flow is handled by the userspace "
7318                         "slow path because it:");
7319             for (slow = trace.ctx.slow; slow; ) {
7320                 enum slow_path_reason bit = rightmost_1bit(slow);
7321
7322                 switch (bit) {
7323                 case SLOW_CFM:
7324                     ds_put_cstr(ds, "\n\t- Consists of CFM packets.");
7325                     break;
7326                 case SLOW_LACP:
7327                     ds_put_cstr(ds, "\n\t- Consists of LACP packets.");
7328                     break;
7329                 case SLOW_STP:
7330                     ds_put_cstr(ds, "\n\t- Consists of STP packets.");
7331                     break;
7332                 case SLOW_IN_BAND:
7333                     ds_put_cstr(ds, "\n\t- Needs in-band special case "
7334                                 "processing.");
7335                     if (!packet) {
7336                         ds_put_cstr(ds, "\n\t  (The datapath actions are "
7337                                     "incomplete--for complete actions, "
7338                                     "please supply a packet.)");
7339                     }
7340                     break;
7341                 case SLOW_CONTROLLER:
7342                     ds_put_cstr(ds, "\n\t- Sends \"packet-in\" messages "
7343                                 "to the OpenFlow controller.");
7344                     break;
7345                 case SLOW_MATCH:
7346                     ds_put_cstr(ds, "\n\t- Needs more specific matching "
7347                                 "than the datapath supports.");
7348                     break;
7349                 }
7350
7351                 slow &= ~bit;
7352             }
7353
7354             if (slow & ~SLOW_MATCH) {
7355                 ds_put_cstr(ds, "\nThe datapath actions above do not reflect "
7356                             "the special slow-path processing.");
7357             }
7358         }
7359     }
7360 }
7361
7362 static void
7363 ofproto_dpif_clog(struct unixctl_conn *conn OVS_UNUSED, int argc OVS_UNUSED,
7364                   const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED)
7365 {
7366     clogged = true;
7367     unixctl_command_reply(conn, NULL);
7368 }
7369
7370 static void
7371 ofproto_dpif_unclog(struct unixctl_conn *conn OVS_UNUSED, int argc OVS_UNUSED,
7372                     const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED)
7373 {
7374     clogged = false;
7375     unixctl_command_reply(conn, NULL);
7376 }
7377
7378 /* Runs a self-check of flow translations in 'ofproto'.  Appends a message to
7379  * 'reply' describing the results. */
7380 static void
7381 ofproto_dpif_self_check__(struct ofproto_dpif *ofproto, struct ds *reply)
7382 {
7383     struct facet *facet;
7384     int errors;
7385
7386     errors = 0;
7387     HMAP_FOR_EACH (facet, hmap_node, &ofproto->facets) {
7388         if (!facet_check_consistency(facet)) {
7389             errors++;
7390         }
7391     }
7392     if (errors) {
7393         ofproto->need_revalidate = REV_INCONSISTENCY;
7394     }
7395
7396     if (errors) {
7397         ds_put_format(reply, "%s: self-check failed (%d errors)\n",
7398                       ofproto->up.name, errors);
7399     } else {
7400         ds_put_format(reply, "%s: self-check passed\n", ofproto->up.name);
7401     }
7402 }
7403
7404 static void
7405 ofproto_dpif_self_check(struct unixctl_conn *conn,
7406                         int argc, const char *argv[], void *aux OVS_UNUSED)
7407 {
7408     struct ds reply = DS_EMPTY_INITIALIZER;
7409     struct ofproto_dpif *ofproto;
7410
7411     if (argc > 1) {
7412         ofproto = ofproto_dpif_lookup(argv[1]);
7413         if (!ofproto) {
7414             unixctl_command_reply_error(conn, "Unknown ofproto (use "
7415                                         "ofproto/list for help)");
7416             return;
7417         }
7418         ofproto_dpif_self_check__(ofproto, &reply);
7419     } else {
7420         HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
7421             ofproto_dpif_self_check__(ofproto, &reply);
7422         }
7423     }
7424
7425     unixctl_command_reply(conn, ds_cstr(&reply));
7426     ds_destroy(&reply);
7427 }
7428
7429 /* Store the current ofprotos in 'ofproto_shash'.  Returns a sorted list
7430  * of the 'ofproto_shash' nodes.  It is the responsibility of the caller
7431  * to destroy 'ofproto_shash' and free the returned value. */
7432 static const struct shash_node **
7433 get_ofprotos(struct shash *ofproto_shash)
7434 {
7435     const struct ofproto_dpif *ofproto;
7436
7437     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
7438         char *name = xasprintf("%s@%s", ofproto->up.type, ofproto->up.name);
7439         shash_add_nocopy(ofproto_shash, name, ofproto);
7440     }
7441
7442     return shash_sort(ofproto_shash);
7443 }
7444
7445 static void
7446 ofproto_unixctl_dpif_dump_dps(struct unixctl_conn *conn, int argc OVS_UNUSED,
7447                               const char *argv[] OVS_UNUSED,
7448                               void *aux OVS_UNUSED)
7449 {
7450     struct ds ds = DS_EMPTY_INITIALIZER;
7451     struct shash ofproto_shash;
7452     const struct shash_node **sorted_ofprotos;
7453     int i;
7454
7455     shash_init(&ofproto_shash);
7456     sorted_ofprotos = get_ofprotos(&ofproto_shash);
7457     for (i = 0; i < shash_count(&ofproto_shash); i++) {
7458         const struct shash_node *node = sorted_ofprotos[i];
7459         ds_put_format(&ds, "%s\n", node->name);
7460     }
7461
7462     shash_destroy(&ofproto_shash);
7463     free(sorted_ofprotos);
7464
7465     unixctl_command_reply(conn, ds_cstr(&ds));
7466     ds_destroy(&ds);
7467 }
7468
7469 static void
7470 show_dp_format(const struct ofproto_dpif *ofproto, struct ds *ds)
7471 {
7472     struct dpif_dp_stats s;
7473     const struct shash_node **ports;
7474     int i;
7475
7476     dpif_get_dp_stats(ofproto->backer->dpif, &s);
7477
7478     ds_put_format(ds, "%s (%s):\n", ofproto->up.name,
7479                   dpif_name(ofproto->backer->dpif));
7480     /* xxx It would be better to show bridge-specific stats instead
7481      * xxx of dp ones. */
7482     ds_put_format(ds,
7483                   "\tlookups: hit:%"PRIu64" missed:%"PRIu64" lost:%"PRIu64"\n",
7484                   s.n_hit, s.n_missed, s.n_lost);
7485     ds_put_format(ds, "\tflows: %zu\n",
7486                   hmap_count(&ofproto->subfacets));
7487
7488     ports = shash_sort(&ofproto->up.port_by_name);
7489     for (i = 0; i < shash_count(&ofproto->up.port_by_name); i++) {
7490         const struct shash_node *node = ports[i];
7491         struct ofport *ofport = node->data;
7492         const char *name = netdev_get_name(ofport->netdev);
7493         const char *type = netdev_get_type(ofport->netdev);
7494
7495         ds_put_format(ds, "\t%s %u/%u:", name, ofport->ofp_port,
7496                       ofp_port_to_odp_port(ofproto, ofport->ofp_port));
7497         if (strcmp(type, "system")) {
7498             struct netdev *netdev;
7499             int error;
7500
7501             ds_put_format(ds, " (%s", type);
7502
7503             error = netdev_open(name, type, &netdev);
7504             if (!error) {
7505                 struct smap config;
7506
7507                 smap_init(&config);
7508                 error = netdev_get_config(netdev, &config);
7509                 if (!error) {
7510                     const struct smap_node **nodes;
7511                     size_t i;
7512
7513                     nodes = smap_sort(&config);
7514                     for (i = 0; i < smap_count(&config); i++) {
7515                         const struct smap_node *node = nodes[i];
7516                         ds_put_format(ds, "%c %s=%s", i ? ',' : ':',
7517                                       node->key, node->value);
7518                     }
7519                     free(nodes);
7520                 }
7521                 smap_destroy(&config);
7522
7523                 netdev_close(netdev);
7524             }
7525             ds_put_char(ds, ')');
7526         }
7527         ds_put_char(ds, '\n');
7528     }
7529     free(ports);
7530 }
7531
7532 static void
7533 ofproto_unixctl_dpif_show(struct unixctl_conn *conn, int argc,
7534                           const char *argv[], void *aux OVS_UNUSED)
7535 {
7536     struct ds ds = DS_EMPTY_INITIALIZER;
7537     const struct ofproto_dpif *ofproto;
7538
7539     if (argc > 1) {
7540         int i;
7541         for (i = 1; i < argc; i++) {
7542             ofproto = ofproto_dpif_lookup(argv[i]);
7543             if (!ofproto) {
7544                 ds_put_format(&ds, "Unknown bridge %s (use dpif/dump-dps "
7545                                    "for help)", argv[i]);
7546                 unixctl_command_reply_error(conn, ds_cstr(&ds));
7547                 return;
7548             }
7549             show_dp_format(ofproto, &ds);
7550         }
7551     } else {
7552         struct shash ofproto_shash;
7553         const struct shash_node **sorted_ofprotos;
7554         int i;
7555
7556         shash_init(&ofproto_shash);
7557         sorted_ofprotos = get_ofprotos(&ofproto_shash);
7558         for (i = 0; i < shash_count(&ofproto_shash); i++) {
7559             const struct shash_node *node = sorted_ofprotos[i];
7560             show_dp_format(node->data, &ds);
7561         }
7562
7563         shash_destroy(&ofproto_shash);
7564         free(sorted_ofprotos);
7565     }
7566
7567     unixctl_command_reply(conn, ds_cstr(&ds));
7568     ds_destroy(&ds);
7569 }
7570
7571 static void
7572 ofproto_unixctl_dpif_dump_flows(struct unixctl_conn *conn,
7573                                 int argc OVS_UNUSED, const char *argv[],
7574                                 void *aux OVS_UNUSED)
7575 {
7576     struct ds ds = DS_EMPTY_INITIALIZER;
7577     const struct ofproto_dpif *ofproto;
7578     struct subfacet *subfacet;
7579
7580     ofproto = ofproto_dpif_lookup(argv[1]);
7581     if (!ofproto) {
7582         unixctl_command_reply_error(conn, "no such bridge");
7583         return;
7584     }
7585
7586     HMAP_FOR_EACH (subfacet, hmap_node, &ofproto->subfacets) {
7587         struct odputil_keybuf keybuf;
7588         struct ofpbuf key;
7589
7590         subfacet_get_key(subfacet, &keybuf, &key);
7591         odp_flow_key_format(key.data, key.size, &ds);
7592
7593         ds_put_format(&ds, ", packets:%"PRIu64", bytes:%"PRIu64", used:",
7594                       subfacet->dp_packet_count, subfacet->dp_byte_count);
7595         if (subfacet->used) {
7596             ds_put_format(&ds, "%.3fs",
7597                           (time_msec() - subfacet->used) / 1000.0);
7598         } else {
7599             ds_put_format(&ds, "never");
7600         }
7601         if (subfacet->facet->tcp_flags) {
7602             ds_put_cstr(&ds, ", flags:");
7603             packet_format_tcp_flags(&ds, subfacet->facet->tcp_flags);
7604         }
7605
7606         ds_put_cstr(&ds, ", actions:");
7607         format_odp_actions(&ds, subfacet->actions, subfacet->actions_len);
7608         ds_put_char(&ds, '\n');
7609     }
7610
7611     unixctl_command_reply(conn, ds_cstr(&ds));
7612     ds_destroy(&ds);
7613 }
7614
7615 static void
7616 ofproto_unixctl_dpif_del_flows(struct unixctl_conn *conn,
7617                                int argc OVS_UNUSED, const char *argv[],
7618                                void *aux OVS_UNUSED)
7619 {
7620     struct ds ds = DS_EMPTY_INITIALIZER;
7621     struct ofproto_dpif *ofproto;
7622
7623     ofproto = ofproto_dpif_lookup(argv[1]);
7624     if (!ofproto) {
7625         unixctl_command_reply_error(conn, "no such bridge");
7626         return;
7627     }
7628
7629     flush(&ofproto->up);
7630
7631     unixctl_command_reply(conn, ds_cstr(&ds));
7632     ds_destroy(&ds);
7633 }
7634
7635 static void
7636 ofproto_dpif_unixctl_init(void)
7637 {
7638     static bool registered;
7639     if (registered) {
7640         return;
7641     }
7642     registered = true;
7643
7644     unixctl_command_register(
7645         "ofproto/trace",
7646         "bridge {priority tun_id in_port mark packet | odp_flow [-generate]}",
7647         2, 6, ofproto_unixctl_trace, NULL);
7648     unixctl_command_register("fdb/flush", "[bridge]", 0, 1,
7649                              ofproto_unixctl_fdb_flush, NULL);
7650     unixctl_command_register("fdb/show", "bridge", 1, 1,
7651                              ofproto_unixctl_fdb_show, NULL);
7652     unixctl_command_register("ofproto/clog", "", 0, 0,
7653                              ofproto_dpif_clog, NULL);
7654     unixctl_command_register("ofproto/unclog", "", 0, 0,
7655                              ofproto_dpif_unclog, NULL);
7656     unixctl_command_register("ofproto/self-check", "[bridge]", 0, 1,
7657                              ofproto_dpif_self_check, NULL);
7658     unixctl_command_register("dpif/dump-dps", "", 0, 0,
7659                              ofproto_unixctl_dpif_dump_dps, NULL);
7660     unixctl_command_register("dpif/show", "[bridge]", 0, INT_MAX,
7661                              ofproto_unixctl_dpif_show, NULL);
7662     unixctl_command_register("dpif/dump-flows", "bridge", 1, 1,
7663                              ofproto_unixctl_dpif_dump_flows, NULL);
7664     unixctl_command_register("dpif/del-flows", "bridge", 1, 1,
7665                              ofproto_unixctl_dpif_del_flows, NULL);
7666 }
7667 \f
7668 /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
7669  *
7670  * This is deprecated.  It is only for compatibility with broken device drivers
7671  * in old versions of Linux that do not properly support VLANs when VLAN
7672  * devices are not used.  When broken device drivers are no longer in
7673  * widespread use, we will delete these interfaces. */
7674
7675 static int
7676 set_realdev(struct ofport *ofport_, uint16_t realdev_ofp_port, int vid)
7677 {
7678     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport_->ofproto);
7679     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
7680
7681     if (realdev_ofp_port == ofport->realdev_ofp_port
7682         && vid == ofport->vlandev_vid) {
7683         return 0;
7684     }
7685
7686     ofproto->need_revalidate = REV_RECONFIGURE;
7687
7688     if (ofport->realdev_ofp_port) {
7689         vsp_remove(ofport);
7690     }
7691     if (realdev_ofp_port && ofport->bundle) {
7692         /* vlandevs are enslaved to their realdevs, so they are not allowed to
7693          * themselves be part of a bundle. */
7694         bundle_set(ofport->up.ofproto, ofport->bundle, NULL);
7695     }
7696
7697     ofport->realdev_ofp_port = realdev_ofp_port;
7698     ofport->vlandev_vid = vid;
7699
7700     if (realdev_ofp_port) {
7701         vsp_add(ofport, realdev_ofp_port, vid);
7702     }
7703
7704     return 0;
7705 }
7706
7707 static uint32_t
7708 hash_realdev_vid(uint16_t realdev_ofp_port, int vid)
7709 {
7710     return hash_2words(realdev_ofp_port, vid);
7711 }
7712
7713 /* Returns the ODP port number of the Linux VLAN device that corresponds to
7714  * 'vlan_tci' on the network device with port number 'realdev_odp_port' in
7715  * 'ofproto'.  For example, given 'realdev_odp_port' of eth0 and 'vlan_tci' 9,
7716  * it would return the port number of eth0.9.
7717  *
7718  * Unless VLAN splinters are enabled for port 'realdev_odp_port', this
7719  * function just returns its 'realdev_odp_port' argument. */
7720 static uint32_t
7721 vsp_realdev_to_vlandev(const struct ofproto_dpif *ofproto,
7722                        uint32_t realdev_odp_port, ovs_be16 vlan_tci)
7723 {
7724     if (!hmap_is_empty(&ofproto->realdev_vid_map)) {
7725         uint16_t realdev_ofp_port;
7726         int vid = vlan_tci_to_vid(vlan_tci);
7727         const struct vlan_splinter *vsp;
7728
7729         realdev_ofp_port = odp_port_to_ofp_port(ofproto, realdev_odp_port);
7730         HMAP_FOR_EACH_WITH_HASH (vsp, realdev_vid_node,
7731                                  hash_realdev_vid(realdev_ofp_port, vid),
7732                                  &ofproto->realdev_vid_map) {
7733             if (vsp->realdev_ofp_port == realdev_ofp_port
7734                 && vsp->vid == vid) {
7735                 return ofp_port_to_odp_port(ofproto, vsp->vlandev_ofp_port);
7736             }
7737         }
7738     }
7739     return realdev_odp_port;
7740 }
7741
7742 static struct vlan_splinter *
7743 vlandev_find(const struct ofproto_dpif *ofproto, uint16_t vlandev_ofp_port)
7744 {
7745     struct vlan_splinter *vsp;
7746
7747     HMAP_FOR_EACH_WITH_HASH (vsp, vlandev_node, hash_int(vlandev_ofp_port, 0),
7748                              &ofproto->vlandev_map) {
7749         if (vsp->vlandev_ofp_port == vlandev_ofp_port) {
7750             return vsp;
7751         }
7752     }
7753
7754     return NULL;
7755 }
7756
7757 /* Returns the OpenFlow port number of the "real" device underlying the Linux
7758  * VLAN device with OpenFlow port number 'vlandev_ofp_port' and stores the
7759  * VLAN VID of the Linux VLAN device in '*vid'.  For example, given
7760  * 'vlandev_ofp_port' of eth0.9, it would return the OpenFlow port number of
7761  * eth0 and store 9 in '*vid'.
7762  *
7763  * Returns 0 and does not modify '*vid' if 'vlandev_ofp_port' is not a Linux
7764  * VLAN device.  Unless VLAN splinters are enabled, this is what this function
7765  * always does.*/
7766 static uint16_t
7767 vsp_vlandev_to_realdev(const struct ofproto_dpif *ofproto,
7768                        uint16_t vlandev_ofp_port, int *vid)
7769 {
7770     if (!hmap_is_empty(&ofproto->vlandev_map)) {
7771         const struct vlan_splinter *vsp;
7772
7773         vsp = vlandev_find(ofproto, vlandev_ofp_port);
7774         if (vsp) {
7775             if (vid) {
7776                 *vid = vsp->vid;
7777             }
7778             return vsp->realdev_ofp_port;
7779         }
7780     }
7781     return 0;
7782 }
7783
7784 /* Given 'flow', a flow representing a packet received on 'ofproto', checks
7785  * whether 'flow->in_port' represents a Linux VLAN device.  If so, changes
7786  * 'flow->in_port' to the "real" device backing the VLAN device, sets
7787  * 'flow->vlan_tci' to the VLAN VID, and returns true.  Otherwise (which is
7788  * always the case unless VLAN splinters are enabled), returns false without
7789  * making any changes. */
7790 static bool
7791 vsp_adjust_flow(const struct ofproto_dpif *ofproto, struct flow *flow)
7792 {
7793     uint16_t realdev;
7794     int vid;
7795
7796     realdev = vsp_vlandev_to_realdev(ofproto, flow->in_port, &vid);
7797     if (!realdev) {
7798         return false;
7799     }
7800
7801     /* Cause the flow to be processed as if it came in on the real device with
7802      * the VLAN device's VLAN ID. */
7803     flow->in_port = realdev;
7804     flow->vlan_tci = htons((vid & VLAN_VID_MASK) | VLAN_CFI);
7805     return true;
7806 }
7807
7808 static void
7809 vsp_remove(struct ofport_dpif *port)
7810 {
7811     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
7812     struct vlan_splinter *vsp;
7813
7814     vsp = vlandev_find(ofproto, port->up.ofp_port);
7815     if (vsp) {
7816         hmap_remove(&ofproto->vlandev_map, &vsp->vlandev_node);
7817         hmap_remove(&ofproto->realdev_vid_map, &vsp->realdev_vid_node);
7818         free(vsp);
7819
7820         port->realdev_ofp_port = 0;
7821     } else {
7822         VLOG_ERR("missing vlan device record");
7823     }
7824 }
7825
7826 static void
7827 vsp_add(struct ofport_dpif *port, uint16_t realdev_ofp_port, int vid)
7828 {
7829     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
7830
7831     if (!vsp_vlandev_to_realdev(ofproto, port->up.ofp_port, NULL)
7832         && (vsp_realdev_to_vlandev(ofproto, realdev_ofp_port, htons(vid))
7833             == realdev_ofp_port)) {
7834         struct vlan_splinter *vsp;
7835
7836         vsp = xmalloc(sizeof *vsp);
7837         hmap_insert(&ofproto->vlandev_map, &vsp->vlandev_node,
7838                     hash_int(port->up.ofp_port, 0));
7839         hmap_insert(&ofproto->realdev_vid_map, &vsp->realdev_vid_node,
7840                     hash_realdev_vid(realdev_ofp_port, vid));
7841         vsp->realdev_ofp_port = realdev_ofp_port;
7842         vsp->vlandev_ofp_port = port->up.ofp_port;
7843         vsp->vid = vid;
7844
7845         port->realdev_ofp_port = realdev_ofp_port;
7846     } else {
7847         VLOG_ERR("duplicate vlan device record");
7848     }
7849 }
7850
7851 static uint32_t
7852 ofp_port_to_odp_port(const struct ofproto_dpif *ofproto, uint16_t ofp_port)
7853 {
7854     const struct ofport_dpif *ofport = get_ofp_port(ofproto, ofp_port);
7855     return ofport ? ofport->odp_port : OVSP_NONE;
7856 }
7857
7858 static struct ofport_dpif *
7859 odp_port_to_ofport(const struct dpif_backer *backer, uint32_t odp_port)
7860 {
7861     struct ofport_dpif *port;
7862
7863     HMAP_FOR_EACH_IN_BUCKET (port, odp_port_node,
7864                              hash_int(odp_port, 0),
7865                              &backer->odp_to_ofport_map) {
7866         if (port->odp_port == odp_port) {
7867             return port;
7868         }
7869     }
7870
7871     return NULL;
7872 }
7873
7874 static uint16_t
7875 odp_port_to_ofp_port(const struct ofproto_dpif *ofproto, uint32_t odp_port)
7876 {
7877     struct ofport_dpif *port;
7878
7879     port = odp_port_to_ofport(ofproto->backer, odp_port);
7880     if (port && ofproto == ofproto_dpif_cast(port->up.ofproto)) {
7881         return port->up.ofp_port;
7882     } else {
7883         return OFPP_NONE;
7884     }
7885 }
7886
7887 const struct ofproto_class ofproto_dpif_class = {
7888     init,
7889     enumerate_types,
7890     enumerate_names,
7891     del,
7892     port_open_type,
7893     type_run,
7894     type_run_fast,
7895     type_wait,
7896     alloc,
7897     construct,
7898     destruct,
7899     dealloc,
7900     run,
7901     run_fast,
7902     wait,
7903     get_memory_usage,
7904     flush,
7905     get_features,
7906     get_tables,
7907     port_alloc,
7908     port_construct,
7909     port_destruct,
7910     port_dealloc,
7911     port_modified,
7912     port_reconfigured,
7913     port_query_by_name,
7914     port_add,
7915     port_del,
7916     port_get_stats,
7917     port_dump_start,
7918     port_dump_next,
7919     port_dump_done,
7920     port_poll,
7921     port_poll_wait,
7922     port_is_lacp_current,
7923     NULL,                       /* rule_choose_table */
7924     rule_alloc,
7925     rule_construct,
7926     rule_destruct,
7927     rule_dealloc,
7928     rule_get_stats,
7929     rule_execute,
7930     rule_modify_actions,
7931     set_frag_handling,
7932     packet_out,
7933     set_netflow,
7934     get_netflow_ids,
7935     set_sflow,
7936     set_cfm,
7937     get_cfm_fault,
7938     get_cfm_opup,
7939     get_cfm_remote_mpids,
7940     get_cfm_health,
7941     set_stp,
7942     get_stp_status,
7943     set_stp_port,
7944     get_stp_port_status,
7945     set_queues,
7946     bundle_set,
7947     bundle_remove,
7948     mirror_set,
7949     mirror_get_stats,
7950     set_flood_vlans,
7951     is_mirror_output_bundle,
7952     forward_bpdu_changed,
7953     set_mac_table_config,
7954     set_realdev,
7955 };