Dirk Mueller
8e025c5303
- Don't install INSTALL.* files. - Removed: openvswitch-switch.template - New upstream version 2.4.0 - Flow table modifications are now atomic, meaning that each packet now sees a coherent version of the OpenFlow pipeline. For example, if a controller removes all flows with a single OpenFlow "flow_mod", no packet sees an intermediate version of the OpenFlow pipeline where only some of the flows have been deleted. - Added support for SFQ, FQ_CoDel and CoDel qdiscs. - Add bash command-line completion support for ovs-vsctl Please check utilities/ovs-command-compgen.INSTALL.md for how to use. - The MAC learning feature now includes per-port fairness to mitigate MAC flooding attacks. - New support for a "conjunctive match" OpenFlow extension, which allows constructing OpenFlow matches of the form "field1 in {a,b,c...} AND field2 in {d,e,f...}" and generalizations. For details, see documentation for the "conjunction" action in ovs-ofctl(8). - Add bash command-line completion support for ovs-appctl/ovs-dpctl/ ovs-ofctl/ovsdb-tool commands. Please check utilities/ovs-command-compgen.INSTALL.md for how to use. - The "learn" action supports a new flag "delete_learned" that causes the learned flows to be deleted when the flow with the "learn" action is deleted. - Basic support for the Geneve tunneling protocol. It is not yet possible to generate or match options. This is planned for a future release. The protocol is documented at http://tools.ietf.org/html/draft-gross-geneve-00 - The OVS database now reports controller rate limiting statistics. OBS-URL: https://build.opensuse.org/request/show/361282 OBS-URL: https://build.opensuse.org/package/show/network/openvswitch?expand=0&rev=76
37 lines
1.3 KiB
Diff
37 lines
1.3 KiB
Diff
Index: lib/vlog.c
|
|
===================================================================
|
|
--- lib/vlog.c.orig
|
|
+++ lib/vlog.c
|
|
@@ -273,7 +273,7 @@ set_destination_level(enum vlog_destinat
|
|
ovs_mutex_lock(&log_file_mutex);
|
|
if (!module) {
|
|
struct vlog_module *mp;
|
|
- LIST_FOR_EACH (mp, list, &vlog_modules) {
|
|
+ LIST_FOR_EACH_CHECK (mp, list, &vlog_modules) {
|
|
mp->levels[destination] = level;
|
|
update_min_level(mp);
|
|
}
|
|
@@ -397,7 +397,7 @@ vlog_set_log_file(const char *file_name)
|
|
log_writer = async_append_create(new_log_fd);
|
|
}
|
|
|
|
- LIST_FOR_EACH (mp, list, &vlog_modules) {
|
|
+ LIST_FOR_EACH_CHECK (mp, list, &vlog_modules) {
|
|
update_min_level(mp);
|
|
}
|
|
ovs_mutex_unlock(&log_file_mutex);
|
|
Index: lib/list.h
|
|
===================================================================
|
|
--- lib/list.h.orig
|
|
+++ lib/list.h
|
|
@@ -271,4 +271,9 @@ list_is_short(const struct ovs_list *lis
|
|
return list->next == list->prev;
|
|
}
|
|
|
|
+#define LIST_FOR_EACH_CHECK(ITER, MEMBER, LIST) \
|
|
+ for (ASSIGN_CONTAINER(ITER, (LIST)->next, MEMBER); \
|
|
+ &(ITER)->MEMBER != (LIST) && (ITER)->MEMBER.next != (ITER)->MEMBER.prev; \
|
|
+ ASSIGN_CONTAINER(ITER, (ITER)->MEMBER.next, MEMBER))
|
|
+
|
|
#endif /* list.h */
|