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