X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=ofproto%2Fofproto-provider.h;h=180ed486bf85bafae3d5daddd1f82da66ce1b413;hb=77ab5fd2a95ba2fef5bbe25aaa429776b9e29ea3;hp=95c1c64811b2b1eeb51025afd5ebdeb7742d9ac0;hpb=82c22d34b5f459bc968fd268112d1e33bd103943;p=cascardo%2Fovs.git diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index 95c1c6481..180ed486b 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc. + * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -78,7 +78,7 @@ struct ofproto { char *sw_desc; /* Software version (NULL for default). */ char *serial_desc; /* Serial number (NULL for default). */ char *dp_desc; /* Datapath description (NULL for default). */ - enum ofp_config_flags frag_handling; /* One of OFPC_*. */ + enum ofputil_frag_handling frag_handling; /* Datapath. */ struct hmap ports; /* Contains "struct ofport"s. */ @@ -256,6 +256,15 @@ struct oftable { #define EVICTION_OPENFLOW (1 << 1) /* Set to 1 if OpenFlow enables eviction. */ unsigned int eviction; + /* If true, vacancy events are enabled; otherwise they are disabled. */ + bool vacancy_enabled; + + /* Non-zero values for vacancy_up and vacancy_down indicates that vacancy + * is enabled by table-mod, else these values are set to zero when + * vacancy is disabled */ + uint8_t vacancy_down; /* Vacancy threshold when space decreases (%). */ + uint8_t vacancy_up; /* Vacancy threshold when space increases (%). */ + atomic_ulong n_matched; atomic_ulong n_missed; }; @@ -473,9 +482,6 @@ extern unsigned ofproto_max_idle; * ofproto-dpif implementation. */ extern size_t n_handlers, n_revalidators; -/* Number of rx queues to be created for each dpdk interface. */ -extern size_t n_dpdk_rxqs; - /* Cpu mask for pmd threads. */ extern char *pmd_cpu_mask; @@ -619,7 +625,7 @@ void ofproto_group_delete_all(struct ofproto *); * not yet been uninitialized, so the "destruct" function may refer to it. The * "destruct" function is not allowed to fail. * - * Each "dealloc" function frees raw memory that was allocated by the the + * Each "dealloc" function frees raw memory that was allocated by the * "alloc" function. The memory's base and derived members might not have ever * been initialized (but if "construct" returned successfully, then it has been * "destruct"ed already). The "dealloc" function is not allowed to fail. @@ -890,12 +896,36 @@ struct ofproto_class { * initialization, and construct and destruct ofports to reflect all of * the changes. * + * - On graceful shutdown, the base ofproto code will destruct all + * the ports. + * * ->port_construct() returns 0 if successful, otherwise a positive errno * value. + * + * + * ->port_destruct() + * ================= + * + * ->port_destruct() takes a 'del' parameter. If the provider implements + * the datapath itself (e.g. dpif-netdev, it can ignore 'del'. On the + * other hand, if the provider is an interface to an external datapath + * (e.g. to a kernel module that implement the datapath) then 'del' should + * influence destruction behavior in the following way: + * + * - If 'del' is true, it should remove the port from the underlying + * implementation. This is the common case. + * + * - If 'del' is false, it should leave the port in the underlying + * implementation. This is used when Open vSwitch is performing a + * graceful shutdown and ensures that, across Open vSwitch restarts, + * the underlying ports are not removed and recreated. That makes an + * important difference for, e.g., "internal" ports that have + * configured IP addresses; without this distinction, the IP address + * and other configured state for the port is lost. */ struct ofport *(*port_alloc)(void); int (*port_construct)(struct ofport *ofport); - void (*port_destruct)(struct ofport *ofport); + void (*port_destruct)(struct ofport *ofport, bool del); void (*port_dealloc)(struct ofport *ofport); /* Called after 'ofport->netdev' is replaced by a new netdev object. If @@ -1226,22 +1256,22 @@ struct ofproto_class { * which takes one of the following values, with the corresponding * meanings: * - * - OFPC_FRAG_NORMAL: The switch should treat IP fragments the same way - * as other packets, omitting TCP and UDP port numbers (always setting - * them to 0). + * - OFPUTIL_FRAG_NORMAL: The switch should treat IP fragments the same + * way as other packets, omitting TCP and UDP port numbers (always + * setting them to 0). * - * - OFPC_FRAG_DROP: The switch should drop all IP fragments without + * - OFPUTIL_FRAG_DROP: The switch should drop all IP fragments without * passing them through the flow table. * - * - OFPC_FRAG_REASM: The switch should reassemble IP fragments before + * - OFPUTIL_FRAG_REASM: The switch should reassemble IP fragments before * passing packets through the flow table. * - * - OFPC_FRAG_NX_MATCH (a Nicira extension): Similar to OFPC_FRAG_NORMAL, - * except that TCP and UDP port numbers should be included in fragments - * with offset 0. + * - OFPUTIL_FRAG_NX_MATCH (a Nicira extension): Similar to + * OFPUTIL_FRAG_NORMAL, except that TCP and UDP port numbers should be + * included in fragments with offset 0. * * Implementations are not required to support every mode. - * OFPC_FRAG_NORMAL is the default mode when an ofproto is created. + * OFPUTIL_FRAG_NORMAL is the default mode when an ofproto is created. * * At the time of the call to ->set_frag_handling(), the current mode is * available in 'ofproto->frag_handling'. ->set_frag_handling() returns @@ -1251,7 +1281,7 @@ struct ofproto_class { * reflect the new mode. */ bool (*set_frag_handling)(struct ofproto *ofproto, - enum ofp_config_flags frag_handling); + enum ofputil_frag_handling frag_handling); /* Implements the OpenFlow OFPT_PACKET_OUT command. The datapath should * execute the 'ofpacts_len' bytes of "struct ofpacts" in 'ofpacts'. @@ -1296,6 +1326,9 @@ struct ofproto_class { const struct ofpact *ofpacts, size_t ofpacts_len); + enum ofperr (*nxt_resume)(struct ofproto *ofproto, + const struct ofputil_packet_in_private *); + /* ## ------------------------- ## */ /* ## OFPP_NORMAL configuration ## */ /* ## ------------------------- ## */ @@ -1762,7 +1795,23 @@ extern const struct ofproto_class ofproto_dpif_class; int ofproto_class_register(const struct ofproto_class *); int ofproto_class_unregister(const struct ofproto_class *); -enum ofperr ofproto_flow_mod(struct ofproto *, struct ofputil_flow_mod *) +/* flow_mod with execution context. */ +struct ofproto_flow_mod { + struct ofputil_flow_mod fm; + + cls_version_t version; /* Version in which changes take + * effect. */ + struct rule_collection old_rules; /* Affected rules. */ + struct rule_collection new_rules; /* Replacement rules. */ +}; + +/* port_mod with execution context. */ +struct ofproto_port_mod { + struct ofputil_port_mod pm; + struct ofport *port; /* Affected port. */ +}; + +enum ofperr ofproto_flow_mod(struct ofproto *, struct ofproto_flow_mod *) OVS_EXCLUDED(ofproto_mutex); void ofproto_add_flow(struct ofproto *, const struct match *, int priority, const struct ofpact *ofpacts, size_t ofpacts_len) @@ -1771,6 +1820,9 @@ void ofproto_delete_flow(struct ofproto *, const struct match *, int priority) OVS_EXCLUDED(ofproto_mutex); void ofproto_flush_flows(struct ofproto *); +enum ofperr ofproto_check_ofpacts(struct ofproto *, + const struct ofpact ofpacts[], + size_t ofpacts_len); static inline const struct rule_actions * rule_get_actions(const struct rule *rule)