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