xenserver: Store XAPI dbcache as XML in interface-reconfigure.
[sliver-openvswitch.git] / ofproto / ofproto.c
1 /*
2  * Copyright (c) 2009 Nicira Networks.
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 #include "ofproto.h"
19 #include <errno.h>
20 #include <inttypes.h>
21 #include <net/if.h>
22 #include <netinet/in.h>
23 #include <stdbool.h>
24 #include <stdlib.h>
25 #include "classifier.h"
26 #include "coverage.h"
27 #include "discovery.h"
28 #include "dpif.h"
29 #include "executer.h"
30 #include "fail-open.h"
31 #include "in-band.h"
32 #include "mac-learning.h"
33 #include "netdev.h"
34 #include "netflow.h"
35 #include "odp-util.h"
36 #include "ofp-print.h"
37 #include "ofpbuf.h"
38 #include "openflow/nicira-ext.h"
39 #include "openflow/openflow.h"
40 #include "openflow/openflow-mgmt.h"
41 #include "openvswitch/datapath-protocol.h"
42 #include "packets.h"
43 #include "pinsched.h"
44 #include "pktbuf.h"
45 #include "poll-loop.h"
46 #include "port-array.h"
47 #include "rconn.h"
48 #include "shash.h"
49 #include "status.h"
50 #include "stp.h"
51 #include "svec.h"
52 #include "tag.h"
53 #include "timeval.h"
54 #include "vconn.h"
55 #include "vconn-ssl.h"
56 #include "xtoxll.h"
57
58 #define THIS_MODULE VLM_ofproto
59 #include "vlog.h"
60
61 enum {
62     DP_GROUP_FLOOD = 0,
63     DP_GROUP_ALL = 1
64 };
65
66 enum {
67     TABLEID_HASH = 0,
68     TABLEID_CLASSIFIER = 1
69 };
70
71 struct ofport {
72     struct netdev *netdev;
73     struct ofp_phy_port opp;    /* In host byte order. */
74 };
75
76 static void ofport_free(struct ofport *);
77 static void hton_ofp_phy_port(struct ofp_phy_port *);
78
79 static int xlate_actions(const union ofp_action *in, size_t n_in,
80                          const flow_t *flow, struct ofproto *ofproto,
81                          const struct ofpbuf *packet,
82                          struct odp_actions *out, tag_type *tags,
83                          bool *may_setup_flow);
84
85 struct rule {
86     struct cls_rule cr;
87
88     uint16_t idle_timeout;      /* In seconds from time of last use. */
89     uint16_t hard_timeout;      /* In seconds from time of creation. */
90     long long int used;         /* Last-used time (0 if never used). */
91     long long int created;      /* Creation time. */
92     uint64_t packet_count;      /* Number of packets received. */
93     uint64_t byte_count;        /* Number of bytes received. */
94     uint64_t accounted_bytes;   /* Number of bytes passed to account_cb. */
95     uint8_t tcp_flags;          /* Bitwise-OR of all TCP flags seen. */
96     uint8_t ip_tos;             /* Last-seen IP type-of-service. */
97     tag_type tags;              /* Tags (set only by hooks). */
98
99     /* If 'super' is non-NULL, this rule is a subrule, that is, it is an
100      * exact-match rule (having cr.wc.wildcards of 0) generated from the
101      * wildcard rule 'super'.  In this case, 'list' is an element of the
102      * super-rule's list.
103      *
104      * If 'super' is NULL, this rule is a super-rule, and 'list' is the head of
105      * a list of subrules.  A super-rule with no wildcards (where
106      * cr.wc.wildcards is 0) will never have any subrules. */
107     struct rule *super;
108     struct list list;
109
110     /* OpenFlow actions.
111      *
112      * A subrule has no actions (it uses the super-rule's actions). */
113     int n_actions;
114     union ofp_action *actions;
115
116     /* Datapath actions.
117      *
118      * A super-rule with wildcard fields never has ODP actions (since the
119      * datapath only supports exact-match flows). */
120     bool installed;             /* Installed in datapath? */
121     bool may_install;           /* True ordinarily; false if actions must
122                                  * be reassessed for every packet. */
123     int n_odp_actions;
124     union odp_action *odp_actions;
125 };
126
127 static inline bool
128 rule_is_hidden(const struct rule *rule)
129 {
130     /* Subrules are merely an implementation detail, so hide them from the
131      * controller. */
132     if (rule->super != NULL) {
133         return true;
134     }
135
136     /* Rules with priority higher than UINT16_MAX are set up by ofproto itself
137      * (e.g. by in-band control) and are intentionally hidden from the
138      * controller. */
139     if (rule->cr.priority > UINT16_MAX) {
140         return true;
141     }
142
143     return false;
144 }
145
146 static struct rule *rule_create(struct rule *super, const union ofp_action *,
147                                 size_t n_actions, uint16_t idle_timeout,
148                                 uint16_t hard_timeout);
149 static void rule_free(struct rule *);
150 static void rule_destroy(struct ofproto *, struct rule *);
151 static struct rule *rule_from_cls_rule(const struct cls_rule *);
152 static void rule_insert(struct ofproto *, struct rule *,
153                         struct ofpbuf *packet, uint16_t in_port);
154 static void rule_remove(struct ofproto *, struct rule *);
155 static bool rule_make_actions(struct ofproto *, struct rule *,
156                               const struct ofpbuf *packet);
157 static void rule_install(struct ofproto *, struct rule *,
158                          struct rule *displaced_rule);
159 static void rule_uninstall(struct ofproto *, struct rule *);
160 static void rule_post_uninstall(struct ofproto *, struct rule *);
161
162 struct ofconn {
163     struct list node;
164     struct rconn *rconn;
165     struct pktbuf *pktbuf;
166     bool send_flow_exp;
167     int miss_send_len;
168
169     struct rconn_packet_counter *packet_in_counter;
170
171     /* Number of OpenFlow messages queued as replies to OpenFlow requests, and
172      * the maximum number before we stop reading OpenFlow requests.  */
173 #define OFCONN_REPLY_MAX 100
174     struct rconn_packet_counter *reply_counter;
175 };
176
177 static struct ofconn *ofconn_create(struct ofproto *, struct rconn *);
178 static void ofconn_destroy(struct ofconn *, struct ofproto *);
179 static void ofconn_run(struct ofconn *, struct ofproto *);
180 static void ofconn_wait(struct ofconn *);
181 static void queue_tx(struct ofpbuf *msg, const struct ofconn *ofconn,
182                      struct rconn_packet_counter *counter);
183
184 struct ofproto {
185     /* Settings. */
186     uint64_t datapath_id;       /* Datapath ID. */
187     uint64_t fallback_dpid;     /* Datapath ID if no better choice found. */
188     uint64_t mgmt_id;           /* Management channel identifier. */
189     char *manufacturer;         /* Manufacturer. */
190     char *hardware;             /* Hardware. */
191     char *software;             /* Software version. */
192     char *serial;               /* Serial number. */
193
194     /* Datapath. */
195     struct dpif *dpif;
196     struct netdev_monitor *netdev_monitor;
197     struct port_array ports;    /* Index is ODP port nr; ofport->opp.port_no is
198                                  * OFP port nr. */
199     struct shash port_by_name;
200     uint32_t max_ports;
201
202     /* Configuration. */
203     struct switch_status *switch_status;
204     struct status_category *ss_cat;
205     struct in_band *in_band;
206     struct discovery *discovery;
207     struct fail_open *fail_open;
208     struct pinsched *miss_sched, *action_sched;
209     struct executer *executer;
210     struct netflow *netflow;
211
212     /* Flow table. */
213     struct classifier cls;
214     bool need_revalidate;
215     long long int next_expiration;
216     struct tag_set revalidate_set;
217
218     /* OpenFlow connections. */
219     struct list all_conns;
220     struct ofconn *controller;
221     struct pvconn **listeners;
222     size_t n_listeners;
223     struct pvconn **snoops;
224     size_t n_snoops;
225
226     /* Hooks for ovs-vswitchd. */
227     const struct ofhooks *ofhooks;
228     void *aux;
229
230     /* Used by default ofhooks. */
231     struct mac_learning *ml;
232 };
233
234 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
235
236 static const struct ofhooks default_ofhooks;
237
238 static uint64_t pick_datapath_id(const struct ofproto *);
239 static uint64_t pick_fallback_dpid(void);
240 static void send_packet_in_miss(struct ofpbuf *, void *ofproto);
241 static void send_packet_in_action(struct ofpbuf *, void *ofproto);
242 static void update_used(struct ofproto *);
243 static void update_stats(struct rule *, const struct odp_flow_stats *);
244 static void expire_rule(struct cls_rule *, void *ofproto);
245 static bool revalidate_rule(struct ofproto *p, struct rule *rule);
246 static void revalidate_cb(struct cls_rule *rule_, void *p_);
247
248 static void handle_odp_msg(struct ofproto *, struct ofpbuf *);
249
250 static void handle_openflow(struct ofconn *, struct ofproto *,
251                             struct ofpbuf *);
252
253 static void refresh_port_group(struct ofproto *, unsigned int group);
254 static void update_port(struct ofproto *, const char *devname);
255 static int init_ports(struct ofproto *);
256 static void reinit_ports(struct ofproto *);
257
258 int
259 ofproto_create(const char *datapath, const struct ofhooks *ofhooks, void *aux,
260                struct ofproto **ofprotop)
261 {
262     struct odp_stats stats;
263     struct ofproto *p;
264     struct dpif *dpif;
265     int error;
266
267     *ofprotop = NULL;
268
269     /* Connect to datapath and start listening for messages. */
270     error = dpif_open(datapath, &dpif);
271     if (error) {
272         VLOG_ERR("failed to open datapath %s: %s", datapath, strerror(error));
273         return error;
274     }
275     error = dpif_get_dp_stats(dpif, &stats);
276     if (error) {
277         VLOG_ERR("failed to obtain stats for datapath %s: %s",
278                  datapath, strerror(error));
279         dpif_close(dpif);
280         return error;
281     }
282     error = dpif_recv_set_mask(dpif, ODPL_MISS | ODPL_ACTION);
283     if (error) {
284         VLOG_ERR("failed to listen on datapath %s: %s",
285                  datapath, strerror(error));
286         dpif_close(dpif);
287         return error;
288     }
289     dpif_flow_flush(dpif);
290     dpif_recv_purge(dpif);
291
292     /* Initialize settings. */
293     p = xcalloc(1, sizeof *p);
294     p->fallback_dpid = pick_fallback_dpid();
295     p->datapath_id = p->fallback_dpid;
296     p->manufacturer = xstrdup("Nicira Networks, Inc.");
297     p->hardware = xstrdup("Reference Implementation");
298     p->software = xstrdup(VERSION BUILDNR);
299     p->serial = xstrdup("None");
300
301     /* Initialize datapath. */
302     p->dpif = dpif;
303     p->netdev_monitor = netdev_monitor_create();
304     port_array_init(&p->ports);
305     shash_init(&p->port_by_name);
306     p->max_ports = stats.max_ports;
307
308     /* Initialize submodules. */
309     p->switch_status = switch_status_create(p);
310     p->in_band = NULL;
311     p->discovery = NULL;
312     p->fail_open = NULL;
313     p->miss_sched = p->action_sched = NULL;
314     p->executer = NULL;
315     p->netflow = NULL;
316
317     /* Initialize flow table. */
318     classifier_init(&p->cls);
319     p->need_revalidate = false;
320     p->next_expiration = time_msec() + 1000;
321     tag_set_init(&p->revalidate_set);
322
323     /* Initialize OpenFlow connections. */
324     list_init(&p->all_conns);
325     p->controller = ofconn_create(p, rconn_create(15, 15));
326     p->controller->pktbuf = pktbuf_create();
327     p->controller->miss_send_len = OFP_DEFAULT_MISS_SEND_LEN;
328     p->listeners = NULL;
329     p->n_listeners = 0;
330     p->snoops = NULL;
331     p->n_snoops = 0;
332
333     /* Initialize hooks. */
334     if (ofhooks) {
335         p->ofhooks = ofhooks;
336         p->aux = aux;
337         p->ml = NULL;
338     } else {
339         p->ofhooks = &default_ofhooks;
340         p->aux = p;
341         p->ml = mac_learning_create();
342     }
343
344     /* Register switch status category. */
345     p->ss_cat = switch_status_register(p->switch_status, "remote",
346                                        rconn_status_cb, p->controller->rconn);
347
348     /* Almost done... */
349     error = init_ports(p);
350     if (error) {
351         ofproto_destroy(p);
352         return error;
353     }
354
355     /* Pick final datapath ID. */
356     p->datapath_id = pick_datapath_id(p);
357     VLOG_INFO("using datapath ID %012"PRIx64, p->datapath_id);
358
359     *ofprotop = p;
360     return 0;
361 }
362
363 void
364 ofproto_set_datapath_id(struct ofproto *p, uint64_t datapath_id)
365 {
366     uint64_t old_dpid = p->datapath_id;
367     p->datapath_id = datapath_id ? datapath_id : pick_datapath_id(p);
368     if (p->datapath_id != old_dpid) {
369         VLOG_INFO("datapath ID changed to %012"PRIx64, p->datapath_id);
370         rconn_reconnect(p->controller->rconn);
371     }
372 }
373
374 void
375 ofproto_set_mgmt_id(struct ofproto *p, uint64_t mgmt_id)
376 {
377     p->mgmt_id = mgmt_id;
378 }
379
380 void
381 ofproto_set_probe_interval(struct ofproto *p, int probe_interval)
382 {
383     probe_interval = probe_interval ? MAX(probe_interval, 5) : 0;
384     rconn_set_probe_interval(p->controller->rconn, probe_interval);
385     if (p->fail_open) {
386         int trigger_duration = probe_interval ? probe_interval * 3 : 15;
387         fail_open_set_trigger_duration(p->fail_open, trigger_duration);
388     }
389 }
390
391 void
392 ofproto_set_max_backoff(struct ofproto *p, int max_backoff)
393 {
394     rconn_set_max_backoff(p->controller->rconn, max_backoff);
395 }
396
397 void
398 ofproto_set_desc(struct ofproto *p,
399                  const char *manufacturer, const char *hardware,
400                  const char *software, const char *serial)
401 {
402     if (manufacturer) {
403         free(p->manufacturer);
404         p->manufacturer = xstrdup(manufacturer);
405     }
406     if (hardware) {
407         free(p->hardware);
408         p->hardware = xstrdup(hardware);
409     }
410     if (software) {
411         free(p->software);
412         p->software = xstrdup(software);
413     }
414     if (serial) {
415         free(p->serial);
416         p->serial = xstrdup(serial);
417     }
418 }
419
420 int
421 ofproto_set_in_band(struct ofproto *p, bool in_band)
422 {
423     if (in_band != (p->in_band != NULL)) {
424         if (in_band) {
425             in_band_create(p, p->switch_status, p->controller->rconn, 
426                            &p->in_band);
427             return 0;
428         } else {
429             ofproto_set_discovery(p, false, NULL, true);
430             in_band_destroy(p->in_band);
431             p->in_band = NULL;
432         }
433         rconn_reconnect(p->controller->rconn);
434     }
435     return 0;
436 }
437
438 int
439 ofproto_set_discovery(struct ofproto *p, bool discovery,
440                       const char *re, bool update_resolv_conf)
441 {
442     if (discovery != (p->discovery != NULL)) {
443         if (discovery) {
444             int error = ofproto_set_in_band(p, true);
445             if (error) {
446                 return error;
447             }
448             error = discovery_create(re, update_resolv_conf,
449                                      p->dpif, p->switch_status,
450                                      &p->discovery);
451             if (error) {
452                 return error;
453             }
454         } else {
455             discovery_destroy(p->discovery);
456             p->discovery = NULL;
457         }
458         rconn_disconnect(p->controller->rconn);
459     } else if (discovery) {
460         discovery_set_update_resolv_conf(p->discovery, update_resolv_conf);
461         return discovery_set_accept_controller_re(p->discovery, re);
462     }
463     return 0;
464 }
465
466 int
467 ofproto_set_controller(struct ofproto *ofproto, const char *controller)
468 {
469     if (ofproto->discovery) {
470         return EINVAL;
471     } else if (controller) {
472         if (strcmp(rconn_get_name(ofproto->controller->rconn), controller)) {
473             return rconn_connect(ofproto->controller->rconn, controller);
474         } else {
475             return 0;
476         }
477     } else {
478         rconn_disconnect(ofproto->controller->rconn);
479         return 0;
480     }
481 }
482
483 static int
484 set_pvconns(struct pvconn ***pvconnsp, size_t *n_pvconnsp,
485             const struct svec *svec)
486 {
487     struct pvconn **pvconns = *pvconnsp;
488     size_t n_pvconns = *n_pvconnsp;
489     int retval = 0;
490     size_t i;
491
492     for (i = 0; i < n_pvconns; i++) {
493         pvconn_close(pvconns[i]);
494     }
495     free(pvconns);
496
497     pvconns = xmalloc(svec->n * sizeof *pvconns);
498     n_pvconns = 0;
499     for (i = 0; i < svec->n; i++) {
500         const char *name = svec->names[i];
501         struct pvconn *pvconn;
502         int error;
503
504         error = pvconn_open(name, &pvconn);
505         if (!error) {
506             pvconns[n_pvconns++] = pvconn;
507         } else {
508             VLOG_ERR("failed to listen on %s: %s", name, strerror(error));
509             if (!retval) {
510                 retval = error;
511             }
512         }
513     }
514
515     *pvconnsp = pvconns;
516     *n_pvconnsp = n_pvconns;
517
518     return retval;
519 }
520
521 int
522 ofproto_set_listeners(struct ofproto *ofproto, const struct svec *listeners)
523 {
524     return set_pvconns(&ofproto->listeners, &ofproto->n_listeners, listeners);
525 }
526
527 int
528 ofproto_set_snoops(struct ofproto *ofproto, const struct svec *snoops)
529 {
530     return set_pvconns(&ofproto->snoops, &ofproto->n_snoops, snoops);
531 }
532
533 int
534 ofproto_set_netflow(struct ofproto *ofproto, const struct svec *collectors,
535         uint8_t engine_type, uint8_t engine_id, bool add_id_to_iface)
536 {
537     if (collectors && collectors->n) {
538         if (!ofproto->netflow) {
539             ofproto->netflow = netflow_create();
540         }
541         netflow_set_engine(ofproto->netflow, engine_type, engine_id, 
542                 add_id_to_iface);
543         return netflow_set_collectors(ofproto->netflow, collectors);
544     } else {
545         netflow_destroy(ofproto->netflow);
546         ofproto->netflow = NULL;
547         return 0;
548     }
549 }
550
551 void
552 ofproto_set_failure(struct ofproto *ofproto, bool fail_open)
553 {
554     if (fail_open) {
555         struct rconn *rconn = ofproto->controller->rconn;
556         int trigger_duration = rconn_get_probe_interval(rconn) * 3;
557         if (!ofproto->fail_open) {
558             ofproto->fail_open = fail_open_create(ofproto, trigger_duration,
559                                                   ofproto->switch_status,
560                                                   rconn);
561         } else {
562             fail_open_set_trigger_duration(ofproto->fail_open,
563                                            trigger_duration);
564         }
565     } else {
566         fail_open_destroy(ofproto->fail_open);
567         ofproto->fail_open = NULL;
568     }
569 }
570
571 void
572 ofproto_set_rate_limit(struct ofproto *ofproto,
573                        int rate_limit, int burst_limit)
574 {
575     if (rate_limit > 0) {
576         if (!ofproto->miss_sched) {
577             ofproto->miss_sched = pinsched_create(rate_limit, burst_limit,
578                                                   ofproto->switch_status);
579             ofproto->action_sched = pinsched_create(rate_limit, burst_limit,
580                                                     NULL);
581         } else {
582             pinsched_set_limits(ofproto->miss_sched, rate_limit, burst_limit);
583             pinsched_set_limits(ofproto->action_sched,
584                                 rate_limit, burst_limit);
585         }
586     } else {
587         pinsched_destroy(ofproto->miss_sched);
588         ofproto->miss_sched = NULL;
589         pinsched_destroy(ofproto->action_sched);
590         ofproto->action_sched = NULL;
591     }
592 }
593
594 int
595 ofproto_set_stp(struct ofproto *ofproto UNUSED, bool enable_stp)
596 {
597     /* XXX */
598     if (enable_stp) {
599         VLOG_WARN("STP is not yet implemented");
600         return EINVAL;
601     } else {
602         return 0;
603     }
604 }
605
606 int
607 ofproto_set_remote_execution(struct ofproto *ofproto, const char *command_acl,
608                              const char *command_dir)
609 {
610     if (command_acl) {
611         if (!ofproto->executer) {
612             return executer_create(command_acl, command_dir,
613                                    &ofproto->executer);
614         } else {
615             executer_set_acl(ofproto->executer, command_acl, command_dir);
616         }
617     } else {
618         executer_destroy(ofproto->executer);
619         ofproto->executer = NULL;
620     }
621     return 0;
622 }
623
624 uint64_t
625 ofproto_get_datapath_id(const struct ofproto *ofproto)
626 {
627     return ofproto->datapath_id;
628 }
629
630 uint64_t
631 ofproto_get_mgmt_id(const struct ofproto *ofproto)
632 {
633     return ofproto->mgmt_id;
634 }
635
636 int
637 ofproto_get_probe_interval(const struct ofproto *ofproto)
638 {
639     return rconn_get_probe_interval(ofproto->controller->rconn);
640 }
641
642 int
643 ofproto_get_max_backoff(const struct ofproto *ofproto)
644 {
645     return rconn_get_max_backoff(ofproto->controller->rconn);
646 }
647
648 bool
649 ofproto_get_in_band(const struct ofproto *ofproto)
650 {
651     return ofproto->in_band != NULL;
652 }
653
654 bool
655 ofproto_get_discovery(const struct ofproto *ofproto)
656 {
657     return ofproto->discovery != NULL;
658 }
659
660 const char *
661 ofproto_get_controller(const struct ofproto *ofproto)
662 {
663     return rconn_get_name(ofproto->controller->rconn);
664 }
665
666 void
667 ofproto_get_listeners(const struct ofproto *ofproto, struct svec *listeners)
668 {
669     size_t i;
670
671     for (i = 0; i < ofproto->n_listeners; i++) {
672         svec_add(listeners, pvconn_get_name(ofproto->listeners[i]));
673     }
674 }
675
676 void
677 ofproto_get_snoops(const struct ofproto *ofproto, struct svec *snoops)
678 {
679     size_t i;
680
681     for (i = 0; i < ofproto->n_snoops; i++) {
682         svec_add(snoops, pvconn_get_name(ofproto->snoops[i]));
683     }
684 }
685
686 void
687 ofproto_destroy(struct ofproto *p)
688 {
689     struct ofconn *ofconn, *next_ofconn;
690     struct ofport *ofport;
691     unsigned int port_no;
692     size_t i;
693
694     if (!p) {
695         return;
696     }
697
698     ofproto_flush_flows(p);
699     classifier_destroy(&p->cls);
700
701     LIST_FOR_EACH_SAFE (ofconn, next_ofconn, struct ofconn, node,
702                         &p->all_conns) {
703         ofconn_destroy(ofconn, p);
704     }
705
706     dpif_close(p->dpif);
707     netdev_monitor_destroy(p->netdev_monitor);
708     PORT_ARRAY_FOR_EACH (ofport, &p->ports, port_no) {
709         ofport_free(ofport);
710     }
711     shash_destroy(&p->port_by_name);
712
713     switch_status_destroy(p->switch_status);
714     in_band_destroy(p->in_band);
715     discovery_destroy(p->discovery);
716     fail_open_destroy(p->fail_open);
717     pinsched_destroy(p->miss_sched);
718     pinsched_destroy(p->action_sched);
719     executer_destroy(p->executer);
720     netflow_destroy(p->netflow);
721
722     switch_status_unregister(p->ss_cat);
723
724     for (i = 0; i < p->n_listeners; i++) {
725         pvconn_close(p->listeners[i]);
726     }
727     free(p->listeners);
728
729     for (i = 0; i < p->n_snoops; i++) {
730         pvconn_close(p->snoops[i]);
731     }
732     free(p->snoops);
733
734     mac_learning_destroy(p->ml);
735
736     free(p);
737 }
738
739 int
740 ofproto_run(struct ofproto *p)
741 {
742     int error = ofproto_run1(p);
743     if (!error) {
744         error = ofproto_run2(p, false);
745     }
746     return error;
747 }
748
749 static void
750 process_port_change(struct ofproto *ofproto, int error, char *devname)
751 {
752     if (error == ENOBUFS) {
753         reinit_ports(ofproto);
754     } else if (!error) {
755         update_port(ofproto, devname);
756         free(devname);
757     }
758 }
759
760 int
761 ofproto_run1(struct ofproto *p)
762 {
763     struct ofconn *ofconn, *next_ofconn;
764     char *devname;
765     int error;
766     int i;
767
768     for (i = 0; i < 50; i++) {
769         struct ofpbuf *buf;
770         int error;
771
772         error = dpif_recv(p->dpif, &buf);
773         if (error) {
774             if (error == ENODEV) {
775                 /* Someone destroyed the datapath behind our back.  The caller
776                  * better destroy us and give up, because we're just going to
777                  * spin from here on out. */
778                 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
779                 VLOG_ERR_RL(&rl, "%s: datapath was destroyed externally",
780                             dpif_name(p->dpif));
781                 return ENODEV;
782             }
783             break;
784         }
785
786         handle_odp_msg(p, buf);
787     }
788
789     while ((error = dpif_port_poll(p->dpif, &devname)) != EAGAIN) {
790         process_port_change(p, error, devname);
791     }
792     while ((error = netdev_monitor_poll(p->netdev_monitor,
793                                         &devname)) != EAGAIN) {
794         process_port_change(p, error, devname);
795     }
796
797     if (p->in_band) {
798         in_band_run(p->in_band);
799     }
800     if (p->discovery) {
801         char *controller_name;
802         if (rconn_is_connectivity_questionable(p->controller->rconn)) {
803             discovery_question_connectivity(p->discovery);
804         }
805         if (discovery_run(p->discovery, &controller_name)) {
806             if (controller_name) {
807                 rconn_connect(p->controller->rconn, controller_name);
808             } else {
809                 rconn_disconnect(p->controller->rconn);
810             }
811         }
812     }
813     if (p->fail_open) {
814         fail_open_run(p->fail_open);
815     }
816     pinsched_run(p->miss_sched, send_packet_in_miss, p);
817     pinsched_run(p->action_sched, send_packet_in_action, p);
818     if (p->executer) {
819         executer_run(p->executer);
820     }
821
822     LIST_FOR_EACH_SAFE (ofconn, next_ofconn, struct ofconn, node,
823                         &p->all_conns) {
824         ofconn_run(ofconn, p);
825     }
826
827     for (i = 0; i < p->n_listeners; i++) {
828         struct vconn *vconn;
829         int retval;
830
831         retval = pvconn_accept(p->listeners[i], OFP_VERSION, &vconn);
832         if (!retval) {
833             ofconn_create(p, rconn_new_from_vconn("passive", vconn));
834         } else if (retval != EAGAIN) {
835             VLOG_WARN_RL(&rl, "accept failed (%s)", strerror(retval));
836         }
837     }
838
839     for (i = 0; i < p->n_snoops; i++) {
840         struct vconn *vconn;
841         int retval;
842
843         retval = pvconn_accept(p->snoops[i], OFP_VERSION, &vconn);
844         if (!retval) {
845             rconn_add_monitor(p->controller->rconn, vconn);
846         } else if (retval != EAGAIN) {
847             VLOG_WARN_RL(&rl, "accept failed (%s)", strerror(retval));
848         }
849     }
850
851     if (time_msec() >= p->next_expiration) {
852         COVERAGE_INC(ofproto_expiration);
853         p->next_expiration = time_msec() + 1000;
854         update_used(p);
855
856         classifier_for_each(&p->cls, CLS_INC_ALL, expire_rule, p);
857
858         /* Let the hook know that we're at a stable point: all outstanding data
859          * in existing flows has been accounted to the account_cb.  Thus, the
860          * hook can now reasonably do operations that depend on having accurate
861          * flow volume accounting (currently, that's just bond rebalancing). */
862         if (p->ofhooks->account_checkpoint_cb) {
863             p->ofhooks->account_checkpoint_cb(p->aux);
864         }
865     }
866
867     if (p->netflow) {
868         netflow_run(p->netflow);
869     }
870
871     return 0;
872 }
873
874 struct revalidate_cbdata {
875     struct ofproto *ofproto;
876     bool revalidate_all;        /* Revalidate all exact-match rules? */
877     bool revalidate_subrules;   /* Revalidate all exact-match subrules? */
878     struct tag_set revalidate_set; /* Set of tags to revalidate. */
879 };
880
881 int
882 ofproto_run2(struct ofproto *p, bool revalidate_all)
883 {
884     if (p->need_revalidate || revalidate_all
885         || !tag_set_is_empty(&p->revalidate_set)) {
886         struct revalidate_cbdata cbdata;
887         cbdata.ofproto = p;
888         cbdata.revalidate_all = revalidate_all;
889         cbdata.revalidate_subrules = p->need_revalidate;
890         cbdata.revalidate_set = p->revalidate_set;
891         tag_set_init(&p->revalidate_set);
892         COVERAGE_INC(ofproto_revalidate);
893         classifier_for_each(&p->cls, CLS_INC_EXACT, revalidate_cb, &cbdata);
894         p->need_revalidate = false;
895     }
896
897     return 0;
898 }
899
900 void
901 ofproto_wait(struct ofproto *p)
902 {
903     struct ofconn *ofconn;
904     size_t i;
905
906     dpif_recv_wait(p->dpif);
907     dpif_port_poll_wait(p->dpif);
908     netdev_monitor_poll_wait(p->netdev_monitor);
909     LIST_FOR_EACH (ofconn, struct ofconn, node, &p->all_conns) {
910         ofconn_wait(ofconn);
911     }
912     if (p->in_band) {
913         in_band_wait(p->in_band);
914     }
915     if (p->discovery) {
916         discovery_wait(p->discovery);
917     }
918     if (p->fail_open) {
919         fail_open_wait(p->fail_open);
920     }
921     pinsched_wait(p->miss_sched);
922     pinsched_wait(p->action_sched);
923     if (p->executer) {
924         executer_wait(p->executer);
925     }
926     if (!tag_set_is_empty(&p->revalidate_set)) {
927         poll_immediate_wake();
928     }
929     if (p->need_revalidate) {
930         /* Shouldn't happen, but if it does just go around again. */
931         VLOG_DBG_RL(&rl, "need revalidate in ofproto_wait_cb()");
932         poll_immediate_wake();
933     } else if (p->next_expiration != LLONG_MAX) {
934         poll_timer_wait(p->next_expiration - time_msec());
935     }
936     for (i = 0; i < p->n_listeners; i++) {
937         pvconn_wait(p->listeners[i]);
938     }
939     for (i = 0; i < p->n_snoops; i++) {
940         pvconn_wait(p->snoops[i]);
941     }
942 }
943
944 void
945 ofproto_revalidate(struct ofproto *ofproto, tag_type tag)
946 {
947     tag_set_add(&ofproto->revalidate_set, tag);
948 }
949
950 struct tag_set *
951 ofproto_get_revalidate_set(struct ofproto *ofproto)
952 {
953     return &ofproto->revalidate_set;
954 }
955
956 bool
957 ofproto_is_alive(const struct ofproto *p)
958 {
959     return p->discovery || rconn_is_alive(p->controller->rconn);
960 }
961
962 int
963 ofproto_send_packet(struct ofproto *p, const flow_t *flow,
964                     const union ofp_action *actions, size_t n_actions,
965                     const struct ofpbuf *packet)
966 {
967     struct odp_actions odp_actions;
968     int error;
969
970     error = xlate_actions(actions, n_actions, flow, p, packet, &odp_actions,
971                           NULL, NULL);
972     if (error) {
973         return error;
974     }
975
976     /* XXX Should we translate the dpif_execute() errno value into an OpenFlow
977      * error code? */
978     dpif_execute(p->dpif, flow->in_port, odp_actions.actions,
979                  odp_actions.n_actions, packet);
980     return 0;
981 }
982
983 void
984 ofproto_add_flow(struct ofproto *p,
985                  const flow_t *flow, uint32_t wildcards, unsigned int priority,
986                  const union ofp_action *actions, size_t n_actions,
987                  int idle_timeout)
988 {
989     struct rule *rule;
990     rule = rule_create(NULL, actions, n_actions,
991                        idle_timeout >= 0 ? idle_timeout : 5 /* XXX */, 0);
992     cls_rule_from_flow(&rule->cr, flow, wildcards, priority);
993     rule_insert(p, rule, NULL, 0);
994 }
995
996 void
997 ofproto_delete_flow(struct ofproto *ofproto, const flow_t *flow,
998                     uint32_t wildcards, unsigned int priority)
999 {
1000     struct rule *rule;
1001
1002     rule = rule_from_cls_rule(classifier_find_rule_exactly(&ofproto->cls,
1003                                                            flow, wildcards,
1004                                                            priority));
1005     if (rule) {
1006         rule_remove(ofproto, rule);
1007     }
1008 }
1009
1010 static void
1011 destroy_rule(struct cls_rule *rule_, void *ofproto_)
1012 {
1013     struct rule *rule = rule_from_cls_rule(rule_);
1014     struct ofproto *ofproto = ofproto_;
1015
1016     /* Mark the flow as not installed, even though it might really be
1017      * installed, so that rule_remove() doesn't bother trying to uninstall it.
1018      * There is no point in uninstalling it individually since we are about to
1019      * blow away all the flows with dpif_flow_flush(). */
1020     rule->installed = false;
1021
1022     rule_remove(ofproto, rule);
1023 }
1024
1025 void
1026 ofproto_flush_flows(struct ofproto *ofproto)
1027 {
1028     COVERAGE_INC(ofproto_flush);
1029     classifier_for_each(&ofproto->cls, CLS_INC_ALL, destroy_rule, ofproto);
1030     dpif_flow_flush(ofproto->dpif);
1031     if (ofproto->in_band) {
1032         in_band_flushed(ofproto->in_band);
1033     }
1034     if (ofproto->fail_open) {
1035         fail_open_flushed(ofproto->fail_open);
1036     }
1037 }
1038 \f
1039 static void
1040 reinit_ports(struct ofproto *p)
1041 {
1042     struct svec devnames;
1043     struct ofport *ofport;
1044     unsigned int port_no;
1045     struct odp_port *odp_ports;
1046     size_t n_odp_ports;
1047     size_t i;
1048
1049     svec_init(&devnames);
1050     PORT_ARRAY_FOR_EACH (ofport, &p->ports, port_no) {
1051         svec_add (&devnames, (char *) ofport->opp.name);
1052     }
1053     dpif_port_list(p->dpif, &odp_ports, &n_odp_ports);
1054     for (i = 0; i < n_odp_ports; i++) {
1055         svec_add (&devnames, odp_ports[i].devname);
1056     }
1057     free(odp_ports);
1058
1059     svec_sort_unique(&devnames);
1060     for (i = 0; i < devnames.n; i++) {
1061         update_port(p, devnames.names[i]);
1062     }
1063     svec_destroy(&devnames);
1064 }
1065
1066 static void
1067 refresh_port_group(struct ofproto *p, unsigned int group)
1068 {
1069     uint16_t *ports;
1070     size_t n_ports;
1071     struct ofport *port;
1072     unsigned int port_no;
1073
1074     assert(group == DP_GROUP_ALL || group == DP_GROUP_FLOOD);
1075
1076     ports = xmalloc(port_array_count(&p->ports) * sizeof *ports);
1077     n_ports = 0;
1078     PORT_ARRAY_FOR_EACH (port, &p->ports, port_no) {
1079         if (group == DP_GROUP_ALL || !(port->opp.config & OFPPC_NO_FLOOD)) {
1080             ports[n_ports++] = port_no;
1081         }
1082     }
1083     dpif_port_group_set(p->dpif, group, ports, n_ports);
1084     free(ports);
1085 }
1086
1087 static void
1088 refresh_port_groups(struct ofproto *p)
1089 {
1090     refresh_port_group(p, DP_GROUP_FLOOD);
1091     refresh_port_group(p, DP_GROUP_ALL);
1092 }
1093
1094 static struct ofport *
1095 make_ofport(const struct odp_port *odp_port)
1096 {
1097     enum netdev_flags flags;
1098     struct ofport *ofport;
1099     struct netdev *netdev;
1100     bool carrier;
1101     int error;
1102
1103     error = netdev_open(odp_port->devname, NETDEV_ETH_TYPE_NONE, &netdev);
1104     if (error) {
1105         VLOG_WARN_RL(&rl, "ignoring port %s (%"PRIu16") because netdev %s "
1106                      "cannot be opened (%s)",
1107                      odp_port->devname, odp_port->port,
1108                      odp_port->devname, strerror(error));
1109         return NULL;
1110     }
1111
1112     ofport = xmalloc(sizeof *ofport);
1113     ofport->netdev = netdev;
1114     ofport->opp.port_no = odp_port_to_ofp_port(odp_port->port);
1115     netdev_get_etheraddr(netdev, ofport->opp.hw_addr);
1116     memcpy(ofport->opp.name, odp_port->devname,
1117            MIN(sizeof ofport->opp.name, sizeof odp_port->devname));
1118     ofport->opp.name[sizeof ofport->opp.name - 1] = '\0';
1119
1120     netdev_get_flags(netdev, &flags);
1121     ofport->opp.config = flags & NETDEV_UP ? 0 : OFPPC_PORT_DOWN;
1122
1123     netdev_get_carrier(netdev, &carrier);
1124     ofport->opp.state = carrier ? 0 : OFPPS_LINK_DOWN;
1125
1126     netdev_get_features(netdev,
1127                         &ofport->opp.curr, &ofport->opp.advertised,
1128                         &ofport->opp.supported, &ofport->opp.peer);
1129     return ofport;
1130 }
1131
1132 static bool
1133 ofport_conflicts(const struct ofproto *p, const struct odp_port *odp_port)
1134 {
1135     if (port_array_get(&p->ports, odp_port->port)) {
1136         VLOG_WARN_RL(&rl, "ignoring duplicate port %"PRIu16" in datapath",
1137                      odp_port->port);
1138         return true;
1139     } else if (shash_find(&p->port_by_name, odp_port->devname)) {
1140         VLOG_WARN_RL(&rl, "ignoring duplicate device %s in datapath",
1141                      odp_port->devname);
1142         return true;
1143     } else {
1144         return false;
1145     }
1146 }
1147
1148 static int
1149 ofport_equal(const struct ofport *a_, const struct ofport *b_)
1150 {
1151     const struct ofp_phy_port *a = &a_->opp;
1152     const struct ofp_phy_port *b = &b_->opp;
1153
1154     BUILD_ASSERT_DECL(sizeof *a == 48); /* Detect ofp_phy_port changes. */
1155     return (a->port_no == b->port_no
1156             && !memcmp(a->hw_addr, b->hw_addr, sizeof a->hw_addr)
1157             && !strcmp((char *) a->name, (char *) b->name)
1158             && a->state == b->state
1159             && a->config == b->config
1160             && a->curr == b->curr
1161             && a->advertised == b->advertised
1162             && a->supported == b->supported
1163             && a->peer == b->peer);
1164 }
1165
1166 static void
1167 send_port_status(struct ofproto *p, const struct ofport *ofport,
1168                  uint8_t reason)
1169 {
1170     /* XXX Should limit the number of queued port status change messages. */
1171     struct ofconn *ofconn;
1172     LIST_FOR_EACH (ofconn, struct ofconn, node, &p->all_conns) {
1173         struct ofp_port_status *ops;
1174         struct ofpbuf *b;
1175
1176         ops = make_openflow_xid(sizeof *ops, OFPT_PORT_STATUS, 0, &b);
1177         ops->reason = reason;
1178         ops->desc = ofport->opp;
1179         hton_ofp_phy_port(&ops->desc);
1180         queue_tx(b, ofconn, NULL);
1181     }
1182     if (p->ofhooks->port_changed_cb) {
1183         p->ofhooks->port_changed_cb(reason, &ofport->opp, p->aux);
1184     }
1185 }
1186
1187 static void
1188 ofport_install(struct ofproto *p, struct ofport *ofport)
1189 {
1190     netdev_monitor_add(p->netdev_monitor, ofport->netdev);
1191     port_array_set(&p->ports, ofp_port_to_odp_port(ofport->opp.port_no),
1192                    ofport);
1193     shash_add(&p->port_by_name, (char *) ofport->opp.name, ofport);
1194 }
1195
1196 static void
1197 ofport_remove(struct ofproto *p, struct ofport *ofport)
1198 {
1199     netdev_monitor_remove(p->netdev_monitor, ofport->netdev);
1200     port_array_set(&p->ports, ofp_port_to_odp_port(ofport->opp.port_no), NULL);
1201     shash_delete(&p->port_by_name,
1202                  shash_find(&p->port_by_name, (char *) ofport->opp.name));
1203 }
1204
1205 static void
1206 ofport_free(struct ofport *ofport)
1207 {
1208     if (ofport) {
1209         netdev_close(ofport->netdev);
1210         free(ofport);
1211     }
1212 }
1213
1214 static void
1215 update_port(struct ofproto *p, const char *devname)
1216 {
1217     struct odp_port odp_port;
1218     struct ofport *ofport;
1219     int error;
1220
1221     COVERAGE_INC(ofproto_update_port);
1222     ofport = shash_find_data(&p->port_by_name, devname);
1223     error = dpif_port_query_by_name(p->dpif, devname, &odp_port);
1224     if (!error) {
1225         if (!ofport) {
1226             /* New port. */
1227             if (!ofport_conflicts(p, &odp_port)) {
1228                 ofport = make_ofport(&odp_port);
1229                 if (ofport) {
1230                     ofport_install(p, ofport);
1231                     send_port_status(p, ofport, OFPPR_ADD);
1232                 }
1233             }
1234         } else {
1235             /* Modified port. */
1236             struct ofport *new_ofport = make_ofport(&odp_port);
1237             if (!new_ofport) {
1238                 return;
1239             }
1240
1241             new_ofport->opp.config &= OFPPC_PORT_DOWN;
1242             new_ofport->opp.config |= ofport->opp.config & ~OFPPC_PORT_DOWN;
1243             if (ofport_equal(ofport, new_ofport)) {
1244                 /* False alarm--no change. */
1245                 ofport_free(new_ofport);
1246             } else {
1247                 ofport_remove(p, ofport);
1248                 ofport_install(p, new_ofport);
1249                 ofport_free(ofport);
1250                 send_port_status(p, new_ofport, OFPPR_MODIFY);
1251             }
1252         }
1253     } else if (error == ENOENT || error == ENODEV) {
1254         /* Deleted port. */
1255         if (ofport) {
1256             send_port_status(p, ofport, OFPPR_DELETE);
1257             ofport_remove(p, ofport);
1258             ofport_free(ofport);
1259         }
1260     } else {
1261         VLOG_WARN_RL(&rl, "dpif_port_query_by_name returned unexpected error "
1262                      "%s", strerror(error));
1263         return;
1264     }
1265     refresh_port_groups(p);
1266 }
1267
1268 static int
1269 init_ports(struct ofproto *p)
1270 {
1271     struct odp_port *ports;
1272     size_t n_ports;
1273     size_t i;
1274     int error;
1275
1276     error = dpif_port_list(p->dpif, &ports, &n_ports);
1277     if (error) {
1278         return error;
1279     }
1280
1281     for (i = 0; i < n_ports; i++) {
1282         const struct odp_port *odp_port = &ports[i];
1283         if (!ofport_conflicts(p, odp_port)) {
1284             struct ofport *ofport = make_ofport(odp_port);
1285             if (ofport) {
1286                 ofport_install(p, ofport);
1287             }
1288         }
1289     }
1290     free(ports);
1291     refresh_port_groups(p);
1292     return 0;
1293 }
1294 \f
1295 static struct ofconn *
1296 ofconn_create(struct ofproto *p, struct rconn *rconn)
1297 {
1298     struct ofconn *ofconn = xmalloc(sizeof *ofconn);
1299     list_push_back(&p->all_conns, &ofconn->node);
1300     ofconn->rconn = rconn;
1301     ofconn->pktbuf = NULL;
1302     ofconn->send_flow_exp = false;
1303     ofconn->miss_send_len = 0;
1304     ofconn->packet_in_counter = rconn_packet_counter_create ();
1305     ofconn->reply_counter = rconn_packet_counter_create ();
1306     return ofconn;
1307 }
1308
1309 static void
1310 ofconn_destroy(struct ofconn *ofconn, struct ofproto *p)
1311 {
1312     if (p->executer) {
1313         executer_rconn_closing(p->executer, ofconn->rconn);
1314     }
1315
1316     list_remove(&ofconn->node);
1317     rconn_destroy(ofconn->rconn);
1318     rconn_packet_counter_destroy(ofconn->packet_in_counter);
1319     rconn_packet_counter_destroy(ofconn->reply_counter);
1320     pktbuf_destroy(ofconn->pktbuf);
1321     free(ofconn);
1322 }
1323
1324 static void
1325 ofconn_run(struct ofconn *ofconn, struct ofproto *p)
1326 {
1327     int iteration;
1328
1329     rconn_run(ofconn->rconn);
1330
1331     if (rconn_packet_counter_read (ofconn->reply_counter) < OFCONN_REPLY_MAX) {
1332         /* Limit the number of iterations to prevent other tasks from
1333          * starving. */
1334         for (iteration = 0; iteration < 50; iteration++) {
1335             struct ofpbuf *of_msg = rconn_recv(ofconn->rconn);
1336             if (!of_msg) {
1337                 break;
1338             }
1339             handle_openflow(ofconn, p, of_msg);
1340             ofpbuf_delete(of_msg);
1341         }
1342     }
1343
1344     if (ofconn != p->controller && !rconn_is_alive(ofconn->rconn)) {
1345         ofconn_destroy(ofconn, p);
1346     }
1347 }
1348
1349 static void
1350 ofconn_wait(struct ofconn *ofconn)
1351 {
1352     rconn_run_wait(ofconn->rconn);
1353     if (rconn_packet_counter_read (ofconn->reply_counter) < OFCONN_REPLY_MAX) {
1354         rconn_recv_wait(ofconn->rconn);
1355     } else {
1356         COVERAGE_INC(ofproto_ofconn_stuck);
1357     }
1358 }
1359 \f
1360 /* Caller is responsible for initializing the 'cr' member of the returned
1361  * rule. */
1362 static struct rule *
1363 rule_create(struct rule *super,
1364             const union ofp_action *actions, size_t n_actions,
1365             uint16_t idle_timeout, uint16_t hard_timeout)
1366 {
1367     struct rule *rule = xcalloc(1, sizeof *rule);
1368     rule->idle_timeout = idle_timeout;
1369     rule->hard_timeout = hard_timeout;
1370     rule->used = rule->created = time_msec();
1371     rule->super = super;
1372     if (super) {
1373         list_push_back(&super->list, &rule->list);
1374     } else {
1375         list_init(&rule->list);
1376     }
1377     rule->n_actions = n_actions;
1378     rule->actions = xmemdup(actions, n_actions * sizeof *actions);
1379     return rule;
1380 }
1381
1382 static struct rule *
1383 rule_from_cls_rule(const struct cls_rule *cls_rule)
1384 {
1385     return cls_rule ? CONTAINER_OF(cls_rule, struct rule, cr) : NULL;
1386 }
1387
1388 static void
1389 rule_free(struct rule *rule)
1390 {
1391     free(rule->actions);
1392     free(rule->odp_actions);
1393     free(rule);
1394 }
1395
1396 /* Destroys 'rule'.  If 'rule' is a subrule, also removes it from its
1397  * super-rule's list of subrules.  If 'rule' is a super-rule, also iterates
1398  * through all of its subrules and revalidates them, destroying any that no
1399  * longer has a super-rule (which is probably all of them).
1400  *
1401  * Before calling this function, the caller must make have removed 'rule' from
1402  * the classifier.  If 'rule' is an exact-match rule, the caller is also
1403  * responsible for ensuring that it has been uninstalled from the datapath. */
1404 static void
1405 rule_destroy(struct ofproto *ofproto, struct rule *rule)
1406 {
1407     if (!rule->super) {
1408         struct rule *subrule, *next;
1409         LIST_FOR_EACH_SAFE (subrule, next, struct rule, list, &rule->list) {
1410             revalidate_rule(ofproto, subrule);
1411         }
1412     } else {
1413         list_remove(&rule->list);
1414     }
1415     rule_free(rule);
1416 }
1417
1418 static bool
1419 rule_has_out_port(const struct rule *rule, uint16_t out_port)
1420 {
1421     const union ofp_action *oa;
1422     struct actions_iterator i;
1423
1424     if (out_port == htons(OFPP_NONE)) {
1425         return true;
1426     }
1427     for (oa = actions_first(&i, rule->actions, rule->n_actions); oa;
1428          oa = actions_next(&i)) {
1429         if (oa->type == htons(OFPAT_OUTPUT) && oa->output.port == out_port) {
1430             return true;
1431         }
1432     }
1433     return false;
1434 }
1435
1436 /* Executes the actions indicated by 'rule' on 'packet', which is in flow
1437  * 'flow' and is considered to have arrived on ODP port 'in_port'.
1438  *
1439  * The flow that 'packet' actually contains does not need to actually match
1440  * 'rule'; the actions in 'rule' will be applied to it either way.  Likewise,
1441  * the packet and byte counters for 'rule' will be credited for the packet sent
1442  * out whether or not the packet actually matches 'rule'.
1443  *
1444  * If 'rule' is an exact-match rule and 'flow' actually equals the rule's flow,
1445  * the caller must already have accurately composed ODP actions for it given
1446  * 'packet' using rule_make_actions().  If 'rule' is a wildcard rule, or if
1447  * 'rule' is an exact-match rule but 'flow' is not the rule's flow, then this
1448  * function will compose a set of ODP actions based on 'rule''s OpenFlow
1449  * actions and apply them to 'packet'. */
1450 static void
1451 rule_execute(struct ofproto *ofproto, struct rule *rule,
1452              struct ofpbuf *packet, const flow_t *flow)
1453 {
1454     const union odp_action *actions;
1455     size_t n_actions;
1456     struct odp_actions a;
1457
1458     /* Grab or compose the ODP actions.
1459      *
1460      * The special case for an exact-match 'rule' where 'flow' is not the
1461      * rule's flow is important to avoid, e.g., sending a packet out its input
1462      * port simply because the ODP actions were composed for the wrong
1463      * scenario. */
1464     if (rule->cr.wc.wildcards || !flow_equal(flow, &rule->cr.flow)) {
1465         struct rule *super = rule->super ? rule->super : rule;
1466         if (xlate_actions(super->actions, super->n_actions, flow, ofproto,
1467                           packet, &a, NULL, 0)) {
1468             return;
1469         }
1470         actions = a.actions;
1471         n_actions = a.n_actions;
1472     } else {
1473         actions = rule->odp_actions;
1474         n_actions = rule->n_odp_actions;
1475     }
1476
1477     /* Execute the ODP actions. */
1478     if (!dpif_execute(ofproto->dpif, flow->in_port,
1479                       actions, n_actions, packet)) {
1480         struct odp_flow_stats stats;
1481         flow_extract_stats(flow, packet, &stats);
1482         update_stats(rule, &stats);
1483         rule->used = time_msec();
1484     }
1485 }
1486
1487 static void
1488 rule_insert(struct ofproto *p, struct rule *rule, struct ofpbuf *packet,
1489             uint16_t in_port)
1490 {
1491     struct rule *displaced_rule;
1492
1493     /* Insert the rule in the classifier. */
1494     displaced_rule = rule_from_cls_rule(classifier_insert(&p->cls, &rule->cr));
1495     if (!rule->cr.wc.wildcards) {
1496         rule_make_actions(p, rule, packet);
1497     }
1498
1499     /* Send the packet and credit it to the rule. */
1500     if (packet) {
1501         flow_t flow;
1502         flow_extract(packet, in_port, &flow);
1503         rule_execute(p, rule, packet, &flow);
1504     }
1505
1506     /* Install the rule in the datapath only after sending the packet, to
1507      * avoid packet reordering.  */
1508     if (rule->cr.wc.wildcards) {
1509         COVERAGE_INC(ofproto_add_wc_flow);
1510         p->need_revalidate = true;
1511     } else {
1512         rule_install(p, rule, displaced_rule);
1513     }
1514
1515     /* Free the rule that was displaced, if any. */
1516     if (displaced_rule) {
1517         rule_destroy(p, displaced_rule);
1518     }
1519 }
1520
1521 static struct rule *
1522 rule_create_subrule(struct ofproto *ofproto, struct rule *rule,
1523                     const flow_t *flow)
1524 {
1525     struct rule *subrule = rule_create(rule, NULL, 0,
1526                                        rule->idle_timeout, rule->hard_timeout);
1527     COVERAGE_INC(ofproto_subrule_create);
1528     cls_rule_from_flow(&subrule->cr, flow, 0,
1529                        (rule->cr.priority <= UINT16_MAX ? UINT16_MAX
1530                         : rule->cr.priority));
1531     classifier_insert_exact(&ofproto->cls, &subrule->cr);
1532
1533     return subrule;
1534 }
1535
1536 static void
1537 rule_remove(struct ofproto *ofproto, struct rule *rule)
1538 {
1539     if (rule->cr.wc.wildcards) {
1540         COVERAGE_INC(ofproto_del_wc_flow);
1541         ofproto->need_revalidate = true;
1542     } else {
1543         rule_uninstall(ofproto, rule);
1544     }
1545     classifier_remove(&ofproto->cls, &rule->cr);
1546     rule_destroy(ofproto, rule);
1547 }
1548
1549 /* Returns true if the actions changed, false otherwise. */
1550 static bool
1551 rule_make_actions(struct ofproto *p, struct rule *rule,
1552                   const struct ofpbuf *packet)
1553 {
1554     const struct rule *super;
1555     struct odp_actions a;
1556     size_t actions_len;
1557
1558     assert(!rule->cr.wc.wildcards);
1559
1560     super = rule->super ? rule->super : rule;
1561     rule->tags = 0;
1562     xlate_actions(super->actions, super->n_actions, &rule->cr.flow, p,
1563                   packet, &a, &rule->tags, &rule->may_install);
1564
1565     actions_len = a.n_actions * sizeof *a.actions;
1566     if (rule->n_odp_actions != a.n_actions
1567         || memcmp(rule->odp_actions, a.actions, actions_len)) {
1568         COVERAGE_INC(ofproto_odp_unchanged);
1569         free(rule->odp_actions);
1570         rule->n_odp_actions = a.n_actions;
1571         rule->odp_actions = xmemdup(a.actions, actions_len);
1572         return true;
1573     } else {
1574         return false;
1575     }
1576 }
1577
1578 static int
1579 do_put_flow(struct ofproto *ofproto, struct rule *rule, int flags,
1580             struct odp_flow_put *put)
1581 {
1582     memset(&put->flow.stats, 0, sizeof put->flow.stats);
1583     put->flow.key = rule->cr.flow;
1584     put->flow.actions = rule->odp_actions;
1585     put->flow.n_actions = rule->n_odp_actions;
1586     put->flags = flags;
1587     return dpif_flow_put(ofproto->dpif, put);
1588 }
1589
1590 static void
1591 rule_install(struct ofproto *p, struct rule *rule, struct rule *displaced_rule)
1592 {
1593     assert(!rule->cr.wc.wildcards);
1594
1595     if (rule->may_install) {
1596         struct odp_flow_put put;
1597         if (!do_put_flow(p, rule,
1598                          ODPPF_CREATE | ODPPF_MODIFY | ODPPF_ZERO_STATS,
1599                          &put)) {
1600             rule->installed = true;
1601             if (displaced_rule) {
1602                 update_stats(rule, &put.flow.stats);
1603                 rule_post_uninstall(p, displaced_rule);
1604             }
1605         }
1606     } else if (displaced_rule) {
1607         rule_uninstall(p, displaced_rule);
1608     }
1609 }
1610
1611 static void
1612 rule_reinstall(struct ofproto *ofproto, struct rule *rule)
1613 {
1614     if (rule->installed) {
1615         struct odp_flow_put put;
1616         COVERAGE_INC(ofproto_dp_missed);
1617         do_put_flow(ofproto, rule, ODPPF_CREATE | ODPPF_MODIFY, &put);
1618     } else {
1619         rule_install(ofproto, rule, NULL);
1620     }
1621 }
1622
1623 static void
1624 rule_update_actions(struct ofproto *ofproto, struct rule *rule)
1625 {
1626     bool actions_changed = rule_make_actions(ofproto, rule, NULL);
1627     if (rule->may_install) {
1628         if (rule->installed) {
1629             if (actions_changed) {
1630                 /* XXX should really do rule_post_uninstall() for the *old* set
1631                  * of actions, and distinguish the old stats from the new. */
1632                 struct odp_flow_put put;
1633                 do_put_flow(ofproto, rule, ODPPF_CREATE | ODPPF_MODIFY, &put);
1634             }
1635         } else {
1636             rule_install(ofproto, rule, NULL);
1637         }
1638     } else {
1639         rule_uninstall(ofproto, rule);
1640     }
1641 }
1642
1643 static void
1644 rule_account(struct ofproto *ofproto, struct rule *rule, uint64_t extra_bytes)
1645 {
1646     uint64_t total_bytes = rule->byte_count + extra_bytes;
1647
1648     if (ofproto->ofhooks->account_flow_cb
1649         && total_bytes > rule->accounted_bytes)
1650     {
1651         ofproto->ofhooks->account_flow_cb(
1652             &rule->cr.flow, rule->odp_actions, rule->n_odp_actions,
1653             total_bytes - rule->accounted_bytes, ofproto->aux);
1654         rule->accounted_bytes = total_bytes;
1655     }
1656 }
1657
1658 static void
1659 rule_uninstall(struct ofproto *p, struct rule *rule)
1660 {
1661     assert(!rule->cr.wc.wildcards);
1662     if (rule->installed) {
1663         struct odp_flow odp_flow;
1664
1665         odp_flow.key = rule->cr.flow;
1666         odp_flow.actions = NULL;
1667         odp_flow.n_actions = 0;
1668         if (!dpif_flow_del(p->dpif, &odp_flow)) {
1669             update_stats(rule, &odp_flow.stats);
1670         }
1671         rule->installed = false;
1672
1673         rule_post_uninstall(p, rule);
1674     }
1675 }
1676
1677 static void
1678 rule_post_uninstall(struct ofproto *ofproto, struct rule *rule)
1679 {
1680     struct rule *super = rule->super;
1681
1682     rule_account(ofproto, rule, 0);
1683     if (ofproto->netflow) {
1684         struct ofexpired expired;
1685         expired.flow = rule->cr.flow;
1686         expired.packet_count = rule->packet_count;
1687         expired.byte_count = rule->byte_count;
1688         expired.used = rule->used;
1689         expired.created = rule->created;
1690         expired.tcp_flags = rule->tcp_flags;
1691         expired.ip_tos = rule->ip_tos;
1692         netflow_expire(ofproto->netflow, &expired);
1693     }
1694     if (super) {
1695         super->packet_count += rule->packet_count;
1696         super->byte_count += rule->byte_count;
1697         super->tcp_flags |= rule->tcp_flags;
1698         if (rule->packet_count) {
1699             super->ip_tos = rule->ip_tos;
1700         }
1701     }
1702
1703     /* Reset counters to prevent double counting if the rule ever gets
1704      * reinstalled. */
1705     rule->packet_count = 0;
1706     rule->byte_count = 0;
1707     rule->accounted_bytes = 0;
1708     rule->tcp_flags = 0;
1709     rule->ip_tos = 0;
1710 }
1711 \f
1712 static void
1713 queue_tx(struct ofpbuf *msg, const struct ofconn *ofconn,
1714          struct rconn_packet_counter *counter)
1715 {
1716     update_openflow_length(msg);
1717     if (rconn_send(ofconn->rconn, msg, counter)) {
1718         ofpbuf_delete(msg);
1719     }
1720 }
1721
1722 static void
1723 send_error(const struct ofconn *ofconn, const struct ofp_header *oh,
1724            int error, const void *data, size_t len)
1725 {
1726     struct ofpbuf *buf;
1727     struct ofp_error_msg *oem;
1728
1729     if (!(error >> 16)) {
1730         VLOG_WARN_RL(&rl, "not sending bad error code %d to controller",
1731                      error);
1732         return;
1733     }
1734
1735     COVERAGE_INC(ofproto_error);
1736     oem = make_openflow_xid(len + sizeof *oem, OFPT_ERROR,
1737                             oh ? oh->xid : 0, &buf);
1738     oem->type = htons((unsigned int) error >> 16);
1739     oem->code = htons(error & 0xffff);
1740     memcpy(oem->data, data, len);
1741     queue_tx(buf, ofconn, ofconn->reply_counter);
1742 }
1743
1744 static void
1745 send_error_oh(const struct ofconn *ofconn, const struct ofp_header *oh,
1746               int error)
1747 {
1748     size_t oh_length = ntohs(oh->length);
1749     send_error(ofconn, oh, error, oh, MIN(oh_length, 64));
1750 }
1751
1752 static void
1753 hton_ofp_phy_port(struct ofp_phy_port *opp)
1754 {
1755     opp->port_no = htons(opp->port_no);
1756     opp->config = htonl(opp->config);
1757     opp->state = htonl(opp->state);
1758     opp->curr = htonl(opp->curr);
1759     opp->advertised = htonl(opp->advertised);
1760     opp->supported = htonl(opp->supported);
1761     opp->peer = htonl(opp->peer);
1762 }
1763
1764 static int
1765 handle_echo_request(struct ofconn *ofconn, struct ofp_header *oh)
1766 {
1767     struct ofp_header *rq = oh;
1768     queue_tx(make_echo_reply(rq), ofconn, ofconn->reply_counter);
1769     return 0;
1770 }
1771
1772 static int
1773 handle_features_request(struct ofproto *p, struct ofconn *ofconn,
1774                         struct ofp_header *oh)
1775 {
1776     struct ofp_switch_features *osf;
1777     struct ofpbuf *buf;
1778     unsigned int port_no;
1779     struct ofport *port;
1780
1781     osf = make_openflow_xid(sizeof *osf, OFPT_FEATURES_REPLY, oh->xid, &buf);
1782     osf->datapath_id = htonll(p->datapath_id);
1783     osf->n_buffers = htonl(pktbuf_capacity());
1784     osf->n_tables = 2;
1785     osf->capabilities = htonl(OFPC_FLOW_STATS | OFPC_TABLE_STATS |
1786                               OFPC_PORT_STATS | OFPC_MULTI_PHY_TX);
1787     osf->actions = htonl((1u << OFPAT_OUTPUT) |
1788                          (1u << OFPAT_SET_VLAN_VID) |
1789                          (1u << OFPAT_SET_VLAN_PCP) |
1790                          (1u << OFPAT_STRIP_VLAN) |
1791                          (1u << OFPAT_SET_DL_SRC) |
1792                          (1u << OFPAT_SET_DL_DST) |
1793                          (1u << OFPAT_SET_NW_SRC) |
1794                          (1u << OFPAT_SET_NW_DST) |
1795                          (1u << OFPAT_SET_TP_SRC) |
1796                          (1u << OFPAT_SET_TP_DST));
1797
1798     PORT_ARRAY_FOR_EACH (port, &p->ports, port_no) {
1799         hton_ofp_phy_port(ofpbuf_put(buf, &port->opp, sizeof port->opp));
1800     }
1801
1802     queue_tx(buf, ofconn, ofconn->reply_counter);
1803     return 0;
1804 }
1805
1806 static int
1807 handle_get_config_request(struct ofproto *p, struct ofconn *ofconn,
1808                           struct ofp_header *oh)
1809 {
1810     struct ofpbuf *buf;
1811     struct ofp_switch_config *osc;
1812     uint16_t flags;
1813     bool drop_frags;
1814
1815     /* Figure out flags. */
1816     dpif_get_drop_frags(p->dpif, &drop_frags);
1817     flags = drop_frags ? OFPC_FRAG_DROP : OFPC_FRAG_NORMAL;
1818     if (ofconn->send_flow_exp) {
1819         flags |= OFPC_SEND_FLOW_EXP;
1820     }
1821
1822     /* Send reply. */
1823     osc = make_openflow_xid(sizeof *osc, OFPT_GET_CONFIG_REPLY, oh->xid, &buf);
1824     osc->flags = htons(flags);
1825     osc->miss_send_len = htons(ofconn->miss_send_len);
1826     queue_tx(buf, ofconn, ofconn->reply_counter);
1827
1828     return 0;
1829 }
1830
1831 static int
1832 handle_set_config(struct ofproto *p, struct ofconn *ofconn,
1833                   struct ofp_switch_config *osc)
1834 {
1835     uint16_t flags;
1836     int error;
1837
1838     error = check_ofp_message(&osc->header, OFPT_SET_CONFIG, sizeof *osc);
1839     if (error) {
1840         return error;
1841     }
1842     flags = ntohs(osc->flags);
1843
1844     ofconn->send_flow_exp = (flags & OFPC_SEND_FLOW_EXP) != 0;
1845
1846     if (ofconn == p->controller) {
1847         switch (flags & OFPC_FRAG_MASK) {
1848         case OFPC_FRAG_NORMAL:
1849             dpif_set_drop_frags(p->dpif, false);
1850             break;
1851         case OFPC_FRAG_DROP:
1852             dpif_set_drop_frags(p->dpif, true);
1853             break;
1854         default:
1855             VLOG_WARN_RL(&rl, "requested bad fragment mode (flags=%"PRIx16")",
1856                          osc->flags);
1857             break;
1858         }
1859     }
1860
1861     if ((ntohs(osc->miss_send_len) != 0) != (ofconn->miss_send_len != 0)) {
1862         if (ntohs(osc->miss_send_len) != 0) {
1863             ofconn->pktbuf = pktbuf_create();
1864         } else {
1865             pktbuf_destroy(ofconn->pktbuf);
1866         }
1867     }
1868
1869     ofconn->miss_send_len = ntohs(osc->miss_send_len);
1870
1871     return 0;
1872 }
1873
1874 static void
1875 add_output_group_action(struct odp_actions *actions, uint16_t group)
1876 {
1877     odp_actions_add(actions, ODPAT_OUTPUT_GROUP)->output_group.group = group;
1878 }
1879
1880 static void
1881 add_controller_action(struct odp_actions *actions,
1882                       const struct ofp_action_output *oao)
1883 {
1884     union odp_action *a = odp_actions_add(actions, ODPAT_CONTROLLER);
1885     a->controller.arg = oao->max_len ? ntohs(oao->max_len) : UINT32_MAX;
1886 }
1887
1888 struct action_xlate_ctx {
1889     /* Input. */
1890     const flow_t *flow;         /* Flow to which these actions correspond. */
1891     int recurse;                /* Recursion level, via xlate_table_action. */
1892     struct ofproto *ofproto;
1893     const struct ofpbuf *packet; /* The packet corresponding to 'flow', or a
1894                                   * null pointer if we are revalidating
1895                                   * without a packet to refer to. */
1896
1897     /* Output. */
1898     struct odp_actions *out;    /* Datapath actions. */
1899     tag_type *tags;             /* Tags associated with OFPP_NORMAL actions. */
1900     bool may_setup_flow;        /* True ordinarily; false if the actions must
1901                                  * be reassessed for every packet. */
1902 };
1903
1904 static void do_xlate_actions(const union ofp_action *in, size_t n_in,
1905                              struct action_xlate_ctx *ctx);
1906
1907 static void
1908 add_output_action(struct action_xlate_ctx *ctx, uint16_t port)
1909 {
1910     const struct ofport *ofport = port_array_get(&ctx->ofproto->ports, port);
1911     if (!ofport || !(ofport->opp.config & OFPPC_NO_FWD)) {
1912         odp_actions_add(ctx->out, ODPAT_OUTPUT)->output.port = port;
1913     }
1914 }
1915
1916 static struct rule *
1917 lookup_valid_rule(struct ofproto *ofproto, const flow_t *flow)
1918 {
1919     struct rule *rule;
1920     rule = rule_from_cls_rule(classifier_lookup(&ofproto->cls, flow));
1921
1922     /* The rule we found might not be valid, since we could be in need of
1923      * revalidation.  If it is not valid, don't return it. */
1924     if (rule
1925         && rule->super
1926         && ofproto->need_revalidate
1927         && !revalidate_rule(ofproto, rule)) {
1928         COVERAGE_INC(ofproto_invalidated);
1929         return NULL;
1930     }
1931
1932     return rule;
1933 }
1934
1935 static void
1936 xlate_table_action(struct action_xlate_ctx *ctx, uint16_t in_port)
1937 {
1938     if (!ctx->recurse) {
1939         struct rule *rule;
1940         flow_t flow;
1941
1942         flow = *ctx->flow;
1943         flow.in_port = in_port;
1944
1945         rule = lookup_valid_rule(ctx->ofproto, &flow);
1946         if (rule) {
1947             if (rule->super) {
1948                 rule = rule->super;
1949             }
1950
1951             ctx->recurse++;
1952             do_xlate_actions(rule->actions, rule->n_actions, ctx);
1953             ctx->recurse--;
1954         }
1955     }
1956 }
1957
1958 static void
1959 xlate_output_action(struct action_xlate_ctx *ctx,
1960                     const struct ofp_action_output *oao)
1961 {
1962     uint16_t odp_port;
1963
1964     switch (ntohs(oao->port)) {
1965     case OFPP_IN_PORT:
1966         add_output_action(ctx, ctx->flow->in_port);
1967         break;
1968     case OFPP_TABLE:
1969         xlate_table_action(ctx, ctx->flow->in_port);
1970         break;
1971     case OFPP_NORMAL:
1972         if (!ctx->ofproto->ofhooks->normal_cb(ctx->flow, ctx->packet,
1973                                               ctx->out, ctx->tags,
1974                                               ctx->ofproto->aux)) {
1975             COVERAGE_INC(ofproto_uninstallable);
1976             ctx->may_setup_flow = false;
1977         }
1978         break;
1979     case OFPP_FLOOD:
1980         add_output_group_action(ctx->out, DP_GROUP_FLOOD);
1981         break;
1982     case OFPP_ALL:
1983         add_output_group_action(ctx->out, DP_GROUP_ALL);
1984         break;
1985     case OFPP_CONTROLLER:
1986         add_controller_action(ctx->out, oao);
1987         break;
1988     case OFPP_LOCAL:
1989         add_output_action(ctx, ODPP_LOCAL);
1990         break;
1991     default:
1992         odp_port = ofp_port_to_odp_port(ntohs(oao->port));
1993         if (odp_port != ctx->flow->in_port) {
1994             add_output_action(ctx, odp_port);
1995         }
1996         break;
1997     }
1998 }
1999
2000 static void
2001 xlate_nicira_action(struct action_xlate_ctx *ctx,
2002                     const struct nx_action_header *nah)
2003 {
2004     const struct nx_action_resubmit *nar;
2005     int subtype = ntohs(nah->subtype);
2006
2007     assert(nah->vendor == htonl(NX_VENDOR_ID));
2008     switch (subtype) {
2009     case NXAST_RESUBMIT:
2010         nar = (const struct nx_action_resubmit *) nah;
2011         xlate_table_action(ctx, ofp_port_to_odp_port(ntohs(nar->in_port)));
2012         break;
2013
2014     default:
2015         VLOG_DBG_RL(&rl, "unknown Nicira action type %"PRIu16, subtype);
2016         break;
2017     }
2018 }
2019
2020 static void
2021 do_xlate_actions(const union ofp_action *in, size_t n_in,
2022                  struct action_xlate_ctx *ctx)
2023 {
2024     struct actions_iterator iter;
2025     const union ofp_action *ia;
2026     const struct ofport *port;
2027
2028     port = port_array_get(&ctx->ofproto->ports, ctx->flow->in_port);
2029     if (port && port->opp.config & (OFPPC_NO_RECV | OFPPC_NO_RECV_STP) &&
2030         port->opp.config & (eth_addr_equals(ctx->flow->dl_dst, stp_eth_addr)
2031                             ? OFPPC_NO_RECV_STP : OFPPC_NO_RECV)) {
2032         /* Drop this flow. */
2033         return;
2034     }
2035
2036     for (ia = actions_first(&iter, in, n_in); ia; ia = actions_next(&iter)) {
2037         uint16_t type = ntohs(ia->type);
2038         union odp_action *oa;
2039
2040         switch (type) {
2041         case OFPAT_OUTPUT:
2042             xlate_output_action(ctx, &ia->output);
2043             break;
2044
2045         case OFPAT_SET_VLAN_VID:
2046             oa = odp_actions_add(ctx->out, ODPAT_SET_VLAN_VID);
2047             oa->vlan_vid.vlan_vid = ia->vlan_vid.vlan_vid;
2048             break;
2049
2050         case OFPAT_SET_VLAN_PCP:
2051             oa = odp_actions_add(ctx->out, ODPAT_SET_VLAN_PCP);
2052             oa->vlan_pcp.vlan_pcp = ia->vlan_pcp.vlan_pcp;
2053             break;
2054
2055         case OFPAT_STRIP_VLAN:
2056             odp_actions_add(ctx->out, ODPAT_STRIP_VLAN);
2057             break;
2058
2059         case OFPAT_SET_DL_SRC:
2060             oa = odp_actions_add(ctx->out, ODPAT_SET_DL_SRC);
2061             memcpy(oa->dl_addr.dl_addr,
2062                    ((struct ofp_action_dl_addr *) ia)->dl_addr, ETH_ADDR_LEN);
2063             break;
2064
2065         case OFPAT_SET_DL_DST:
2066             oa = odp_actions_add(ctx->out, ODPAT_SET_DL_DST);
2067             memcpy(oa->dl_addr.dl_addr,
2068                    ((struct ofp_action_dl_addr *) ia)->dl_addr, ETH_ADDR_LEN);
2069             break;
2070
2071         case OFPAT_SET_NW_SRC:
2072             oa = odp_actions_add(ctx->out, ODPAT_SET_NW_SRC);
2073             oa->nw_addr.nw_addr = ia->nw_addr.nw_addr;
2074             break;
2075
2076         case OFPAT_SET_TP_SRC:
2077             oa = odp_actions_add(ctx->out, ODPAT_SET_TP_SRC);
2078             oa->tp_port.tp_port = ia->tp_port.tp_port;
2079             break;
2080
2081         case OFPAT_VENDOR:
2082             xlate_nicira_action(ctx, (const struct nx_action_header *) ia);
2083             break;
2084
2085         default:
2086             VLOG_DBG_RL(&rl, "unknown action type %"PRIu16, type);
2087             break;
2088         }
2089     }
2090 }
2091
2092 static int
2093 xlate_actions(const union ofp_action *in, size_t n_in,
2094               const flow_t *flow, struct ofproto *ofproto,
2095               const struct ofpbuf *packet,
2096               struct odp_actions *out, tag_type *tags, bool *may_setup_flow)
2097 {
2098     tag_type no_tags = 0;
2099     struct action_xlate_ctx ctx;
2100     COVERAGE_INC(ofproto_ofp2odp);
2101     odp_actions_init(out);
2102     ctx.flow = flow;
2103     ctx.recurse = 0;
2104     ctx.ofproto = ofproto;
2105     ctx.packet = packet;
2106     ctx.out = out;
2107     ctx.tags = tags ? tags : &no_tags;
2108     ctx.may_setup_flow = true;
2109     do_xlate_actions(in, n_in, &ctx);
2110     if (may_setup_flow) {
2111         *may_setup_flow = ctx.may_setup_flow;
2112     }
2113     if (odp_actions_overflow(out)) {
2114         odp_actions_init(out);
2115         return ofp_mkerr(OFPET_BAD_ACTION, OFPBAC_TOO_MANY);
2116     }
2117     return 0;
2118 }
2119
2120 static int
2121 handle_packet_out(struct ofproto *p, struct ofconn *ofconn,
2122                   struct ofp_header *oh)
2123 {
2124     struct ofp_packet_out *opo;
2125     struct ofpbuf payload, *buffer;
2126     struct odp_actions actions;
2127     int n_actions;
2128     uint16_t in_port;
2129     flow_t flow;
2130     int error;
2131
2132     error = check_ofp_packet_out(oh, &payload, &n_actions, p->max_ports);
2133     if (error) {
2134         return error;
2135     }
2136     opo = (struct ofp_packet_out *) oh;
2137
2138     COVERAGE_INC(ofproto_packet_out);
2139     if (opo->buffer_id != htonl(UINT32_MAX)) {
2140         error = pktbuf_retrieve(ofconn->pktbuf, ntohl(opo->buffer_id),
2141                                 &buffer, &in_port);
2142         if (error) {
2143             return error;
2144         }
2145         payload = *buffer;
2146     } else {
2147         buffer = NULL;
2148     }
2149
2150     flow_extract(&payload, ofp_port_to_odp_port(ntohs(opo->in_port)), &flow);
2151     error = xlate_actions((const union ofp_action *) opo->actions, n_actions,
2152                           &flow, p, &payload, &actions, NULL, NULL);
2153     if (error) {
2154         return error;
2155     }
2156
2157     dpif_execute(p->dpif, flow.in_port, actions.actions, actions.n_actions,
2158                  &payload);
2159     ofpbuf_delete(buffer);
2160
2161     return 0;
2162 }
2163
2164 static void
2165 update_port_config(struct ofproto *p, struct ofport *port,
2166                    uint32_t config, uint32_t mask)
2167 {
2168     mask &= config ^ port->opp.config;
2169     if (mask & OFPPC_PORT_DOWN) {
2170         if (config & OFPPC_PORT_DOWN) {
2171             netdev_turn_flags_off(port->netdev, NETDEV_UP, true);
2172         } else {
2173             netdev_turn_flags_on(port->netdev, NETDEV_UP, true);
2174         }
2175     }
2176 #define REVALIDATE_BITS (OFPPC_NO_RECV | OFPPC_NO_RECV_STP | OFPPC_NO_FWD)
2177     if (mask & REVALIDATE_BITS) {
2178         COVERAGE_INC(ofproto_costly_flags);
2179         port->opp.config ^= mask & REVALIDATE_BITS;
2180         p->need_revalidate = true;
2181     }
2182 #undef REVALIDATE_BITS
2183     if (mask & OFPPC_NO_FLOOD) {
2184         port->opp.config ^= OFPPC_NO_FLOOD;
2185         refresh_port_group(p, DP_GROUP_FLOOD);
2186     }
2187     if (mask & OFPPC_NO_PACKET_IN) {
2188         port->opp.config ^= OFPPC_NO_PACKET_IN;
2189     }
2190 }
2191
2192 static int
2193 handle_port_mod(struct ofproto *p, struct ofp_header *oh)
2194 {
2195     const struct ofp_port_mod *opm;
2196     struct ofport *port;
2197     int error;
2198
2199     error = check_ofp_message(oh, OFPT_PORT_MOD, sizeof *opm);
2200     if (error) {
2201         return error;
2202     }
2203     opm = (struct ofp_port_mod *) oh;
2204
2205     port = port_array_get(&p->ports,
2206                           ofp_port_to_odp_port(ntohs(opm->port_no)));
2207     if (!port) {
2208         return ofp_mkerr(OFPET_PORT_MOD_FAILED, OFPPMFC_BAD_PORT);
2209     } else if (memcmp(port->opp.hw_addr, opm->hw_addr, OFP_ETH_ALEN)) {
2210         return ofp_mkerr(OFPET_PORT_MOD_FAILED, OFPPMFC_BAD_HW_ADDR);
2211     } else {
2212         update_port_config(p, port, ntohl(opm->config), ntohl(opm->mask));
2213         if (opm->advertise) {
2214             netdev_set_advertisements(port->netdev, ntohl(opm->advertise));
2215         }
2216     }
2217     return 0;
2218 }
2219
2220 static struct ofpbuf *
2221 make_stats_reply(uint32_t xid, uint16_t type, size_t body_len)
2222 {
2223     struct ofp_stats_reply *osr;
2224     struct ofpbuf *msg;
2225
2226     msg = ofpbuf_new(MIN(sizeof *osr + body_len, UINT16_MAX));
2227     osr = put_openflow_xid(sizeof *osr, OFPT_STATS_REPLY, xid, msg);
2228     osr->type = type;
2229     osr->flags = htons(0);
2230     return msg;
2231 }
2232
2233 static struct ofpbuf *
2234 start_stats_reply(const struct ofp_stats_request *request, size_t body_len)
2235 {
2236     return make_stats_reply(request->header.xid, request->type, body_len);
2237 }
2238
2239 static void *
2240 append_stats_reply(size_t nbytes, struct ofconn *ofconn, struct ofpbuf **msgp)
2241 {
2242     struct ofpbuf *msg = *msgp;
2243     assert(nbytes <= UINT16_MAX - sizeof(struct ofp_stats_reply));
2244     if (nbytes + msg->size > UINT16_MAX) {
2245         struct ofp_stats_reply *reply = msg->data;
2246         reply->flags = htons(OFPSF_REPLY_MORE);
2247         *msgp = make_stats_reply(reply->header.xid, reply->type, nbytes);
2248         queue_tx(msg, ofconn, ofconn->reply_counter);
2249     }
2250     return ofpbuf_put_uninit(*msgp, nbytes);
2251 }
2252
2253 static int
2254 handle_desc_stats_request(struct ofproto *p, struct ofconn *ofconn,
2255                            struct ofp_stats_request *request)
2256 {
2257     struct ofp_desc_stats *ods;
2258     struct ofpbuf *msg;
2259
2260     msg = start_stats_reply(request, sizeof *ods);
2261     ods = append_stats_reply(sizeof *ods, ofconn, &msg);
2262     strncpy(ods->mfr_desc, p->manufacturer, sizeof ods->mfr_desc);
2263     strncpy(ods->hw_desc, p->hardware, sizeof ods->hw_desc);
2264     strncpy(ods->sw_desc, p->software, sizeof ods->sw_desc);
2265     strncpy(ods->serial_num, p->serial, sizeof ods->serial_num);
2266     queue_tx(msg, ofconn, ofconn->reply_counter);
2267
2268     return 0;
2269 }
2270
2271 static void
2272 count_subrules(struct cls_rule *cls_rule, void *n_subrules_)
2273 {
2274     struct rule *rule = rule_from_cls_rule(cls_rule);
2275     int *n_subrules = n_subrules_;
2276
2277     if (rule->super) {
2278         (*n_subrules)++;
2279     }
2280 }
2281
2282 static int
2283 handle_table_stats_request(struct ofproto *p, struct ofconn *ofconn,
2284                            struct ofp_stats_request *request)
2285 {
2286     struct ofp_table_stats *ots;
2287     struct ofpbuf *msg;
2288     struct odp_stats dpstats;
2289     int n_exact, n_subrules, n_wild;
2290
2291     msg = start_stats_reply(request, sizeof *ots * 2);
2292
2293     /* Count rules of various kinds. */
2294     n_subrules = 0;
2295     classifier_for_each(&p->cls, CLS_INC_EXACT, count_subrules, &n_subrules);
2296     n_exact = classifier_count_exact(&p->cls) - n_subrules;
2297     n_wild = classifier_count(&p->cls) - classifier_count_exact(&p->cls);
2298
2299     /* Hash table. */
2300     dpif_get_dp_stats(p->dpif, &dpstats);
2301     ots = append_stats_reply(sizeof *ots, ofconn, &msg);
2302     memset(ots, 0, sizeof *ots);
2303     ots->table_id = TABLEID_HASH;
2304     strcpy(ots->name, "hash");
2305     ots->wildcards = htonl(0);
2306     ots->max_entries = htonl(dpstats.max_capacity);
2307     ots->active_count = htonl(n_exact);
2308     ots->lookup_count = htonll(dpstats.n_frags + dpstats.n_hit +
2309                                dpstats.n_missed);
2310     ots->matched_count = htonll(dpstats.n_hit); /* XXX */
2311
2312     /* Classifier table. */
2313     ots = append_stats_reply(sizeof *ots, ofconn, &msg);
2314     memset(ots, 0, sizeof *ots);
2315     ots->table_id = TABLEID_CLASSIFIER;
2316     strcpy(ots->name, "classifier");
2317     ots->wildcards = htonl(OFPFW_ALL);
2318     ots->max_entries = htonl(65536);
2319     ots->active_count = htonl(n_wild);
2320     ots->lookup_count = htonll(0);              /* XXX */
2321     ots->matched_count = htonll(0);             /* XXX */
2322
2323     queue_tx(msg, ofconn, ofconn->reply_counter);
2324     return 0;
2325 }
2326
2327 static int
2328 handle_port_stats_request(struct ofproto *p, struct ofconn *ofconn,
2329                           struct ofp_stats_request *request)
2330 {
2331     struct ofp_port_stats *ops;
2332     struct ofpbuf *msg;
2333     struct ofport *port;
2334     unsigned int port_no;
2335
2336     msg = start_stats_reply(request, sizeof *ops * 16);
2337     PORT_ARRAY_FOR_EACH (port, &p->ports, port_no) {
2338         struct netdev_stats stats;
2339
2340         /* Intentionally ignore return value, since errors will set 'stats' to
2341          * all-1s, which is correct for OpenFlow, and netdev_get_stats() will
2342          * log errors. */
2343         netdev_get_stats(port->netdev, &stats);
2344
2345         ops = append_stats_reply(sizeof *ops, ofconn, &msg);
2346         ops->port_no = htons(odp_port_to_ofp_port(port_no));
2347         memset(ops->pad, 0, sizeof ops->pad);
2348         ops->rx_packets = htonll(stats.rx_packets);
2349         ops->tx_packets = htonll(stats.tx_packets);
2350         ops->rx_bytes = htonll(stats.rx_bytes);
2351         ops->tx_bytes = htonll(stats.tx_bytes);
2352         ops->rx_dropped = htonll(stats.rx_dropped);
2353         ops->tx_dropped = htonll(stats.tx_dropped);
2354         ops->rx_errors = htonll(stats.rx_errors);
2355         ops->tx_errors = htonll(stats.tx_errors);
2356         ops->rx_frame_err = htonll(stats.rx_frame_errors);
2357         ops->rx_over_err = htonll(stats.rx_over_errors);
2358         ops->rx_crc_err = htonll(stats.rx_crc_errors);
2359         ops->collisions = htonll(stats.collisions);
2360     }
2361
2362     queue_tx(msg, ofconn, ofconn->reply_counter);
2363     return 0;
2364 }
2365
2366 struct flow_stats_cbdata {
2367     struct ofproto *ofproto;
2368     struct ofconn *ofconn;
2369     uint16_t out_port;
2370     struct ofpbuf *msg;
2371 };
2372
2373 static void
2374 query_stats(struct ofproto *p, struct rule *rule,
2375             uint64_t *packet_countp, uint64_t *byte_countp)
2376 {
2377     uint64_t packet_count, byte_count;
2378     struct rule *subrule;
2379     struct odp_flow *odp_flows;
2380     size_t n_odp_flows;
2381
2382     n_odp_flows = rule->cr.wc.wildcards ? list_size(&rule->list) : 1;
2383     odp_flows = xcalloc(1, n_odp_flows * sizeof *odp_flows);
2384     if (rule->cr.wc.wildcards) {
2385         size_t i = 0;
2386         LIST_FOR_EACH (subrule, struct rule, list, &rule->list) {
2387             odp_flows[i++].key = subrule->cr.flow;
2388         }
2389     } else {
2390         odp_flows[0].key = rule->cr.flow;
2391     }
2392
2393     packet_count = rule->packet_count;
2394     byte_count = rule->byte_count;
2395     if (!dpif_flow_get_multiple(p->dpif, odp_flows, n_odp_flows)) {
2396         size_t i;
2397         for (i = 0; i < n_odp_flows; i++) {
2398             struct odp_flow *odp_flow = &odp_flows[i];
2399             packet_count += odp_flow->stats.n_packets;
2400             byte_count += odp_flow->stats.n_bytes;
2401         }
2402     }
2403     free(odp_flows);
2404
2405     *packet_countp = packet_count;
2406     *byte_countp = byte_count;
2407 }
2408
2409 static void
2410 flow_stats_cb(struct cls_rule *rule_, void *cbdata_)
2411 {
2412     struct rule *rule = rule_from_cls_rule(rule_);
2413     struct flow_stats_cbdata *cbdata = cbdata_;
2414     struct ofp_flow_stats *ofs;
2415     uint64_t packet_count, byte_count;
2416     size_t act_len, len;
2417
2418     if (rule_is_hidden(rule) || !rule_has_out_port(rule, cbdata->out_port)) {
2419         return;
2420     }
2421
2422     act_len = sizeof *rule->actions * rule->n_actions;
2423     len = offsetof(struct ofp_flow_stats, actions) + act_len;
2424
2425     query_stats(cbdata->ofproto, rule, &packet_count, &byte_count);
2426
2427     ofs = append_stats_reply(len, cbdata->ofconn, &cbdata->msg);
2428     ofs->length = htons(len);
2429     ofs->table_id = rule->cr.wc.wildcards ? TABLEID_CLASSIFIER : TABLEID_HASH;
2430     ofs->pad = 0;
2431     flow_to_match(&rule->cr.flow, rule->cr.wc.wildcards, &ofs->match);
2432     ofs->duration = htonl((time_msec() - rule->created) / 1000);
2433     ofs->priority = htons(rule->cr.priority);
2434     ofs->idle_timeout = htons(rule->idle_timeout);
2435     ofs->hard_timeout = htons(rule->hard_timeout);
2436     memset(ofs->pad2, 0, sizeof ofs->pad2);
2437     ofs->packet_count = htonll(packet_count);
2438     ofs->byte_count = htonll(byte_count);
2439     memcpy(ofs->actions, rule->actions, act_len);
2440 }
2441
2442 static int
2443 table_id_to_include(uint8_t table_id)
2444 {
2445     return (table_id == TABLEID_HASH ? CLS_INC_EXACT
2446             : table_id == TABLEID_CLASSIFIER ? CLS_INC_WILD
2447             : table_id == 0xff ? CLS_INC_ALL
2448             : 0);
2449 }
2450
2451 static int
2452 handle_flow_stats_request(struct ofproto *p, struct ofconn *ofconn,
2453                           const struct ofp_stats_request *osr,
2454                           size_t arg_size)
2455 {
2456     struct ofp_flow_stats_request *fsr;
2457     struct flow_stats_cbdata cbdata;
2458     struct cls_rule target;
2459
2460     if (arg_size != sizeof *fsr) {
2461         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_LENGTH);
2462     }
2463     fsr = (struct ofp_flow_stats_request *) osr->body;
2464
2465     COVERAGE_INC(ofproto_flows_req);
2466     cbdata.ofproto = p;
2467     cbdata.ofconn = ofconn;
2468     cbdata.out_port = fsr->out_port;
2469     cbdata.msg = start_stats_reply(osr, 1024);
2470     cls_rule_from_match(&target, &fsr->match, 0);
2471     classifier_for_each_match(&p->cls, &target,
2472                               table_id_to_include(fsr->table_id),
2473                               flow_stats_cb, &cbdata);
2474     queue_tx(cbdata.msg, ofconn, ofconn->reply_counter);
2475     return 0;
2476 }
2477
2478 struct aggregate_stats_cbdata {
2479     struct ofproto *ofproto;
2480     uint16_t out_port;
2481     uint64_t packet_count;
2482     uint64_t byte_count;
2483     uint32_t n_flows;
2484 };
2485
2486 static void
2487 aggregate_stats_cb(struct cls_rule *rule_, void *cbdata_)
2488 {
2489     struct rule *rule = rule_from_cls_rule(rule_);
2490     struct aggregate_stats_cbdata *cbdata = cbdata_;
2491     uint64_t packet_count, byte_count;
2492
2493     if (rule_is_hidden(rule) || !rule_has_out_port(rule, cbdata->out_port)) {
2494         return;
2495     }
2496
2497     query_stats(cbdata->ofproto, rule, &packet_count, &byte_count);
2498
2499     cbdata->packet_count += packet_count;
2500     cbdata->byte_count += byte_count;
2501     cbdata->n_flows++;
2502 }
2503
2504 static int
2505 handle_aggregate_stats_request(struct ofproto *p, struct ofconn *ofconn,
2506                                const struct ofp_stats_request *osr,
2507                                size_t arg_size)
2508 {
2509     struct ofp_aggregate_stats_request *asr;
2510     struct ofp_aggregate_stats_reply *reply;
2511     struct aggregate_stats_cbdata cbdata;
2512     struct cls_rule target;
2513     struct ofpbuf *msg;
2514
2515     if (arg_size != sizeof *asr) {
2516         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_LENGTH);
2517     }
2518     asr = (struct ofp_aggregate_stats_request *) osr->body;
2519
2520     COVERAGE_INC(ofproto_agg_request);
2521     cbdata.ofproto = p;
2522     cbdata.out_port = asr->out_port;
2523     cbdata.packet_count = 0;
2524     cbdata.byte_count = 0;
2525     cbdata.n_flows = 0;
2526     cls_rule_from_match(&target, &asr->match, 0);
2527     classifier_for_each_match(&p->cls, &target,
2528                               table_id_to_include(asr->table_id),
2529                               aggregate_stats_cb, &cbdata);
2530
2531     msg = start_stats_reply(osr, sizeof *reply);
2532     reply = append_stats_reply(sizeof *reply, ofconn, &msg);
2533     reply->flow_count = htonl(cbdata.n_flows);
2534     reply->packet_count = htonll(cbdata.packet_count);
2535     reply->byte_count = htonll(cbdata.byte_count);
2536     queue_tx(msg, ofconn, ofconn->reply_counter);
2537     return 0;
2538 }
2539
2540 static int
2541 handle_stats_request(struct ofproto *p, struct ofconn *ofconn,
2542                      struct ofp_header *oh)
2543 {
2544     struct ofp_stats_request *osr;
2545     size_t arg_size;
2546     int error;
2547
2548     error = check_ofp_message_array(oh, OFPT_STATS_REQUEST, sizeof *osr,
2549                                     1, &arg_size);
2550     if (error) {
2551         return error;
2552     }
2553     osr = (struct ofp_stats_request *) oh;
2554
2555     switch (ntohs(osr->type)) {
2556     case OFPST_DESC:
2557         return handle_desc_stats_request(p, ofconn, osr);
2558
2559     case OFPST_FLOW:
2560         return handle_flow_stats_request(p, ofconn, osr, arg_size);
2561
2562     case OFPST_AGGREGATE:
2563         return handle_aggregate_stats_request(p, ofconn, osr, arg_size);
2564
2565     case OFPST_TABLE:
2566         return handle_table_stats_request(p, ofconn, osr);
2567
2568     case OFPST_PORT:
2569         return handle_port_stats_request(p, ofconn, osr);
2570
2571     case OFPST_VENDOR:
2572         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_VENDOR);
2573
2574     default:
2575         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_STAT);
2576     }
2577 }
2578
2579 static long long int
2580 msec_from_nsec(uint64_t sec, uint32_t nsec)
2581 {
2582     return !sec ? 0 : sec * 1000 + nsec / 1000000;
2583 }
2584
2585 static void
2586 update_time(struct rule *rule, const struct odp_flow_stats *stats)
2587 {
2588     long long int used = msec_from_nsec(stats->used_sec, stats->used_nsec);
2589     if (used > rule->used) {
2590         rule->used = used;
2591     }
2592 }
2593
2594 static void
2595 update_stats(struct rule *rule, const struct odp_flow_stats *stats)
2596 {
2597     update_time(rule, stats);
2598     rule->packet_count += stats->n_packets;
2599     rule->byte_count += stats->n_bytes;
2600     rule->tcp_flags |= stats->tcp_flags;
2601     if (stats->n_packets) {
2602         rule->ip_tos = stats->ip_tos;
2603     }
2604 }
2605
2606 static int
2607 add_flow(struct ofproto *p, struct ofconn *ofconn,
2608          struct ofp_flow_mod *ofm, size_t n_actions)
2609 {
2610     struct ofpbuf *packet;
2611     struct rule *rule;
2612     uint16_t in_port;
2613     int error;
2614
2615     rule = rule_create(NULL, (const union ofp_action *) ofm->actions,
2616                        n_actions, ntohs(ofm->idle_timeout),
2617                        ntohs(ofm->hard_timeout));
2618     cls_rule_from_match(&rule->cr, &ofm->match, ntohs(ofm->priority));
2619
2620     packet = NULL;
2621     error = 0;
2622     if (ofm->buffer_id != htonl(UINT32_MAX)) {
2623         error = pktbuf_retrieve(ofconn->pktbuf, ntohl(ofm->buffer_id),
2624                                 &packet, &in_port);
2625     }
2626
2627     rule_insert(p, rule, packet, in_port);
2628     ofpbuf_delete(packet);
2629     return error;
2630 }
2631
2632 static int
2633 modify_flow(struct ofproto *p, const struct ofp_flow_mod *ofm,
2634             size_t n_actions, uint16_t command, struct rule *rule)
2635 {
2636     if (rule_is_hidden(rule)) {
2637         return 0;
2638     }
2639
2640     if (command == OFPFC_DELETE) {
2641         rule_remove(p, rule);
2642     } else {
2643         size_t actions_len = n_actions * sizeof *rule->actions;
2644
2645         if (n_actions == rule->n_actions
2646             && !memcmp(ofm->actions, rule->actions, actions_len))
2647         {
2648             return 0;
2649         }
2650
2651         free(rule->actions);
2652         rule->actions = xmemdup(ofm->actions, actions_len);
2653         rule->n_actions = n_actions;
2654
2655         if (rule->cr.wc.wildcards) {
2656             COVERAGE_INC(ofproto_mod_wc_flow);
2657             p->need_revalidate = true;
2658         } else {
2659             rule_update_actions(p, rule);
2660         }
2661     }
2662
2663     return 0;
2664 }
2665
2666 static int
2667 modify_flows_strict(struct ofproto *p, const struct ofp_flow_mod *ofm,
2668                     size_t n_actions, uint16_t command)
2669 {
2670     struct rule *rule;
2671     uint32_t wildcards;
2672     flow_t flow;
2673
2674     flow_from_match(&flow, &wildcards, &ofm->match);
2675     rule = rule_from_cls_rule(classifier_find_rule_exactly(
2676                                   &p->cls, &flow, wildcards,
2677                                   ntohs(ofm->priority)));
2678
2679     if (rule) {
2680         if (command == OFPFC_DELETE
2681             && ofm->out_port != htons(OFPP_NONE)
2682             && !rule_has_out_port(rule, ofm->out_port)) {
2683             return 0;
2684         }
2685
2686         modify_flow(p, ofm, n_actions, command, rule);
2687     }
2688     return 0;
2689 }
2690
2691 struct modify_flows_cbdata {
2692     struct ofproto *ofproto;
2693     const struct ofp_flow_mod *ofm;
2694     uint16_t out_port;
2695     size_t n_actions;
2696     uint16_t command;
2697 };
2698
2699 static void
2700 modify_flows_cb(struct cls_rule *rule_, void *cbdata_)
2701 {
2702     struct rule *rule = rule_from_cls_rule(rule_);
2703     struct modify_flows_cbdata *cbdata = cbdata_;
2704
2705     if (cbdata->out_port != htons(OFPP_NONE)
2706         && !rule_has_out_port(rule, cbdata->out_port)) {
2707         return;
2708     }
2709
2710     modify_flow(cbdata->ofproto, cbdata->ofm, cbdata->n_actions,
2711                 cbdata->command, rule);
2712 }
2713
2714 static int
2715 modify_flows_loose(struct ofproto *p, const struct ofp_flow_mod *ofm,
2716                    size_t n_actions, uint16_t command)
2717 {
2718     struct modify_flows_cbdata cbdata;
2719     struct cls_rule target;
2720
2721     cbdata.ofproto = p;
2722     cbdata.ofm = ofm;
2723     cbdata.out_port = (command == OFPFC_DELETE ? ofm->out_port
2724                        : htons(OFPP_NONE));
2725     cbdata.n_actions = n_actions;
2726     cbdata.command = command;
2727
2728     cls_rule_from_match(&target, &ofm->match, 0);
2729
2730     classifier_for_each_match(&p->cls, &target, CLS_INC_ALL,
2731                               modify_flows_cb, &cbdata);
2732     return 0;
2733 }
2734
2735 static int
2736 handle_flow_mod(struct ofproto *p, struct ofconn *ofconn,
2737                 struct ofp_flow_mod *ofm)
2738 {
2739     size_t n_actions;
2740     int error;
2741
2742     error = check_ofp_message_array(&ofm->header, OFPT_FLOW_MOD, sizeof *ofm,
2743                                     sizeof *ofm->actions, &n_actions);
2744     if (error) {
2745         return error;
2746     }
2747
2748     normalize_match(&ofm->match);
2749     if (!ofm->match.wildcards) {
2750         ofm->priority = htons(UINT16_MAX);
2751     }
2752
2753     error = validate_actions((const union ofp_action *) ofm->actions,
2754                              n_actions, p->max_ports);
2755     if (error) {
2756         return error;
2757     }
2758
2759     switch (ntohs(ofm->command)) {
2760     case OFPFC_ADD:
2761         return add_flow(p, ofconn, ofm, n_actions);
2762
2763     case OFPFC_MODIFY:
2764         return modify_flows_loose(p, ofm, n_actions, OFPFC_MODIFY);
2765
2766     case OFPFC_MODIFY_STRICT:
2767         return modify_flows_strict(p, ofm, n_actions, OFPFC_MODIFY);
2768
2769     case OFPFC_DELETE:
2770         return modify_flows_loose(p, ofm, n_actions, OFPFC_DELETE);
2771
2772     case OFPFC_DELETE_STRICT:
2773         return modify_flows_strict(p, ofm, n_actions, OFPFC_DELETE);
2774
2775     default:
2776         return ofp_mkerr(OFPET_FLOW_MOD_FAILED, OFPFMFC_BAD_COMMAND);
2777     }
2778 }
2779
2780 static void
2781 send_capability_reply(struct ofproto *p, struct ofconn *ofconn, uint32_t xid)
2782 {
2783     struct ofmp_capability_reply *ocr;
2784     struct ofpbuf *b;
2785     char capabilities[] = "com.nicira.mgmt.manager=false\n";
2786
2787     ocr = make_openflow_xid(sizeof(*ocr), OFPT_VENDOR, xid, &b);
2788     ocr->header.header.vendor = htonl(NX_VENDOR_ID);
2789     ocr->header.header.subtype = htonl(NXT_MGMT);
2790     ocr->header.type = htons(OFMPT_CAPABILITY_REPLY);
2791
2792     ocr->format = htonl(OFMPCOF_SIMPLE);
2793     ocr->mgmt_id = htonll(p->mgmt_id);
2794
2795     ofpbuf_put(b, capabilities, strlen(capabilities));
2796
2797     queue_tx(b, ofconn, ofconn->reply_counter);
2798 }
2799
2800 static int
2801 handle_ofmp(struct ofproto *p, struct ofconn *ofconn, 
2802             struct ofmp_header *ofmph)
2803 {
2804     size_t msg_len = ntohs(ofmph->header.header.length);
2805     if (msg_len < sizeof(*ofmph)) {
2806         VLOG_WARN_RL(&rl, "dropping short managment message: %d\n", msg_len);
2807         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_LENGTH);
2808     }
2809
2810     if (ofmph->type == htons(OFMPT_CAPABILITY_REQUEST)) {
2811         struct ofmp_capability_request *ofmpcr;
2812
2813         if (msg_len < sizeof(struct ofmp_capability_request)) {
2814             VLOG_WARN_RL(&rl, "dropping short capability request: %d\n", 
2815                     msg_len);
2816             return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_LENGTH);
2817         }
2818
2819         ofmpcr = (struct ofmp_capability_request *)ofmph;
2820         if (ofmpcr->format != htonl(OFMPCAF_SIMPLE)) {
2821             /* xxx Find a better type than bad subtype */
2822             return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_SUBTYPE);
2823         }
2824
2825         send_capability_reply(p, ofconn, ofmph->header.header.xid);
2826         return 0;
2827     } else {
2828         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_SUBTYPE);
2829     }
2830 }
2831
2832 static int
2833 handle_vendor(struct ofproto *p, struct ofconn *ofconn, void *msg)
2834 {
2835     struct ofp_vendor_header *ovh = msg;
2836     struct nicira_header *nh;
2837
2838     if (ntohs(ovh->header.length) < sizeof(struct ofp_vendor_header)) {
2839         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_LENGTH);
2840     }
2841     if (ovh->vendor != htonl(NX_VENDOR_ID)) {
2842         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_VENDOR);
2843     }
2844     if (ntohs(ovh->header.length) < sizeof(struct nicira_header)) {
2845         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_LENGTH);
2846     }
2847
2848     nh = msg;
2849     switch (ntohl(nh->subtype)) {
2850     case NXT_STATUS_REQUEST:
2851         return switch_status_handle_request(p->switch_status, ofconn->rconn,
2852                                             msg);
2853
2854     case NXT_ACT_SET_CONFIG:
2855         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_SUBTYPE); /* XXX */
2856
2857     case NXT_ACT_GET_CONFIG:
2858         return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_SUBTYPE); /* XXX */
2859
2860     case NXT_COMMAND_REQUEST:
2861         if (p->executer) {
2862             return executer_handle_request(p->executer, ofconn->rconn, msg);
2863         }
2864         break;
2865
2866     case NXT_MGMT:
2867         return handle_ofmp(p, ofconn, msg);
2868     }
2869
2870     return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_SUBTYPE);
2871 }
2872
2873 static void
2874 handle_openflow(struct ofconn *ofconn, struct ofproto *p,
2875                 struct ofpbuf *ofp_msg)
2876 {
2877     struct ofp_header *oh = ofp_msg->data;
2878     int error;
2879
2880     COVERAGE_INC(ofproto_recv_openflow);
2881     switch (oh->type) {
2882     case OFPT_ECHO_REQUEST:
2883         error = handle_echo_request(ofconn, oh);
2884         break;
2885
2886     case OFPT_ECHO_REPLY:
2887         error = 0;
2888         break;
2889
2890     case OFPT_FEATURES_REQUEST:
2891         error = handle_features_request(p, ofconn, oh);
2892         break;
2893
2894     case OFPT_GET_CONFIG_REQUEST:
2895         error = handle_get_config_request(p, ofconn, oh);
2896         break;
2897
2898     case OFPT_SET_CONFIG:
2899         error = handle_set_config(p, ofconn, ofp_msg->data);
2900         break;
2901
2902     case OFPT_PACKET_OUT:
2903         error = handle_packet_out(p, ofconn, ofp_msg->data);
2904         break;
2905
2906     case OFPT_PORT_MOD:
2907         error = handle_port_mod(p, oh);
2908         break;
2909
2910     case OFPT_FLOW_MOD:
2911         error = handle_flow_mod(p, ofconn, ofp_msg->data);
2912         break;
2913
2914     case OFPT_STATS_REQUEST:
2915         error = handle_stats_request(p, ofconn, oh);
2916         break;
2917
2918     case OFPT_VENDOR:
2919         error = handle_vendor(p, ofconn, ofp_msg->data);
2920         break;
2921
2922     default:
2923         if (VLOG_IS_WARN_ENABLED()) {
2924             char *s = ofp_to_string(oh, ntohs(oh->length), 2);
2925             VLOG_DBG_RL(&rl, "OpenFlow message ignored: %s", s);
2926             free(s);
2927         }
2928         error = ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_TYPE);
2929         break;
2930     }
2931
2932     if (error) {
2933         send_error_oh(ofconn, ofp_msg->data, error);
2934     }
2935 }
2936 \f
2937 static void
2938 handle_odp_msg(struct ofproto *p, struct ofpbuf *packet)
2939 {
2940     struct odp_msg *msg = packet->data;
2941     uint16_t in_port = odp_port_to_ofp_port(msg->port);
2942     struct rule *rule;
2943     struct ofpbuf payload;
2944     flow_t flow;
2945
2946     /* Handle controller actions. */
2947     if (msg->type == _ODPL_ACTION_NR) {
2948         COVERAGE_INC(ofproto_ctlr_action);
2949         pinsched_send(p->action_sched, in_port, packet,
2950                       send_packet_in_action, p);
2951         return;
2952     }
2953
2954     payload.data = msg + 1;
2955     payload.size = msg->length - sizeof *msg;
2956     flow_extract(&payload, msg->port, &flow);
2957
2958     rule = lookup_valid_rule(p, &flow);
2959     if (!rule) {
2960         /* Don't send a packet-in if OFPPC_NO_PACKET_IN asserted. */
2961         struct ofport *port = port_array_get(&p->ports, msg->port);
2962         if (port) {
2963             if (port->opp.config & OFPPC_NO_PACKET_IN) {
2964                 COVERAGE_INC(ofproto_no_packet_in);
2965                 /* XXX install 'drop' flow entry */
2966                 ofpbuf_delete(packet);
2967                 return;
2968             }
2969         } else {
2970             VLOG_WARN_RL(&rl, "packet-in on unknown port %"PRIu16, msg->port);
2971         }
2972
2973         COVERAGE_INC(ofproto_packet_in);
2974         pinsched_send(p->miss_sched, in_port, packet, send_packet_in_miss, p);
2975         return;
2976     }
2977
2978     if (rule->cr.wc.wildcards) {
2979         rule = rule_create_subrule(p, rule, &flow);
2980         rule_make_actions(p, rule, packet);
2981     } else {
2982         if (!rule->may_install) {
2983             /* The rule is not installable, that is, we need to process every
2984              * packet, so process the current packet and set its actions into
2985              * 'subrule'. */
2986             rule_make_actions(p, rule, packet);
2987         } else {
2988             /* XXX revalidate rule if it needs it */
2989         }
2990     }
2991
2992     rule_execute(p, rule, &payload, &flow);
2993     rule_reinstall(p, rule);
2994     ofpbuf_delete(packet);
2995 }
2996 \f
2997 static void
2998 revalidate_cb(struct cls_rule *sub_, void *cbdata_)
2999 {
3000     struct rule *sub = rule_from_cls_rule(sub_);
3001     struct revalidate_cbdata *cbdata = cbdata_;
3002
3003     if (cbdata->revalidate_all
3004         || (cbdata->revalidate_subrules && sub->super)
3005         || (tag_set_intersects(&cbdata->revalidate_set, sub->tags))) {
3006         revalidate_rule(cbdata->ofproto, sub);
3007     }
3008 }
3009
3010 static bool
3011 revalidate_rule(struct ofproto *p, struct rule *rule)
3012 {
3013     const flow_t *flow = &rule->cr.flow;
3014
3015     COVERAGE_INC(ofproto_revalidate_rule);
3016     if (rule->super) {
3017         struct rule *super;
3018         super = rule_from_cls_rule(classifier_lookup_wild(&p->cls, flow));
3019         if (!super) {
3020             rule_remove(p, rule);
3021             return false;
3022         } else if (super != rule->super) {
3023             COVERAGE_INC(ofproto_revalidate_moved);
3024             list_remove(&rule->list);
3025             list_push_back(&super->list, &rule->list);
3026             rule->super = super;
3027             rule->hard_timeout = super->hard_timeout;
3028             rule->idle_timeout = super->idle_timeout;
3029             rule->created = super->created;
3030             rule->used = 0;
3031         }
3032     }
3033
3034     rule_update_actions(p, rule);
3035     return true;
3036 }
3037
3038 static struct ofpbuf *
3039 compose_flow_exp(const struct rule *rule, long long int now, uint8_t reason)
3040 {
3041     struct ofp_flow_expired *ofe;
3042     struct ofpbuf *buf;
3043
3044     ofe = make_openflow(sizeof *ofe, OFPT_FLOW_EXPIRED, &buf);
3045     flow_to_match(&rule->cr.flow, rule->cr.wc.wildcards, &ofe->match);
3046     ofe->priority = htons(rule->cr.priority);
3047     ofe->reason = reason;
3048     ofe->duration = (now - rule->created) / 1000;
3049     ofe->packet_count = rule->packet_count;
3050     ofe->byte_count = rule->byte_count;
3051
3052     return buf;
3053 }
3054
3055 static void
3056 send_flow_exp(struct ofproto *p, struct rule *rule,
3057               long long int now, uint8_t reason)
3058 {
3059     struct ofconn *ofconn;
3060     struct ofconn *prev;
3061     struct ofpbuf *buf;
3062
3063     /* We limit the maximum number of queued flow expirations it by accounting
3064      * them under the counter for replies.  That works because preventing
3065      * OpenFlow requests from being processed also prevents new flows from
3066      * being added (and expiring).  (It also prevents processing OpenFlow
3067      * requests that would not add new flows, so it is imperfect.) */
3068
3069     prev = NULL;
3070     LIST_FOR_EACH (ofconn, struct ofconn, node, &p->all_conns) {
3071         if (ofconn->send_flow_exp && rconn_is_connected(ofconn->rconn)) {
3072             if (prev) {
3073                 queue_tx(ofpbuf_clone(buf), prev, ofconn->reply_counter);
3074             } else {
3075                 buf = compose_flow_exp(rule, now, reason);
3076             }
3077             prev = ofconn;
3078         }
3079     }
3080     if (prev) {
3081         queue_tx(buf, prev, ofconn->reply_counter);
3082     }
3083 }
3084
3085 static void
3086 uninstall_idle_flow(struct ofproto *ofproto, struct rule *rule)
3087 {
3088     assert(rule->installed);
3089     assert(!rule->cr.wc.wildcards);
3090
3091     if (rule->super) {
3092         rule_remove(ofproto, rule);
3093     } else {
3094         rule_uninstall(ofproto, rule);
3095     }
3096 }
3097
3098 static void
3099 expire_rule(struct cls_rule *cls_rule, void *p_)
3100 {
3101     struct ofproto *p = p_;
3102     struct rule *rule = rule_from_cls_rule(cls_rule);
3103     long long int hard_expire, idle_expire, expire, now;
3104
3105     hard_expire = (rule->hard_timeout
3106                    ? rule->created + rule->hard_timeout * 1000
3107                    : LLONG_MAX);
3108     idle_expire = (rule->idle_timeout
3109                    && (rule->super || list_is_empty(&rule->list))
3110                    ? rule->used + rule->idle_timeout * 1000
3111                    : LLONG_MAX);
3112     expire = MIN(hard_expire, idle_expire);
3113     if (expire == LLONG_MAX) {
3114         if (rule->installed && time_msec() >= rule->used + 5000) {
3115             uninstall_idle_flow(p, rule);
3116         }
3117         return;
3118     }
3119
3120     now = time_msec();
3121     if (now < expire) {
3122         if (rule->installed && now >= rule->used + 5000) {
3123             uninstall_idle_flow(p, rule);
3124         }
3125         return;
3126     }
3127
3128     COVERAGE_INC(ofproto_expired);
3129     if (rule->cr.wc.wildcards) {
3130         /* Update stats.  (This code will be a no-op if the rule expired
3131          * due to an idle timeout, because in that case the rule has no
3132          * subrules left.) */
3133         struct rule *subrule, *next;
3134         LIST_FOR_EACH_SAFE (subrule, next, struct rule, list, &rule->list) {
3135             rule_remove(p, subrule);
3136         }
3137     }
3138
3139     send_flow_exp(p, rule, now,
3140                   (now >= hard_expire
3141                    ? OFPER_HARD_TIMEOUT : OFPER_IDLE_TIMEOUT));
3142     rule_remove(p, rule);
3143 }
3144
3145 static void
3146 update_used(struct ofproto *p)
3147 {
3148     struct odp_flow *flows;
3149     size_t n_flows;
3150     size_t i;
3151     int error;
3152
3153     error = dpif_flow_list_all(p->dpif, &flows, &n_flows);
3154     if (error) {
3155         return;
3156     }
3157
3158     for (i = 0; i < n_flows; i++) {
3159         struct odp_flow *f = &flows[i];
3160         struct rule *rule;
3161
3162         rule = rule_from_cls_rule(
3163             classifier_find_rule_exactly(&p->cls, &f->key, 0, UINT16_MAX));
3164         if (!rule || !rule->installed) {
3165             COVERAGE_INC(ofproto_unexpected_rule);
3166             dpif_flow_del(p->dpif, f);
3167             continue;
3168         }
3169
3170         update_time(rule, &f->stats);
3171         rule_account(p, rule, f->stats.n_bytes);
3172     }
3173     free(flows);
3174 }
3175
3176 static void
3177 do_send_packet_in(struct ofconn *ofconn, uint32_t buffer_id,
3178                   const struct ofpbuf *packet, int send_len)
3179 {
3180     struct ofp_packet_in *opi;
3181     struct ofpbuf payload, *buf;
3182     struct odp_msg *msg;
3183
3184     msg = packet->data;
3185     payload.data = msg + 1;
3186     payload.size = msg->length - sizeof *msg;
3187
3188     send_len = MIN(send_len, payload.size);
3189     buf = ofpbuf_new(sizeof *opi + send_len);
3190     opi = put_openflow_xid(offsetof(struct ofp_packet_in, data),
3191                            OFPT_PACKET_IN, 0, buf);
3192     opi->buffer_id = htonl(buffer_id);
3193     opi->total_len = htons(payload.size);
3194     opi->in_port = htons(odp_port_to_ofp_port(msg->port));
3195     opi->reason = msg->type == _ODPL_ACTION_NR ? OFPR_ACTION : OFPR_NO_MATCH;
3196     ofpbuf_put(buf, payload.data, MIN(send_len, payload.size));
3197     update_openflow_length(buf);
3198     rconn_send_with_limit(ofconn->rconn, buf, ofconn->packet_in_counter, 100);
3199 }
3200
3201 static void
3202 send_packet_in_action(struct ofpbuf *packet, void *p_)
3203 {
3204     struct ofproto *p = p_;
3205     struct ofconn *ofconn;
3206     struct odp_msg *msg;
3207
3208     msg = packet->data;
3209     LIST_FOR_EACH (ofconn, struct ofconn, node, &p->all_conns) {
3210         if (ofconn == p->controller || ofconn->miss_send_len) {
3211             do_send_packet_in(ofconn, UINT32_MAX, packet, msg->arg);
3212         }
3213     }
3214     ofpbuf_delete(packet);
3215 }
3216
3217 static void
3218 send_packet_in_miss(struct ofpbuf *packet, void *p_)
3219 {
3220     struct ofproto *p = p_;
3221     struct ofconn *ofconn;
3222     struct ofpbuf payload;
3223     struct odp_msg *msg;
3224
3225     msg = packet->data;
3226     payload.data = msg + 1;
3227     payload.size = msg->length - sizeof *msg;
3228     LIST_FOR_EACH (ofconn, struct ofconn, node, &p->all_conns) {
3229         if (ofconn->miss_send_len) {
3230             uint32_t buffer_id = pktbuf_save(ofconn->pktbuf, &payload,
3231                                              msg->port);
3232             int send_len = (buffer_id != UINT32_MAX ? ofconn->miss_send_len
3233                             : UINT32_MAX);
3234             do_send_packet_in(ofconn, buffer_id, packet, send_len);
3235         }
3236     }
3237     ofpbuf_delete(packet);
3238 }
3239
3240 static uint64_t
3241 pick_datapath_id(const struct ofproto *ofproto)
3242 {
3243     const struct ofport *port;
3244
3245     port = port_array_get(&ofproto->ports, ODPP_LOCAL);
3246     if (port) {
3247         uint8_t ea[ETH_ADDR_LEN];
3248         int error;
3249
3250         error = netdev_get_etheraddr(port->netdev, ea);
3251         if (!error) {
3252             return eth_addr_to_uint64(ea);
3253         }
3254         VLOG_WARN("could not get MAC address for %s (%s)",
3255                   netdev_get_name(port->netdev), strerror(error));
3256     }
3257     return ofproto->fallback_dpid;
3258 }
3259
3260 static uint64_t
3261 pick_fallback_dpid(void)
3262 {
3263     uint8_t ea[ETH_ADDR_LEN];
3264     eth_addr_random(ea);
3265     ea[0] = 0x00;               /* Set Nicira OUI. */
3266     ea[1] = 0x23;
3267     ea[2] = 0x20;
3268     return eth_addr_to_uint64(ea);
3269 }
3270 \f
3271 static bool
3272 default_normal_ofhook_cb(const flow_t *flow, const struct ofpbuf *packet,
3273                          struct odp_actions *actions, tag_type *tags,
3274                          void *ofproto_)
3275 {
3276     struct ofproto *ofproto = ofproto_;
3277     int out_port;
3278
3279     /* Drop frames for reserved multicast addresses. */
3280     if (eth_addr_is_reserved(flow->dl_dst)) {
3281         return true;
3282     }
3283
3284     /* Learn source MAC (but don't try to learn from revalidation). */
3285     if (packet != NULL) {
3286         tag_type rev_tag = mac_learning_learn(ofproto->ml, flow->dl_src,
3287                                               0, flow->in_port);
3288         if (rev_tag) {
3289             /* The log messages here could actually be useful in debugging,
3290              * so keep the rate limit relatively high. */
3291             static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30, 300);
3292             VLOG_DBG_RL(&rl, "learned that "ETH_ADDR_FMT" is on port %"PRIu16,
3293                         ETH_ADDR_ARGS(flow->dl_src), flow->in_port);
3294             ofproto_revalidate(ofproto, rev_tag);
3295         }
3296     }
3297
3298     /* Determine output port. */
3299     out_port = mac_learning_lookup_tag(ofproto->ml, flow->dl_dst, 0, tags);
3300     if (out_port < 0) {
3301         add_output_group_action(actions, DP_GROUP_FLOOD);
3302     } else if (out_port != flow->in_port) {
3303         odp_actions_add(actions, ODPAT_OUTPUT)->output.port = out_port;
3304     } else {
3305         /* Drop. */
3306     }
3307
3308     return true;
3309 }
3310
3311 static const struct ofhooks default_ofhooks = {
3312     NULL,
3313     default_normal_ofhook_cb,
3314     NULL,
3315     NULL
3316 };