<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.network.openvswitch.devel">
    <title>gmane.network.openvswitch.devel</title>
    <link>http://blog.gmane.org/gmane.network.openvswitch.devel</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10819"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10818"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10816"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10815"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10810"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10798"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10797"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10785"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10773"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10745"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10739"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10733"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10732"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10730"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10729"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10724"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10718"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10717"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10702"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.openvswitch.devel/10695"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10819">
    <title>Get back to this office.</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10819</link>
    <description>&lt;pre&gt;Our Ref: RTB /SNT/STB
To.  Beneficiary.

Sir,

I am Special Agent David Jackson and am here in Nigeria as an FBI delegate that has been delegated to investigate this fraudsters who are in the business of swindling Foreigners that came for transaction in Nigeria . Please be informed that during my investigation I got to find out that there is a huge sum of $10.5million that has been assigned in your name and this fraudsters are busy swindling you without any hope of receiving your fund.

NOTE: You are not suppose to pay that hug amount from the beginning before the release of your fund can commence depending on how you want the transfer made to you.

This is to inform you that it is only through Visa Card that you fund will be released to you. It will be shipped to you through the courier service.


We have to inform you that have made some arrested in respect of this delayed over due fund.

I have a very limited time to stay in Nigeria here so I advise you urgently respond to this message .

I shall expect your response as soon as you receive this email.  Please Note that I have attached my Identification to this email. do not inform any of the people that collected money from before now about this new development, to avoid jeopardizing our invention.

Best Regard,
DAVID JACKSON
FEDERAL BUREAU INVESTIGATION NIGERIA DIVISION
INVESTIGATION ON ALL ONLINE WIRE TRANSFER
EMAIL: fbiii-update-online-trransfer1-PkbjNfxxIARBDgjK7y7TUQ&amp;lt; at &amp;gt;public.gmane.org


-------------------------------------------------------------------------------------------------------------------------------------------------------------

Confidentiality Notice: The information in this e-mail and any attachments thereto is intended for the recipient(s) only. This e-mail, including any attachments, may  contain information that is privileged and confidential and subject to legal restrictions and penalties regarding its unauthorized disclosure or other use. If you are  not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or the taking of any action or inaction in reliance on the contents of  this e-mail and any of its attachments is STRICTLY PROHIBITED. If you have received this e-mail in error, please immediately notify the sender via return e-mail; delete this e-mail and all attachments from your e-mail system and your computer system and network; and destroy any paper copies you m
 ay have in your possession. Thank you for your cooperation.
&lt;/pre&gt;</description>
    <dc:creator>FBI-FBI</dc:creator>
    <dc:date>2012-05-26T17:52:04</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10818">
    <title>Please View attached to claim your prize.</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10818</link>
    <description>&lt;pre&gt;
&lt;/pre&gt;</description>
    <dc:creator>Mrs. Susan</dc:creator>
    <dc:date>2012-05-26T12:42:32</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10816">
    <title>Participa en el sorteo de un iPad3</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10816</link>
    <description>&lt;pre&gt;Si no visualiza correctamente la newsletter pinche aquí
&amp;lt;http://www.integralecommerce.com/news/newsletter1205php.html&amp;gt;
.
&amp;lt;http://www.integralecommerce.com&amp;gt;

Suscríbete antes del 31 de mayo 

y participarás en el sorteo de 

un Resolucionario Nuevo iPad 3 de apple.
&amp;lt;http://mailing.integralecommerce.com/newsintegral/lists/?p=subscribe&amp;gt;


&amp;lt;http://mailing.integralecommerce.com/newsintegral/lists/?p=subscribe&amp;gt;

Bases del concurso:

 Todos los usuarios que acepten recibir información de
IntegralEcommerce.com o de cualquiera de las tiendas gestionadas por
Transimgrup Serveis SL
&amp;lt;http://mailing.integralecommerce.com/newsintegral/lists/?p=subscribe&amp;gt;

 Recibirá un correo entre el 1 y el 5 de junio con el número para
participar en el sorteo.
 El número ganador deberá coincidir con las 5 cifras del número
premiado en el sorteo de la ONCE del día 08/06/2012.

NUESTRAS TIENDAS GESTIONADAS
http://www.asofert.com

http://www.baro-online.com

http://www.loslicores.com

http://www.hoko-esport.com

http://www.virginianogues.com

http://www.atsoluciones.com

http://www.nualartvidredecorat.com

http://www.otiummarket.com

http://www.bonobonus.com

http://www.gorbelgrup.com



--
Para subscribirse en esta lista visite
http://mailing.integralecommerce.com/newsintegral/lists/?p=subscribe
Para borrarse de esta lista visite
http://mailing.integralecommerce.com/newsintegral/lists/?p=unsubscribe&amp;amp;uid=69dc68ec9e0a8cc245cf59750b8a0746
Reenviar el mensaje a otra persona
http://mailing.integralecommerce.com/newsintegral/lists/?p=forward&amp;amp;uid=69dc68ec9e0a8cc245cf59750b8a0746&amp;amp;mid=6


&lt;/pre&gt;</description>
    <dc:creator>news-Ju2OFlXtBjL2CRcdCeAgGQ&lt; at &gt;public.gmane.org</dc:creator>
    <dc:date>2012-05-25T13:36:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10815">
    <title>[PATCH] ofp-util: Clean up cookie handling.</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10815</link>
    <description>&lt;pre&gt;Commit e72e793 (Add ability to restrict flow mods and flow stats
requests to cookies.) modified cookie handling.  Some of its behavior
was unintuitive and there was at least one bug (described below).
Commit f66b87d (DESIGN: Document uses for flow cookies.) attempted to
document a clean design for cookie handling.  This commit updates the
DESIGN document and brings the implementation in line with it.

In commit e72e793, the code that handled processing OpenFlow flow
modification requests set the cookie mask to exact-match.  This seems
reasonable for adding flows, but is not correct for matching, since
OpenFlow 1.0 doesn't support matching based on the cookie.  This commit
changes to cookie mask to fully wildcarded, which is the correct
behavior for modifications and deletions.  It doesn't cause any problems
for flow additions, since the mask is ignored for that operation.

Bug #9742

Reported-by: Luca Giraudo &amp;lt;lgiraudo-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
Reported-by: Paul Ingram &amp;lt;paul-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
Signed-off-by: Justin Pettit &amp;lt;jpettit-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
---
 DESIGN                        |   31 +++++++++--
 include/openflow/nicira-ext.h |    6 +-
 lib/learn.c                   |    5 +-
 lib/ofp-parse.c               |   24 +++++++-
 lib/ofp-print.c               |    4 +-
 lib/ofp-util.c                |   36 +++++-------
 lib/ofp-util.h                |   24 +++++++-
 ofproto/ofproto-dpif.c        |    1 +
 ofproto/ofproto.c             |   31 +++++++---
 tests/ofproto.at              |  124 +++++++++++++++++++++++++++++++++++++++--
 utilities/ovs-ofctl.8.in      |   37 +++++++++----
 utilities/ovs-ofctl.c         |    6 +-
 12 files changed, 261 insertions(+), 68 deletions(-)

diff --git a/DESIGN b/DESIGN
index e59dc6e..6fb3b58 100644
--- a/DESIGN
+++ b/DESIGN
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -198,11 +198,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; behavior with the following extensions:
           arbitrary masks.  This is much like the equivalent OpenFlow
           1.1 feature.
 
-        - However, unlike OpenFlow 1.1, OFPC_MODIFY and
-          OFPFC_MODIFY_STRICT, regardless of whether there was a match
-          based on a cookie or not, always add a new flow if there is
-          no match, and they always update the cookies of flows that
-          they do match.
+        - But, unlike OpenFlow 1.1, OFPC_MODIFY and OFPFC_MODIFY_STRICT
+          add a new flow if there is no match and the mask is zero (or
+          not given).  This provides OpenFlow 1.0-like behavior when a
+          mask is not specified.
+
+        - The "cookie" field in OFPT_FLOW_MOD and NXT_FLOW_MOD messages
+          is used as the cookie value for OFPFC_ADD commands, as
+          described in OpenFlow 1.0.  For OFPFC_MODIFY and
+          OFPFC_MODIFY_STRICT commands, the "cookie" field is used as a
+          new cookie for flows that match unless it is UINT64_MAX, in
+          which case the flow's cookie is not updated.
 
         - NXT_PACKET_IN (the Nicira extended version of
           OFPT_PACKET_IN) reports the cookie of the rule that
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -210,6 +216,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; behavior with the following extensions:
           packet.  (Older versions of OVS used all-0-bits instead of
           all-1-bits.)
 
+The following table shows the handling of different protocols when
+receiving OFPFC_MODIFY and OFPFC_MODIFY_STRICT messages.  A mask of 0
+indicates either an explicit mask of zero or an implicit one by not
+specifying the NXM_NX_COOKIE(_W) field.
+
+                Match   Update   Add on miss   Add on miss
+                cookie  cookie     mask!=0       mask==0
+                ======  ======   ===========   ===========
+OpenFlow 1.0      no     yes        &amp;lt;always add on miss&amp;gt;
+OpenFlow 1.1     yes      no          no           yes
+OpenFlow 1.2     yes      no          no            no
+NXM              yes     yes*         no           yes
+
+* Updates the flow's cookie unless the "cookie" field is UINT64_MAX.
+
 
 Multiple Table Support
 ======================
diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h
index 62fc103..21888a9 100644
--- a/include/openflow/nicira-ext.h
+++ b/include/openflow/nicira-ext.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1777,10 +1777,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; OFP_ASSERT(sizeof(struct nx_set_flow_format) == 20);
 /* NXT_FLOW_MOD (analogous to OFPT_FLOW_MOD).
  *
  * It is possible to limit flow deletions and modifications to certain
- * cookies by using the NXM_NX_COOKIE and NXM_NX_COOKIE_W matches.  For
- * these commands, the "cookie" field is always ignored.  Flow additions
- * make use of the "cookie" field and ignore any NXM_NX_COOKIE*
- * definitions.
+ * cookies by using the NXM_NX_COOKIE(_W) matches.  The "cookie" field
+ * is used only to add or modify flow cookies.
  */
 struct nx_flow_mod {
     struct nicira_header nxh;
diff --git a/lib/learn.c b/lib/learn.c
index e995c29..ba33287 100644
--- a/lib/learn.c
+++ b/lib/learn.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -204,8 +204,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; learn_execute(const struct nx_action_learn *learn, const struct flow *flow,
     struct ofpbuf actions;
 
     cls_rule_init_catchall(&amp;amp;fm-&amp;gt;cr, ntohs(learn-&amp;gt;priority));
-    fm-&amp;gt;cookie = learn-&amp;gt;cookie;
-    fm-&amp;gt;cookie_mask = htonll(UINT64_MAX);
+    fm-&amp;gt;cookie = htonll(0);
+    fm-&amp;gt;cookie_mask = htonll(0);
+    fm-&amp;gt;new_cookie = learn-&amp;gt;cookie;
     fm-&amp;gt;table_id = learn-&amp;gt;table_id;
     fm-&amp;gt;command = OFPFC_MODIFY_STRICT;
     fm-&amp;gt;idle_timeout = ntohs(learn-&amp;gt;idle_timeout);
diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c
index fc86442..73a70c6 100644
--- a/lib/ofp-parse.c
+++ b/lib/ofp-parse.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -592,6 +592,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; parse_ofp_str(struct ofputil_flow_mod *fm, int command, const char *str_,
     cls_rule_init_catchall(&amp;amp;fm-&amp;gt;cr, OFP_DEFAULT_PRIORITY);
     fm-&amp;gt;cookie = htonll(0);
     fm-&amp;gt;cookie_mask = htonll(0);
+    if (command == OFPFC_MODIFY || command == OFPFC_MODIFY_STRICT) {
+        /* For modify, by default, don't update the cookie. */
+        fm-&amp;gt;new_cookie = htonll(UINT64_MAX);
+    } else{
+        fm-&amp;gt;new_cookie = htonll(0);
+    }
     fm-&amp;gt;table_id = 0xff;
     fm-&amp;gt;command = command;
     fm-&amp;gt;idle_timeout = OFP_FLOW_PERMANENT;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -646,17 +652,24 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; parse_ofp_str(struct ofputil_flow_mod *fm, int command, const char *str_,
                 fm-&amp;gt;hard_timeout = str_to_u16(value, name);
             } else if (!strcmp(name, "cookie")) {
                 char *mask = strchr(value, '/');
+
                 if (mask) {
+                    /* A mask means we're searching for a cookie. */
                     if (command == OFPFC_ADD) {
                         ofp_fatal(str_, verbose, "flow additions cannot use "
                                   "a cookie mask");
                     }
                     *mask = '\0';
+                    fm-&amp;gt;cookie = htonll(str_to_u64(value));
                     fm-&amp;gt;cookie_mask = htonll(str_to_u64(mask+1));
                 } else {
-                    fm-&amp;gt;cookie_mask = htonll(UINT64_MAX);
+                    /* No mask means that the cookie is being set. */
+                    if (command != OFPFC_ADD &amp;amp;&amp;amp; command != OFPFC_MODIFY
+                            &amp;amp;&amp;amp; command != OFPFC_MODIFY_STRICT) {
+                        ofp_fatal(str_, verbose, "cannot set cookie");
+                    }
+                    fm-&amp;gt;new_cookie = htonll(str_to_u64(value));
                 }
-                fm-&amp;gt;cookie = htonll(str_to_u64(value));
             } else if (mf_from_name(name)) {
                 parse_field(mf_from_name(name), value, &amp;amp;fm-&amp;gt;cr);
             } else if (!strcmp(name, "duration")
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -670,6 +683,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; parse_ofp_str(struct ofputil_flow_mod *fm, int command, const char *str_,
             }
         }
     }
+    if (!fm-&amp;gt;cookie_mask &amp;amp;&amp;amp; fm-&amp;gt;new_cookie == htonll(UINT64_MAX)
+            &amp;amp;&amp;amp; (command == OFPFC_MODIFY || command == OFPFC_MODIFY_STRICT)) {
+        /* On modifies without a mask, we are supposed to add a flow if
+         * one does not exist.  If a cookie wasn't been specified, use a
+         * default of zero. */
+        fm-&amp;gt;new_cookie = htonll(0);
+    }
     if (fields &amp;amp; F_ACTIONS) {
         struct ofpbuf actions;
 
diff --git a/lib/ofp-print.c b/lib/ofp-print.c
index 1757a30..7e2d0eb 100644
--- a/lib/ofp-print.c
+++ b/lib/ofp-print.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -977,8 +977,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofp_print_flow_mod(struct ds *s, const struct ofp_header *oh,
     if (ds_last(s) != ' ') {
         ds_put_char(s, ' ');
     }
-    if (fm.cookie != htonll(0)) {
-        ds_put_format(s, "cookie:0x%"PRIx64" ", ntohll(fm.cookie));
+    if (fm.new_cookie != htonll(0)) {
+        ds_put_format(s, "cookie:0x%"PRIx64" ", ntohll(fm.new_cookie));
     }
     if (fm.idle_timeout != OFP_FLOW_PERMANENT) {
         ds_put_format(s, "idle:%"PRIu16" ", fm.idle_timeout);
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index 90124ec..cf68008 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1402,9 +1402,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofputil_decode_flow_mod(struct ofputil_flow_mod *fm,
         ofputil_normalize_rule(&amp;amp;fm-&amp;gt;cr);
 
         /* Translate the message. */
-        fm-&amp;gt;cookie = ofm-&amp;gt;cookie;
-        fm-&amp;gt;cookie_mask = htonll(UINT64_MAX);
         command = ntohs(ofm-&amp;gt;command);
+        fm-&amp;gt;cookie = htonll(0);
+        fm-&amp;gt;cookie_mask = htonll(0);
+        fm-&amp;gt;new_cookie = ofm-&amp;gt;cookie;
         fm-&amp;gt;idle_timeout = ntohs(ofm-&amp;gt;idle_timeout);
         fm-&amp;gt;hard_timeout = ntohs(ofm-&amp;gt;hard_timeout);
         fm-&amp;gt;buffer_id = ntohl(ofm-&amp;gt;buffer_id);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1429,17 +1430,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofputil_decode_flow_mod(struct ofputil_flow_mod *fm,
 
         /* Translate the message. */
         command = ntohs(nfm-&amp;gt;command);
-        if (command == OFPFC_ADD) {
-            if (fm-&amp;gt;cookie_mask) {
-                /* The "NXM_NX_COOKIE*" matches are not valid for flow
-                 * additions.  Additions must use the "cookie" field of
-                 * the "nx_flow_mod" structure. */
-                return OFPERR_NXBRC_NXM_INVALID;
-            } else {
-                fm-&amp;gt;cookie = nfm-&amp;gt;cookie;
-                fm-&amp;gt;cookie_mask = htonll(UINT64_MAX);
-            }
+        if (command &amp;amp; 0xff == OFPFC_ADD &amp;amp;&amp;amp; fm-&amp;gt;cookie_mask) {
+            /* Flow additions may only set a new cookie, not match an
+             * existing cookie. */
+            return OFPERR_NXBRC_NXM_INVALID;
         }
+        fm-&amp;gt;new_cookie = nfm-&amp;gt;cookie;
         fm-&amp;gt;idle_timeout = ntohs(nfm-&amp;gt;idle_timeout);
         fm-&amp;gt;hard_timeout = ntohs(nfm-&amp;gt;hard_timeout);
         fm-&amp;gt;buffer_id = ntohl(nfm-&amp;gt;buffer_id);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1483,7 +1479,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofputil_encode_flow_mod(const struct ofputil_flow_mod *fm,
         msg = ofpbuf_new(sizeof *ofm + actions_len);
         ofm = put_openflow(sizeof *ofm, OFPT10_FLOW_MOD, msg);
         ofputil_cls_rule_to_match(&amp;amp;fm-&amp;gt;cr, &amp;amp;ofm-&amp;gt;match);
-        ofm-&amp;gt;cookie = fm-&amp;gt;cookie;
+        ofm-&amp;gt;cookie = fm-&amp;gt;new_cookie;
         ofm-&amp;gt;command = htons(command);
         ofm-&amp;gt;idle_timeout = htons(fm-&amp;gt;idle_timeout);
         ofm-&amp;gt;hard_timeout = htons(fm-&amp;gt;hard_timeout);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1499,14 +1495,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofputil_encode_flow_mod(const struct ofputil_flow_mod *fm,
         put_nxmsg(sizeof *nfm, NXT_FLOW_MOD, msg);
         nfm = msg-&amp;gt;data;
         nfm-&amp;gt;command = htons(command);
-        if (command == OFPFC_ADD) {
-            nfm-&amp;gt;cookie = fm-&amp;gt;cookie;
-            match_len = nx_put_match(msg, &amp;amp;fm-&amp;gt;cr, 0, 0);
-        } else {
-            nfm-&amp;gt;cookie = 0;
-            match_len = nx_put_match(msg, &amp;amp;fm-&amp;gt;cr,
-                                     fm-&amp;gt;cookie, fm-&amp;gt;cookie_mask);
-        }
+        nfm-&amp;gt;cookie = fm-&amp;gt;new_cookie;
+        match_len = nx_put_match(msg, &amp;amp;fm-&amp;gt;cr, fm-&amp;gt;cookie, fm-&amp;gt;cookie_mask);
         nfm-&amp;gt;idle_timeout = htons(fm-&amp;gt;idle_timeout);
         nfm-&amp;gt;hard_timeout = htons(fm-&amp;gt;hard_timeout);
         nfm-&amp;gt;priority = htons(fm-&amp;gt;cr.priority);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1545,7 +1535,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofputil_flow_mod_usable_protocols(const struct ofputil_flow_mod *fms,
         if (fm-&amp;gt;table_id != 0xff) {
             usable_protocols &amp;amp;= OFPUTIL_P_TID;
         }
-        if (fm-&amp;gt;command != OFPFC_ADD &amp;amp;&amp;amp; fm-&amp;gt;cookie_mask != htonll(0)) {
+
+        /* Matching of the cookie is only supported through NXM. */
+        if (fm-&amp;gt;cookie_mask != htonll(0)) {
             usable_protocols &amp;amp;= OFPUTIL_P_NXM_ANY;
         }
     }
diff --git a/lib/ofp-util.h b/lib/ofp-util.h
index e671663..3aa1e09 100644
--- a/lib/ofp-util.h
+++ b/lib/ofp-util.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -197,11 +197,29 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct ofpbuf *ofputil_make_set_packet_in_format(enum nx_packet_in_format);
 /* NXT_FLOW_MOD_TABLE_ID extension. */
 struct ofpbuf *ofputil_make_flow_mod_table_id(bool flow_mod_table_id);
 
-/* Protocol-independent flow_mod. */
+/* Protocol-independent flow_mod.
+ *
+ * The handling of cookies across multiple versions of OpenFlow is a bit
+ * confusing.  A full description of Open vSwitch's cookie handling is
+ * in the DESIGN file.  The following table shows the expected values of
+ * the cookie-related fields for the different flow_mod commands in
+ * OpenFlow 1.0 ("OF10") and NXM.  "&amp;lt;used&amp;gt;" and "-" indicate a value
+ * that may be populated and an ignored field, respectively.
+ *
+ *               cookie  cookie_mask  new_cookie
+ *               ======  ===========  ==========
+ * OF10 Add        -          0         &amp;lt;used&amp;gt;
+ * OF10 Modify     -          0         &amp;lt;used&amp;gt;
+ * OF10 Delete     -          0           -
+ * NXM Add         -          0         &amp;lt;used&amp;gt;
+ * NXM Modify    &amp;lt;used&amp;gt;     &amp;lt;used&amp;gt;      &amp;lt;used&amp;gt;
+ * NXM Delete    &amp;lt;used&amp;gt;     &amp;lt;used&amp;gt;        -
+ */
 struct ofputil_flow_mod {
     struct cls_rule cr;
-    ovs_be64 cookie;
-    ovs_be64 cookie_mask;
+    ovs_be64 cookie;         /* Cookie bits to match. */
+    ovs_be64 cookie_mask;    /* 1-bit in each 'cookie' bit to match. */
+    ovs_be64 new_cookie;     /* New cookie to install or -1. */
     uint8_t table_id;
     uint16_t command;
     uint16_t idle_timeout;
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index f2c2ca9..e3efed7 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -791,6 +791,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; add_internal_flow(struct ofproto_dpif *ofproto, int id,
 
     cls_rule_init_catchall(&amp;amp;fm.cr, 0);
     cls_rule_set_reg(&amp;amp;fm.cr, 0, id);
+    fm.new_cookie = htonll(0);
     fm.cookie = htonll(0);
     fm.cookie_mask = htonll(0);
     fm.table_id = TBL_INTERNAL;
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 0bda06a..0c24314 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2785,7 +2785,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; add_flow(struct ofproto *ofproto, struct ofconn *ofconn,
     rule-&amp;gt;ofproto = ofproto;
     rule-&amp;gt;cr = fm-&amp;gt;cr;
     rule-&amp;gt;pending = NULL;
-    rule-&amp;gt;flow_cookie = fm-&amp;gt;cookie;
+    rule-&amp;gt;flow_cookie = fm-&amp;gt;new_cookie;
     rule-&amp;gt;created = rule-&amp;gt;modified = rule-&amp;gt;used = time_msec();
     rule-&amp;gt;idle_timeout = fm-&amp;gt;idle_timeout;
     rule-&amp;gt;hard_timeout = fm-&amp;gt;hard_timeout;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2885,7 +2885,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; modify_flows__(struct ofproto *ofproto, struct ofconn *ofconn,
         } else {
             rule-&amp;gt;modified = time_msec();
         }
-        rule-&amp;gt;flow_cookie = fm-&amp;gt;cookie;
+        if (fm-&amp;gt;new_cookie != htonll(UINT64_MAX)) {
+            rule-&amp;gt;flow_cookie = fm-&amp;gt;new_cookie;
+        }
     }
     ofopgroup_submit(group);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2908,9 +2910,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; modify_flows_loose(struct ofproto *ofproto, struct ofconn *ofconn,
     error = collect_rules_loose(ofproto, fm-&amp;gt;table_id, &amp;amp;fm-&amp;gt;cr,
                                 fm-&amp;gt;cookie, fm-&amp;gt;cookie_mask,
                                 OFPP_NONE, &amp;amp;rules);
-    return (error ? error
-            : list_is_empty(&amp;amp;rules) ? add_flow(ofproto, ofconn, fm, request)
-            : modify_flows__(ofproto, ofconn, fm, request, &amp;amp;rules));
+    if (error) {
+        return error;
+    } else if (list_is_empty(&amp;amp;rules)) {
+        return fm-&amp;gt;cookie_mask ? 0 : add_flow(ofproto, ofconn, fm, request);
+    } else {
+        return modify_flows__(ofproto, ofconn, fm, request, &amp;amp;rules);
+    }
 }
 
 /* Implements OFPFC_MODIFY_STRICT.  Returns 0 on success or an OpenFlow error
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2929,11 +2935,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; modify_flow_strict(struct ofproto *ofproto, struct ofconn *ofconn,
     error = collect_rules_strict(ofproto, fm-&amp;gt;table_id, &amp;amp;fm-&amp;gt;cr,
                                  fm-&amp;gt;cookie, fm-&amp;gt;cookie_mask,
                                  OFPP_NONE, &amp;amp;rules);
-    return (error ? error
-            : list_is_empty(&amp;amp;rules) ? add_flow(ofproto, ofconn, fm, request)
-            : list_is_singleton(&amp;amp;rules) ? modify_flows__(ofproto, ofconn,
-                                                         fm, request, &amp;amp;rules)
-            : 0);
+
+    if (error) {
+        return error;
+    } else if (list_is_empty(&amp;amp;rules)) {
+        return fm-&amp;gt;cookie_mask ? 0 : add_flow(ofproto, ofconn, fm, request);
+    } else {
+        return list_is_singleton(&amp;amp;rules) ? modify_flows__(ofproto, ofconn,
+                                                          fm, request, &amp;amp;rules)
+                                         : 0;
+    }
 }
 
 /* OFPFC_DELETE implementation. */
diff --git a/tests/ofproto.at b/tests/ofproto.at
index 98942e5..dbe31c4 100644
--- a/tests/ofproto.at
+++ b/tests/ofproto.at
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -154,11 +154,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; NXST_FLOW reply:
 AT_CHECK([ovs-ofctl dump-aggregate br0 table=0 | STRIP_XIDS], [0], [dnl
 NXST_AGGREGATE reply: packet_count=0 byte_count=0 flow_count=3
 ])
-AT_CHECK([ovs-ofctl dump-flows br0 cookie=0x3 | ofctl_strip | sort], [0], [dnl
+AT_CHECK([ovs-ofctl dump-flows br0 cookie=0x3/-1 | ofctl_strip | sort], [0], [dnl
  cookie=0x3, in_port=3 actions=output:0
 NXST_FLOW reply:
 ])
-AT_CHECK([ovs-ofctl dump-aggregate br0 cookie=0x3 | STRIP_XIDS], [0], [dnl
+AT_CHECK([ovs-ofctl dump-aggregate br0 cookie=0x3/-1 | STRIP_XIDS], [0], [dnl
 NXST_AGGREGATE reply: packet_count=0 byte_count=0 flow_count=1
 ])
 OVS_VSWITCHD_STOP
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -189,7 +189,121 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; NXST_AGGREGATE reply: packet_count=0 byte_count=0 flow_count=2
 OVS_VSWITCHD_STOP
 AT_CLEANUP
 
-AT_SETUP([ofproto - del flows with cookie])
+AT_SETUP([ofproto - mod flow with cookie change (OpenFlow 1.0)])
+OVS_VSWITCHD_START
+AT_CHECK([ovs-ofctl -F openflow10 add-flow br0 cookie=0x1,in_port=1,actions=0])
+AT_CHECK([ovs-ofctl -F openflow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ cookie=0x1, in_port=1 actions=output:0
+OFPST_FLOW reply:
+])
+
+AT_CHECK([ovs-ofctl -F openflow10 mod-flows br0 cookie=0x2,in_port=1,actions=0])
+AT_CHECK([ovs-ofctl -F openflow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ cookie=0x2, in_port=1 actions=output:0
+OFPST_FLOW reply:
+])
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([ofproto - mod flow with cookie change (NXM)])
+OVS_VSWITCHD_START
+AT_CHECK([ovs-ofctl -F nxm add-flow br0 cookie=0x1,in_port=1,actions=0])
+AT_CHECK([ovs-ofctl -F nxm dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ cookie=0x1, in_port=1 actions=output:0
+NXST_FLOW reply:
+])
+
+AT_CHECK([ovs-ofctl -F nxm mod-flows br0 cookie=0x2,in_port=1,actions=0])
+AT_CHECK([ovs-ofctl -F nxm dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ cookie=0x2, in_port=1 actions=output:0
+NXST_FLOW reply:
+])
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([ofproto - mod flows based on cookie mask])
+OVS_VSWITCHD_START
+AT_CHECK([ovs-ofctl add-flow br0 cookie=0x1,in_port=1,actions=0])
+AT_CHECK([ovs-ofctl add-flow br0 cookie=0x1,in_port=2,actions=0])
+AT_CHECK([ovs-ofctl add-flow br0 cookie=0x2,in_port=3,actions=0])
+AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ cookie=0x1, in_port=1 actions=output:0
+ cookie=0x1, in_port=2 actions=output:0
+ cookie=0x2, in_port=3 actions=output:0
+NXST_FLOW reply:
+])
+
+AT_CHECK([ovs-ofctl -F nxm mod-flows br0 cookie=0x1/0xff,actions=4])
+AT_CHECK([ovs-ofctl -F nxm dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ cookie=0x1, in_port=1 actions=output:4
+ cookie=0x1, in_port=2 actions=output:4
+ cookie=0x2, in_port=3 actions=output:0
+NXST_FLOW reply:
+])
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([ofproto - mod flows based on cookie mask with cookie change])
+OVS_VSWITCHD_START
+AT_CHECK([ovs-ofctl add-flow br0 cookie=0x1,in_port=1,actions=0])
+AT_CHECK([ovs-ofctl add-flow br0 cookie=0x1,in_port=2,actions=0])
+AT_CHECK([ovs-ofctl add-flow br0 cookie=0x2,in_port=3,actions=0])
+AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ cookie=0x1, in_port=1 actions=output:0
+ cookie=0x1, in_port=2 actions=output:0
+ cookie=0x2, in_port=3 actions=output:0
+NXST_FLOW reply:
+])
+
+AT_CHECK([ovs-ofctl -F nxm mod-flows br0 cookie=1/-1,cookie=4,actions=4])
+AT_CHECK([ovs-ofctl -F nxm dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ cookie=0x2, in_port=3 actions=output:0
+ cookie=0x4, in_port=1 actions=output:4
+ cookie=0x4, in_port=2 actions=output:4
+NXST_FLOW reply:
+])
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([ofproto - mod flow with cookie miss (mask==0)])
+OVS_VSWITCHD_START
+AT_CHECK([ovs-ofctl -F nxm mod-flows br0 in_port=1,actions=0])
+AT_CHECK([ovs-ofctl -F nxm dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ in_port=1 actions=output:0
+NXST_FLOW reply:
+])
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([ofproto - mod flow with cookie miss (mask!=0)])
+OVS_VSWITCHD_START
+AT_CHECK([ovs-ofctl -F nxm mod-flows br0 cookie=1/1,in_port=1,actions=0])
+AT_CHECK([ovs-ofctl -F nxm dump-flows br0 | ofctl_strip | sort], [0], [dnl
+NXST_FLOW reply:
+])
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([ofproto - del flows with cookies])
+OVS_VSWITCHD_START
+AT_CHECK([ovs-ofctl add-flow br0 cookie=0x1,in_port=1,actions=0])
+AT_CHECK([ovs-ofctl add-flow br0 cookie=0x2,in_port=2,actions=0])
+AT_CHECK([ovs-ofctl add-flow br0 cookie=0x3,in_port=3,actions=0])
+AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
+ cookie=0x1, in_port=1 actions=output:0
+ cookie=0x2, in_port=2 actions=output:0
+ cookie=0x3, in_port=3 actions=output:0
+NXST_FLOW reply:
+])
+
+AT_CHECK([ovs-ofctl del-flows br0])
+AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
+NXST_FLOW reply:
+])
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([ofproto - del flows based on cookie])
 OVS_VSWITCHD_START
 AT_CHECK([ovs-ofctl add-flow br0 cookie=0x1,in_port=1,actions=0])
 AT_CHECK([ovs-ofctl add-flow br0 cookie=0x2,in_port=2,actions=0])
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -201,7 +315,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
 NXST_FLOW reply:
 ])
 
-AT_CHECK([ovs-ofctl del-flows br0 cookie=0x3])
+AT_CHECK([ovs-ofctl del-flows br0 cookie=0x3/-1])
 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
  cookie=0x1, in_port=1 actions=output:0
  cookie=0x2, in_port=2 actions=output:0
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -210,7 +324,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; NXST_FLOW reply:
 OVS_VSWITCHD_STOP
 AT_CLEANUP
 
-AT_SETUP([ofproto - del flows with cookie mask])
+AT_SETUP([ofproto - del flows based on cookie mask])
 OVS_VSWITCHD_START
 AT_CHECK([ovs-ofctl add-flow br0 cookie=0x1,in_port=1,actions=0])
 AT_CHECK([ovs-ofctl add-flow br0 cookie=0x2,in_port=2,actions=0])
diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in
index a9398e3..75ea25a 100644
--- a/utilities/ovs-ofctl.8.in
+++ b/utilities/ovs-ofctl.8.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1094,19 +1094,34 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; levels of the \fBresubmit\fR call stack, are ignored.
 An opaque identifier called a cookie can be used as a handle to identify
 a set of flows:
 .
-.IP \fBcookie=\fIvalue\fR[\fB/\fImask\fR]
+.IP \fBcookie=\fIvalue\fR
+.
+A cookie can be associated with a flow using the \fBadd-flow\fR,
+\fBadd-flows\fR, and \fBmod-flows\fR commands.  \fIvalue\fR can be any
+64-bit number and need not be unique among flows.  If this field is
+omitted, a default cookie value of 0 is used.
+.
+.IP \fBcookie=\fIvalue\fR\fB/\fImask\fR
 .
-A cookie can be associated with a flow using the \fBadd-flow\fR and
-\fBadd-flows\fR commands.  \fIvalue\fR can be any 64-bit number and need
-not be unique among flows.  If this field is omitted, a default cookie
-value of 0 is used.
-.IP
 When using NXM, the cookie can be used as a handle for querying,
-modifying, and deleting flows.  In addition to \fIvalue\fR, an optional
-\fImask\fR may be supplied for the \fBdel-flows\fR, \fBmod-flows\fR,
-\fBdump-flows\fR, and \fBdump-aggregate\fR commands to limit matching
-cookies.  A 1-bit in \fImask\fR indicates that the corresponding bit in
-\fIcookie\fR must match exactly, and a 0-bit wildcards that bit.
+modifying, and deleting flows.  \fIvalue\fR and \fImask\fR may be
+supplied for the \fBdel-flows\fR, \fBmod-flows\fR, \fBdump-flows\fR, and
+\fBdump-aggregate\fR commands to limit matching cookies.  A 1-bit in
+\fImask\fR indicates that the corresponding bit in \fIcookie\fR must
+match exactly, and a 0-bit wildcards that bit.  A mask of -1 may be used
+to exactly match a cookie.
+.IP
+The \fBmod-flows\fR command can update the cookies of flows that
+match a cookie by specifying the \fIcookie\fR field twice (once with a
+mask for matching and once without to indicate the new value):
+.RS
+.IP \fBcookie=1/-1,cookie=2\fR
+Update cookies with a value of 1 to 2.
+.IP \fBcookie=0/0,cookie=1\fR
+Update all flows with a cookie of 1.
+.RE
+.IP
+The ability to match on cookies was added in Open vSwitch 1.5.0.
 .
 .PP
 The following additional field sets the priority for flows added by
diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
index 834dff5..f207272 100644
--- a/utilities/ovs-ofctl.c
+++ b/utilities/ovs-ofctl.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1613,7 +1613,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; read_flows_from_file(const char *filename, struct classifier *cls, int index)
         parse_ofp_str(&amp;amp;fm, OFPFC_ADD, ds_cstr(&amp;amp;s), true);
 
         version = xmalloc(sizeof *version);
-        version-&amp;gt;cookie = fm.cookie;
+        version-&amp;gt;cookie = fm.new_cookie;
         version-&amp;gt;idle_timeout = fm.idle_timeout;
         version-&amp;gt;hard_timeout = fm.hard_timeout;
         version-&amp;gt;flags = fm.flags &amp;amp; (OFPFF_SEND_FLOW_REM | OFPFF_EMERG);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1722,7 +1722,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; fte_make_flow_mod(const struct fte *fte, int index, uint16_t command,
     struct ofpbuf *ofm;
 
     fm.cr = fte-&amp;gt;rule;
-    fm.cookie = version-&amp;gt;cookie;
+    fm.cookie = htonll(0);
+    fm.cookie_mask = htonll(0);
+    fm.new_cookie = version-&amp;gt;cookie;
     fm.table_id = 0xff;
     fm.command = command;
     fm.idle_timeout = version-&amp;gt;idle_timeout;
&lt;/pre&gt;</description>
    <dc:creator>Justin Pettit</dc:creator>
    <dc:date>2012-05-26T01:48:40</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10810">
    <title>[loss-report 1/4] poll-loop: More strictly rate-limithigh CPU use.</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10810</link>
    <description>&lt;pre&gt;120 messages per minute just isn't helpful.

Signed-off-by: Ben Pfaff &amp;lt;blp-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
---
 lib/poll-loop.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/poll-loop.c b/lib/poll-loop.c
index ba6c3a1..516cf13 100644
--- a/lib/poll-loop.c
+++ b/lib/poll-loop.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,5 +1,5 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /*
- * Copyright (c) 2008, 2009, 2010, 2011 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -157,7 +157,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poll_immediate_wake(const char *where)
 static void
 log_wakeup(const char *where, const struct pollfd *pollfd, int timeout)
 {
-    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(120, 120);
+    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(10, 10);
     enum vlog_level level;
     int cpu_usage;
     struct ds s;
&lt;/pre&gt;</description>
    <dc:creator>Ben Pfaff</dc:creator>
    <dc:date>2012-05-25T21:36:34</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10798">
    <title>87% Off TESOL Teaching Certification Course</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10798</link>
    <description>&lt;pre&gt;$79 for a 150-Hour Specialist TESOL/TEFL Course from Global Leadership  
College ($599 Value)
Please go to http://www.teacherbuys.com/nationwide/ 
for more details.

Certificate awarded upon completion of course

-150 hours of training from the comfort of your own home or office
-Information including TESOL/TEFL theory and practice
-100% comprehensive
-Easy to follow classes
-Get your certificate in as little as 8 weeks
-Learn and study at your own pace
-A solid base for a career
-Makes a great gift!

Expand your mind, and your future, with today's TeacherBuy!
If you prefer not to receive future Daily Deal emails, you can always  
send email to unsubscribe-7fvPQkbVUmAOZTnbMYOWKg&amp;lt; at &amp;gt;public.gmane.org to unsubscribe.




&lt;/pre&gt;</description>
    <dc:creator>TeacherBuys</dc:creator>
    <dc:date>2012-05-25T10:56:06</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10797">
    <title>Hello my dear,</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10797</link>
    <description>&lt;pre&gt;

Hello my dear,

With great respect and honour i am writing to you this mail.Please pardon me if i interfere into your privacy,My name is Miss Mercy Joseph Young, 23 years of age, i am the only daughter of Late Dr Joseph Young from Ivory Coast, my father was the owner of Joseph Cocoa Industries Limited and he was a personal adviser to our former Head of State (late General Robert Guei). My purpose of contacting you is first, i want to know more about you so that i will know the areas you will be of assistance to my needs. I have some reasonable amount of moneys which my parents left for me before their untimely death, i want to plan for my future by investing this money in a good and profitable business but I don’t know where to start and that is why I got interested in contacting you hoping that you will be kind a sincere to me by leading me through the right process to see that this money is not wasted because it is my only hope of planning for my future .Please,
 don’t be surprise or scared because all my words are very sincere and I will prove it as we communicate along.



From your contact i observed you are an important personality before i made up my mind to contact you.Though i don't know you in person but your assurance can motivate me to tell you everything about the money i want to invest and to go into this investment with by my side . i have no experience i terms of any foreign investment but I wish you could be honest to me because i am afraid of choosing the wrong business or loose this money . As soon as i receive your respond we will decide on the next line of action, remember you caught my attention when I saw your contact and that was why i have the courage to write you in the first place. You will know me more as we communicate along and I will also send my pictures as soon as i hear from you so that you will see who you are communicating with.



Thanks for your understanding, hoping to hear from you soon.

Yours sincerely

Miss.Mercy&lt;/pre&gt;</description>
    <dc:creator>Mercy Joseph</dc:creator>
    <dc:date>2012-05-25T09:54:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10785">
    <title>[PATCH] memory: Memory leak when generating reports.</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10785</link>
    <description>&lt;pre&gt;Signed-off-by: Ethan Jackson &amp;lt;ethan-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
---

Mildly ironic.

---
 lib/memory.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/memory.c b/lib/memory.c
index 779860e..1babfe9 100644
--- a/lib/memory.c
+++ b/lib/memory.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -119,6 +119,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; compose_report(const struct simap *usage, struct ds *s)
         ds_put_format(s, "%s:%u ", node-&amp;gt;name, node-&amp;gt;data);
     }
     ds_chomp(s, ' ');
+    free(nodes);
 }
 
 /* Logs the contents of 'usage', as a collection of name-count pairs.
&lt;/pre&gt;</description>
    <dc:creator>Ethan Jackson</dc:creator>
    <dc:date>2012-05-22T23:44:58</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10773">
    <title>XII Congreso Ciencia y Espiritu en Madrid</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10773</link>
    <description>&lt;pre&gt;



Vealo en directo por
internet


Conexión para los dos días:

11 Euros


Solicite más información:

info-2OMz15dsgVBqHaOLIIzSV1aTQe2KTcn/&amp;lt; at &amp;gt;public.gmane.org

Telf. 93 362 37 00

 


Ponentes



Enrique de Vicente


Josep Pàmies


Victor Brossa


Albert Ronald Morales


Ángel Gracia


Felix Rodrigo Mora


Santi Ibarretxe y Fran Rubio


Javier Pérez Nieto


Antonio Ortega


Xavier Pedro y Blanca


Coronel Diego Camacho


Diana Castillo


Vicente Fuentes


José Luis Tejero


Clara Bueno


Fulgencia León Alegría


Pilar Baselga


Ángel Lafuente


 
 



Leer
más.





TEMATICAS


- "Energia libre. El desconocido que nos rodea"


- "Porque hicieron el 11-S , y porque sus planes van a fracasar"

 

- "Plantas prohibidas para curar enfermedades graves"

 

- "La importancia de una alimentación sana para el cambio de conciencia"

 

- "Con Ciencia y Espíritu: La verdadera Revolución está en tu plato"

 

- "2012: El fin del Quinto Sol"

 

- "El misterio de los circulos de las cosechas"

 

- "Egipto: "En busca de la sabiduria perdida"

 

- "La Muerte: La Gran Consejera"

 

- "Tratactus Magicae"

 

- "La Conexión con tu Ser Universal a través del cuerpo"

 

- "Revelaciones Sobrenaturales"

 

- "Integración"

 

- "Estética Nazi en la cultura actual"

 

- "Desobediencia pacífica VS Bioterrorismo microbiano del sistema"

 

- "Causas del Fracaso de la Transición Española"

 

- "Aniquilación de la virtud y deshumanización. Denuncia y esbozo de contraofensiva"

Leer más.





No COBRAMOS ENTRADA


Sólo pedimos la compra mínima de cualquier Pack de los anteriores Congresos de Ciencia y Espíritu.

Precio inscripciones:


COMPRA ANTICIPADA:

Entrada al Congreso - 44€

(Vigente sólo hasta el 31 de Mayo de 2012)


COMPRA MÍNIMA PARA LA ENTRADA A PARTIR DEL DIA 1 DE JUNIO:

2 dias - Compra de 3 DVDS de Congresos anteriores - 66€

1 dia - Compra de 2 DVDS de Congresos anteriores - 44€

- ABIERTAS LAS INSCRIPCIONES, PLAZAS LIMITADAS - RESERVE SU
PLAZA AQUÍ

Leer más.


TAMBIEN PUEDE VERLO EN DIRECTO POR INTERNET DESDE SU CASA EN CUALQUIER PAIS DEL MUNDO

Conexión para los dos días: 11
Euros


Solicite más información:
info-2OMz15dsgVBqHaOLIIzSV1aTQe2KTcn/&amp;lt; at &amp;gt;public.gmane.org
Telf.: 93 362 37
00


 
PROXIMOS
EVENTOS




Taller sobre el Agua de Mar con Ángel Gracia
Barcelona 23 de Junio de 2012




Ciencia y Espiritualidad. Anna Ferrer, una vida dedicada a la ciencia y al espíritu
Montserrat (Barcelona) 7 y 8 Julio 2012




Simposium Ciencia y Espíritu
Peñíscola 14 de Julio 2012




XIII Congreso Ciencia y Espiritu Barcelona
Barcelona 28 y 29 de Julio 2012




Taller de Zen Tantra con el Maestro Firak
Barcelona 20 de Junio de 2012



VIAJES




Viaje a Colombia y Congreso de Ciencia y Espíritu en Bogotá
Bogotá (Colombia) Noviembre 2012




Viaje a Egipto 2012 y Simposium de Ciencia y Espíritu en El Cairo
Del 03 de Diciembre de 2012 al 14 de Diciembre de 2012

 

NUESTRAS
WEBS:

www.cienciayespiritu.com (Congresos de Ciencia y Espiritu)

www.exopoliticaeuropa.com (Cumbre Mundial de Exopolitica y Exociencias)

www.exopoliticseurope.com (Mundial Exopolitics and Exosciences Summit)

www.congresoenergiaslibres.com (Congreso Energias
Libres)

www.freeenergiescongress.com (Free Energies Congress)

www.congresoalimentacion.com (Congreso-Feria de Alimentacion Consciente)

www.400millones.com (Programas propios para su libre
difusion)



NUESTROS BLOGS:


www.tiempoparalaverdad.com (Los programas de Radio y TV que realizamos)


www.cazadebunkers.com (Desinformadores y debunkers expuestos)


www.musicosporlaconciencia.com (Músicos por la Consciencia)


www.exociencias.com (Ciencias censuradas)


www.lamatrixholografica.com (Bienvenidos al mundo real)


www.elaguademar.com (El agua de mar nos puede salvar)


www.falsasbanderas.wordpress.com (Guerras provocadas)


www.energiaslibres.wordpress.com
(Energias silenciadas)



NUESTROS CANALES DE VIDEO:


                                     



 
 




 


Este mensaje únicamente se envia a CONTACTOS DE MAILS PÚBLICOS EN WEB O LISTADOS SECTORIALES en sus webs de origen, para poner en su conocimiento
ofertas específicas que son de interés. En ningún caso se destinarán estos datos a otros fines que no sean los de recibir la presente notificación de nuestros proyectos, ni se entregarán a terceras partes, de acuerdo con la Ley de protección de
datos de L.O.P.D. (Ley Orgánica 15/1999,de 13 de Diciembre, de protección de datos de carácter personal). Si a pesar de ello desean no recibir más, este tipo de información, les rogamos que nos envíen un e-mail (desde el e-mail que deseen dar de
baja) a amigos-WEF4Cd1kMSn3ZGkJNDKuC0EOCMrvLtNR&amp;lt; at &amp;gt;public.gmane.org indicando "Baja" en el asunto del mensaje.





&lt;/pre&gt;</description>
    <dc:creator>Ciencia y Espiritu</dc:creator>
    <dc:date>2012-05-24T16:30:23</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10745">
    <title>[PATCH] ovs-dpctl: Don't includeinclude/openvswitch/tunnel.h</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10745</link>
    <description>&lt;pre&gt;The inclusion include/openvswitch/tunnel.h does not seem to be needed any
more.

Signed-off-by: Simon Horman &amp;lt;horms-/R6kz+dDXgpPR4JQBCEnsQ&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
---
 lib/odp-util.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/odp-util.c b/lib/odp-util.c
index 13cdf8e..8693d3c 100644
--- a/lib/odp-util.c
+++ b/lib/odp-util.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,7 +30,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include "flow.h"
 #include "netlink.h"
 #include "ofpbuf.h"
-#include "openvswitch/tunnel.h"
 #include "packets.h"
 #include "simap.h"
 #include "timeval.h"
&lt;/pre&gt;</description>
    <dc:creator>Simon Horman</dc:creator>
    <dc:date>2012-05-24T08:15:04</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10739">
    <title>MSS Clamp in User-Space</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10739</link>
    <description>&lt;pre&gt;Hi Jesse,

as part of our discussion on flow-based tunneling a few weeks ago
you mentioned that you would like to see an implementation of MSS Clamping
in user-space in order to eliminate the need for gre_err().

I made a start on implementing this, and I have a non-configurable
version working. Its pretty crude and just adjust the MSS on all TCP
SYN packets with no payload that are seen in handle_flow_miss_common().

That much seems to work. But I am unsure about a few things.
* Should it be configurable per-output port?
  If so that may be problematic if there are multiple outputs as
  the packet data is mangled.

* I am unsure how to automatically calculate the desired
  Clamp size. In particular, in for GRE it would be nice
  to allow it to be automatically clamped to the underlying MTU less
  the header size. But I'm unsure of a sane way to obtain the MTU.

Perhaps I am on the wrong track?

It does seem to me that this might be easier implemented in the datapath
as ovs_tnl_send() already has access to skb, the MTU and could leverage
the existing netfilter MMS clamp code.

&lt;/pre&gt;</description>
    <dc:creator>Simon Horman</dc:creator>
    <dc:date>2012-05-24T00:26:07</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10733">
    <title>Multiple Controllers in OpenFlow network?</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10733</link>
    <description>&lt;pre&gt;Hi all,

I'm doing a project concerning OpenFlow and I have some questions  
about deploying OpenFlow network.

-  Can we deploy an OpenFlow network with multiple Controllers over  
multiple network Domains, each Controller manage a subset of OF  
Switches? (Can we deploy an OpenFlow network in which some OF Switches  
of this network connect to a Controller ( called Controller 1), some  
other Switches connect to Controller 2, some others connect to  
Controller 3, ... ?)

-  Can we deploy this OpenFlow network using OpenvSwitch and how to do  
that ?

Thanks in advance for your answer.

Best regards,

Thien.
&lt;/pre&gt;</description>
    <dc:creator>Phan Xuan Thien</dc:creator>
    <dc:date>2012-05-23T14:50:54</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10732">
    <title>Практические рекомендации в управлении предприятием в ЕЭП</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10732</link>
    <description>&lt;pre&gt;НОВЫЕ ПЕРСПЕКТИВЫ ВЭД в УСЛОВИЯХ ВТО И ЕЭП

Обучение состоится: 04-05 июня в Санкт-Петербурге

Место проведения: г. Санкт–Петербург, БЦ "Овентал Хистори", ул. Социалистическая, д. 14.
Стоимость участия: 17 500 рублей.
В стоимость входит методический материал, обеды, кофе-паузы, сертификат.
Дополнительно предлагается экскурсионное обслуживание по г. Санкт-Петербургу.

Регистрация осуществляется по тел.:  8(812)448.. 64.. 33;  8(495)929.. 70.. 53

Цель данного семинара помочь российским компаниям подготовиться к работе в новых
экономических условиях и минимизировать возникающие риски. Познакомить с возможностями
управления предприятием в условиях присоединения России к ВТО и дать практические
рекомендации по построению системы управления предприятием для повышения его
конкурентоспособности.

В программе:
1. История возникновения, цели и принципы функционирования Всемирной торговой
организации.
Цели и особенности вступления России в ВТО.
2. Общие тенденции развития экономики РФ после вступления в ВТО.
- Преимущества и проблемы развития экономики России после вступления в ВТО.
- Тенденции развития основных отраслей промышленности, агропромышленного комплекса,
банковского сектора и сферы услуг РФ.
- Процедуры урегулирование торговых споров в рамках ВТО.
3. Обязательства России по доступу на рынок товаров и услуг.
- Итоги переговоров по системным вопросам.
- Перспективы изменения таможенно-тарифной политики.
- Обязательства по услугам
- Санитарные, фитосанитарные меры и техническое регулирование
4. Соглашение по торговым аспектам прав интеллектуальной собственности (ТРИПС).
- Общая характеристика ТРИПС.
- Субъекты охраны прав интеллектуальной собственности и их правовой режим охраны.
- Гражданско-правовые и административные меры, применяемые при перемещении объектов
интеллектуальной собственности через таможенную границу.
5. Соглашения правовой базы Единого экономического пространства:
- Соглашение о макроэкономической политике.
- Соглашения в области энергетики, транспорта, связи
- Соглашения в области регулирования естественных монополий, нефти и газа, сельского
хозяйства, конкуренции, торговли услугами промышленных субсидий, интеллектуальной
собственности.
- Соглашение о принципах валютной политики, создании условий для финансовых рынков.
- Соглашение о свободе передвижения рабочей силы.
- Соглашения о единых принципах и правилах технического регулирования.
6. Новая редакция Единой товарной номенклатуры и Единого таможенного тариф
таможенного союза.
- Изменения в ЕТН ВЭД и правилах классификации товаров
- Основные изменения в ставках таможенных пошлин
7. Нововведения в таможенном законодательстве
- Поправки в Таможенный кодекс таможенного союза об обязательном предварительном
информировании
- Изменения в решениях Комиссии таможенного союза по вопросам декларирования таможенной
стоимости товаров
- Изменения в Правила заполнения транзитной декларации
- Изменения в Единые санитарно-эпидемиологические и гигиенические требования к товарам,
подлежащим санитарно-эпидемиологическому надзору
- Дополнения в Единые ветеринарные (ветеринарно-санитарные) требования, предъявляемые к
товарам, подлежащим ветеринарному контролю (надзору).
- Дополнений в Положение о порядке осуществления карантинного фитосанитарного контроля
(надзора) на таможенной границе Таможенного союза
&lt;/pre&gt;</description>
    <dc:creator>ВЭД и ВТО</dc:creator>
    <dc:date>2012-05-23T19:52:34</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10730">
    <title>[PATCH] datapath: Avoid system freeze due toovs-flow-rehash softlockup.</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10730</link>
    <description>&lt;pre&gt;OVS datapath does periodic flow table rehash which takes genl_lock
in workq context.
In some cases, like ports add or delete, genl_lock can cause softlockup
as vswitchd would take and succeed with genl_lock and rehash workq
would block on the lock. Eventually rehash will proceed, flow rehash
is low priority task so this is not problem for rehashing.
But it is blocking workq thread; some other workq item from other
kernel subsystem would be blocked and can cause system freeze.
To avoid workq blocking and system freeze, we can use OVS compat workq.
It runs in separate kernel thread thus does not block any non-ovs
deferred workq work item.

Signed-off-by: Pravin B Shelar &amp;lt;pshelar-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
---
 datapath/linux/compat/include/linux/workqueue.h |   13 +++++--------
 datapath/linux/compat/workqueue.c               |    4 +---
 2 files changed, 6 insertions(+), 11 deletions(-)

diff --git a/datapath/linux/compat/include/linux/workqueue.h b/datapath/linux/compat/include/linux/workqueue.h
index 919afe3..e5e2178 100644
--- a/datapath/linux/compat/include/linux/workqueue.h
+++ b/datapath/linux/compat/include/linux/workqueue.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,23 +1,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #ifndef __LINUX_WORKQUEUE_WRAPPER_H
 #define __LINUX_WORKQUEUE_WRAPPER_H 1
 
-#if LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(2,6,23)
-#include_next &amp;lt;linux/workqueue.h&amp;gt;
-static inline int __init ovs_workqueues_init(void) { return 0; }
-static inline void  ovs_workqueues_exit(void) {}
-
-#else
 #include &amp;lt;linux/timer.h&amp;gt;
 
 int __init ovs_workqueues_init(void);
 void ovs_workqueues_exit(void);
 
-
 /* Older kernels have an implementation of work queues with some very bad
  * characteristics when trying to cancel work (potential deadlocks, use after
  * free, etc.  Therefore we implement simple ovs specific work queue using
  * single worker thread. work-queue API are kept similar for compatibility.
+ * It seems it is useful even on newer kernel. As it can avoid system wide
+ * freeze in event of softlockup due to workq blocked on genl_lock.
  */
+
 struct work_struct;
 
 typedef void (*work_func_t)(struct work_struct *work);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -68,6 +64,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int cancel_delayed_work_sync(struct delayed_work *dwork);
 (_work)-&amp;gt;func = (_func);\
 } while (0)
 
-#endif /* kernel version &amp;lt; 2.6.23 */
+
+extern void flush_scheduled_work(void);
 
 #endif
diff --git a/datapath/linux/compat/workqueue.c b/datapath/linux/compat/workqueue.c
index 883665b..bac9bc0 100644
--- a/datapath/linux/compat/workqueue.c
+++ b/datapath/linux/compat/workqueue.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -23,8 +23,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include &amp;lt;linux/lockdep.h&amp;gt;
 #include &amp;lt;linux/idr.h&amp;gt;
 
-#if LINUX_VERSION_CODE &amp;lt; KERNEL_VERSION(2,6,23)
-
 static spinlock_t wq_lock;
 static struct list_head workq;
 static wait_queue_head_t more_work;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -210,4 +208,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void  ovs_workqueues_exit(void)
 BUG_ON(!list_empty(&amp;amp;workq));
 kthread_stop(workq_thread);
 }
-#endif
+
&lt;/pre&gt;</description>
    <dc:creator>Pravin B Shelar</dc:creator>
    <dc:date>2012-05-23T17:36:51</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10729">
    <title>[PATCH] ofp-print: Print the type of truncated messages,when available.</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10729</link>
    <description>&lt;pre&gt;The function ofputil_decode_msg_type_partial() can figure out the type of
a truncated OpenFlow message, if the message is long enough that its type
can be determined, so we should print this information.   This is
especially valuable for printing OFPT_ERROR messages, in which the inner
OpenFlow message is often truncated to 64 bytes.

Signed-off-by: Ben Pfaff &amp;lt;blp-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
---
 lib/ofp-print.c     |   28 ++++++++++++++++++++++------
 tests/ofp-errors.at |   32 ++++++++++++++++++++++++++------
 tests/ofp-print.at  |    8 ++++----
 3 files changed, 52 insertions(+), 16 deletions(-)

diff --git a/lib/ofp-print.c b/lib/ofp-print.c
index 1757a30..3d58f10 100644
--- a/lib/ofp-print.c
+++ b/lib/ofp-print.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1590,13 +1590,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofp_print_nxt_set_controller_id(struct ds *string,
 }
 
 static void
-ofp_to_string__(const struct ofp_header *oh,
-                const struct ofputil_msg_type *type, struct ds *string,
-                int verbosity)
+ofp_header_to_string__(const struct ofp_header *oh,
+                       const struct ofputil_msg_type *type, struct ds *string)
 {
-    enum ofputil_msg_code code;
-    const void *msg = oh;
-
     ds_put_cstr(string, ofputil_msg_type_name(type));
     switch (oh-&amp;gt;version) {
     case OFP10_VERSION:
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1609,6 +1605,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofp_to_string__(const struct ofp_header *oh,
         break;
     }
     ds_put_format(string, " (xid=0x%"PRIx32"):", ntohl(oh-&amp;gt;xid));
+}
+
+static void
+ofp_to_string__(const struct ofp_header *oh,
+                const struct ofputil_msg_type *type, struct ds *string,
+                int verbosity)
+{
+    enum ofputil_msg_code code;
+    const void *msg = oh;
+
+    ofp_header_to_string__(oh, type, string);
 
     code = ofputil_msg_type_code(type);
     switch (code) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1795,6 +1802,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofp_to_string(const void *oh_, size_t len, int verbosity)
         ds_put_format(&amp;amp;string, "OpenFlow packet too short (only %zu bytes):\n",
                       len);
     } else if (ntohs(oh-&amp;gt;length) &amp;gt; len) {
+        const struct ofputil_msg_type *type;
+        enum ofperr error;
+
+        error = ofputil_decode_msg_type_partial(oh, len, &amp;amp;type);
+        if (!error) {
+            ofp_header_to_string__(oh, type, &amp;amp;string);
+            ds_put_char(&amp;amp;string, '\n');
+        }
+
         ds_put_format(&amp;amp;string,
                       "(***truncated to %zu bytes from %"PRIu16"***)\n",
                       len, ntohs(oh-&amp;gt;length));
diff --git a/tests/ofp-errors.at b/tests/ofp-errors.at
index 5f76294..a459ede 100644
--- a/tests/ofp-errors.at
+++ b/tests/ofp-errors.at
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -18,10 +18,28 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; AT_CLEANUP
 
 AT_SETUP([OFPT_ERROR with type OFPET_BAD_REQUEST - OF1.0])
 AT_KEYWORDS([ofp-print ofp-errors])
-AT_CHECK([ovs-ofctl ofp-print 01010014000000000001000601bbccddeeff0011], [0], [dnl
+AT_CHECK([ovs-ofctl ofp-print 0101001400000000000100060105ccddeeff0011], [0], [dnl
 OFPT_ERROR (xid=0x0): OFPBRC_BAD_LEN
+OFPT_FEATURES_REQUEST (xid=0xeeff0011):
 (***truncated to 8 bytes from 52445***)
-00000000  01 bb cc dd ee ff 00 11-                        |........        |
+00000000  01 05 cc dd ee ff 00 11-                        |........        |
+])
+AT_CLEANUP
+
+AT_SETUP([OFPT_ERROR prints type of truncated inner messages])
+AT_KEYWORDS([ofp-print ofp-errors])
+AT_CHECK([ovs-ofctl ofp-print "0101004c092529d500010006 \
+01 06 00 e0 00 00 00 01 00 00 50 54 00 00 00 01 \
+00 00 01 00 02 00 00 00 00 00 00 87 00 00 0f ff \
+ff fe 50 54 00 00 00 01 62 72 30 00 00 00 00 00 \
+00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01"], [0], [dnl
+OFPT_ERROR (xid=0x92529d5): OFPBRC_BAD_LEN
+OFPT_FEATURES_REPLY (xid=0x1):
+(***truncated to 64 bytes from 224***)
+00000000  01 06 00 e0 00 00 00 01-00 00 50 54 00 00 00 01 |..........PT....|
+00000010  00 00 01 00 02 00 00 00-00 00 00 87 00 00 0f ff |................|
+00000020  ff fe 50 54 00 00 00 01-62 72 30 00 00 00 00 00 |..PT....br0.....|
+00000030  00 00 00 00 00 00 00 00-00 00 00 01 00 00 00 01 |................|
 ])
 AT_CLEANUP
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -45,18 +63,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; dnl Error type 3, code 1 is OFPFMFC_OVERLAP in OF1.0
 dnl and OFPBIC_UNSUP_INST in OF1.1, so check that value in both versions.
 AT_SETUP([OFPT_ERROR with type OFPFMFC_OVERLAP - OF1.0])
 AT_KEYWORDS([ofp-print ofp-errors])
-AT_CHECK([ovs-ofctl ofp-print 01010014000000000003000101bbccddeeff0011], [0], [dnl
+AT_CHECK([ovs-ofctl ofp-print 0101001400000000000300010106ccddeeff0011], [0], [dnl
 OFPT_ERROR (xid=0x0): OFPFMFC_OVERLAP
+OFPT_FEATURES_REPLY (xid=0xeeff0011):
 (***truncated to 8 bytes from 52445***)
-00000000  01 bb cc dd ee ff 00 11-                        |........        |
+00000000  01 06 cc dd ee ff 00 11-                        |........        |
 ])
 AT_CLEANUP
 AT_SETUP([OFPT_ERROR with type OFPBIC_UNSUP_INST - OF1.1])
 AT_KEYWORDS([ofp-print ofp-errors])
-AT_CHECK([ovs-ofctl ofp-print 02010014000000000003000102bbccddeeff0011], [0], [dnl
+AT_CHECK([ovs-ofctl ofp-print 0201001400000000000300010206ccddeeff0011], [0], [dnl
 OFPT_ERROR (OF1.1) (xid=0x0): OFPBIC_UNSUP_INST
+OFPT_FEATURES_REPLY (OF1.1) (xid=0xeeff0011):
 (***truncated to 8 bytes from 52445***)
-00000000  02 bb cc dd ee ff 00 11-                        |........        |
+00000000  02 06 cc dd ee ff 00 11-                        |........        |
 ])
 AT_CLEANUP
 
diff --git a/tests/ofp-print.at b/tests/ofp-print.at
index 4b94fb4..265ee28 100644
--- a/tests/ofp-print.at
+++ b/tests/ofp-print.at
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -26,17 +26,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; AT_CLEANUP
 
 AT_SETUP([truncated message])
 AT_KEYWORDS([ofp-print])
-AT_CHECK([ovs-ofctl ofp-print 01bbccddeeff0011], [0], [dnl
+AT_CHECK([ovs-ofctl ofp-print 0110ccddeeff0011], [0], [dnl
 (***truncated to 8 bytes from 52445***)
-00000000  01 bb cc dd ee ff 00 11-                        |........        |
+00000000  01 10 cc dd ee ff 00 11-                        |........        |
 ])
 AT_CLEANUP
 
 AT_SETUP([message only uses part of buffer])
 AT_KEYWORDS([ofp-print])
-AT_CHECK([ovs-ofctl ofp-print 01bb0009eeff00112233], [0], [dnl
+AT_CHECK([ovs-ofctl ofp-print 01100009eeff00112233], [0], [dnl
 (***only uses 9 bytes out of 10***)
-00000000  01 bb 00 09 ee ff 00 11-22 33                   |........"3      |
+00000000  01 10 00 09 ee ff 00 11-22 33                   |........"3      |
 ])
 # "
 AT_CLEANUP
&lt;/pre&gt;</description>
    <dc:creator>Ben Pfaff</dc:creator>
    <dc:date>2012-05-23T16:34:07</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10724">
    <title>Problem with DHCP and TUNNEL</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10724</link>
    <description>&lt;pre&gt;
Hi,
I have the following situation:
-two different physical hosts (H1 and H2);
-in H1 I created a bridge (br1) and I started a dnsmasq daemon listening on it (DHCPDAEMON1);
-in H2 I created another bridge (br2) and I started a dnsmasq daemon listening on it (DHCPDAEMON2);
-I created a gre tunnel between H1 and H2.

The problem is that, if I start a Virtual Machine on H1 I receive DHCP offer both from DHCPDAEMON1 and DHCPDAEMON2, and if I start a VM on H2 I obtain the same behaviour.

My question is: is it possible to prevent DHCP traffic from passing into the tunnel?

Thanks,
Daniele Milani
       &lt;/pre&gt;</description>
    <dc:creator>Daniele Milani</dc:creator>
    <dc:date>2012-05-23T14:49:21</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10718">
    <title>OVS Push VLAN Tag Hack and Problem</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10718</link>
    <description>&lt;pre&gt;Hi,

I was working on a hack which can change the behavior of
"mod_vlan_vid" action and behave as "push_vlan" for a quick temporary
OF1.1 support. For this, I changed the following two functions:
(PS: I am using mininet framework)

FILE: ~/openvswitch/datapath/actions.c
FUNCTION:
static struct sk_buff *modify_vlan_tci(struct sk_buff *skb, __be16 tci)
{
struct vlan_ethhdr *vh;
__be16 old_tci;

if (vlan_tx_tag_present(skb) || skb-&amp;gt;protocol != htons(ETH_P_8021Q))
return __vlan_hwaccel_put_tag(skb, ntohs(tci));

skb = make_writable(skb, 0);
if (unlikely(!skb))
return NULL;

if (unlikely(skb-&amp;gt;len &amp;lt; VLAN_ETH_HLEN))
return skb;

vh = vlan_eth_hdr(skb);

old_tci = vh-&amp;gt;h_vlan_TCI;
vh-&amp;gt;h_vlan_TCI = tci;

if (get_ip_summed(skb) == OVS_CSUM_COMPLETE) {
__be16 diff[] = { ~old_tci, vh-&amp;gt;h_vlan_TCI };
skb-&amp;gt;csum = ~csum_partial((char *)diff, sizeof(diff), ~skb-&amp;gt;csum);
}

return skb;
}
CHANGED TO:
static struct sk_buff *modify_vlan_tci(struct sk_buff *skb, __be16 tci)
{

struct vlan_ethhdr *vh;
__be16 old_tci;

if (vlan_tx_tag_present(skb)) {
        __be16 current_tag;
        current_tag = vlan_tx_tag_get(skb);

        skb = __vlan_put_tag(skb,current_tag);
        return __vlan_hwaccel_put_tag(skb,ntohs(tci))
}
else if(skb-&amp;gt;protocol != (ETH_P_8021Q)) {
        return __vlan_hwaccel_put_tag(skb,ntohs(tci));
}

skb = make_writable(skb, 0);
if (unlikely(!skb))
return NULL;

if (unlikely(skb-&amp;gt;len &amp;lt; VLAN_ETH_HLEN))
return skb;

vh = vlan_eth_hdr(skb);

old_tci = vh-&amp;gt;h_vlan_TCI;
vh-&amp;gt;h_vlan_TCI = tci;

if (get_ip_summed(skb) == OVS_CSUM_COMPLETE) {
__be16 diff[] = { ~old_tci, vh-&amp;gt;h_vlan_TCI };
skb-&amp;gt;csum = ~csum_partial((char *)diff, sizeof(diff), ~skb-&amp;gt;csum);
}

return skb;
}


FILE: ~/openvswitch/lib/dpif-netdev.c
FUNCTION:
static void
dp_netdev_set_dl_tci(struct ofpbuf *packet, uint16_t tci)
{
    struct vlan_eth_header *veh;
    struct eth_header *eh;

    eh = packet-&amp;gt;l2;
    if (packet-&amp;gt;size &amp;gt;= sizeof(struct vlan_eth_header)
        &amp;amp;&amp;amp; eh-&amp;gt;eth_type == htons(ETH_TYPE_VLAN)) {
        veh = packet-&amp;gt;l2;
        veh-&amp;gt;veth_tci = tci;
    } else {
        // Insert new 802.1Q header.
        struct vlan_eth_header tmp;
        memcpy(tmp.veth_dst, eh-&amp;gt;eth_dst, ETH_ADDR_LEN);
        memcpy(tmp.veth_src, eh-&amp;gt;eth_src, ETH_ADDR_LEN);
        tmp.veth_type = htons(ETH_TYPE_VLAN);
        tmp.veth_tci = tci;
        tmp.veth_next_type = eh-&amp;gt;eth_type;

        veh = ofpbuf_push_uninit(packet, VLAN_HEADER_LEN);
        memcpy(veh, &amp;amp;tmp, sizeof tmp);
        packet-&amp;gt;l2 = (char*)packet-&amp;gt;l2 - VLAN_HEADER_LEN;
    }
}
CHANGED TO:
static void
dp_netdev_set_dl_tci(struct ofpbuf *packet, uint16_t tci)
{

    struct vlan_eth_header *veh;
    struct eth_header *eh;

    eh = packet-&amp;gt;l2;

        // Insert new 802.1Q header.
        struct vlan_eth_header tmp;
        memcpy(tmp.veth_dst, eh-&amp;gt;eth_dst, ETH_ADDR_LEN);
        memcpy(tmp.veth_src, eh-&amp;gt;eth_src, ETH_ADDR_LEN);
        tmp.veth_type = htons(ETH_TYPE_VLAN);
        tmp.veth_tci = tci;
        tmp.veth_next_type = eh-&amp;gt;eth_type;

        veh = ofpbuf_push_uninit(packet, VLAN_HEADER_LEN);
        memcpy(veh, &amp;amp;tmp, sizeof tmp);
        packet-&amp;gt;l2 = (char*)packet-&amp;gt;l2 - VLAN_HEADER_LEN;

}


I have then followed the following steps:
make clean ; .//boot.sh ; configure ; make ; sudo make install ; sudo
cp ~/openvswitch/datapath/linux-2.6/openvswitch_mod.ko
/lib/modules/2.6.38-8-generic/kernel/drivers/net/openvswitch_mod.ko

and everything happens smoothly. But on running the mininet, with
specifying two "mod_vlan_vid" instructions in the action list, (flow
added using 'dpctl')  the final packet just seems to have the final
VLAN ID, as if my changes din't account to anything.

Where am I going wrong ? Does the changes I have made really result in
behavior that I intend to see ?

Thanking You,
Rohit
&lt;/pre&gt;</description>
    <dc:creator>Naga Rohit, IIT Guwahati</dc:creator>
    <dc:date>2012-05-23T05:14:45</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10717">
    <title>[PATCH] Allow general masking of IPv4 addresses ratherthan just CIDR masks.</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10717</link>
    <description>&lt;pre&gt;OF1.1 and later make these fields fully maskable so we might as well also.

Signed-off-by: Ben Pfaff &amp;lt;blp-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
---
This depends on the "ofp11_match" series.

 NEWS                          |    4 ++++
 include/openflow/nicira-ext.h |    6 ++++--
 lib/meta-flow.c               |    8 ++++----
 lib/ofp-util.c                |   17 ++++++++++-------
 lib/packets.c                 |    7 ++++---
 tests/ovs-ofctl.at            |   18 ++++++++++++++----
 utilities/ovs-ofctl.8.in      |    4 +++-
 7 files changed, 43 insertions(+), 21 deletions(-)

diff --git a/NEWS b/NEWS
index f8f09e6..374aec7 100644
--- a/NEWS
+++ b/NEWS
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,5 +1,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 post-v1.7.0
 ------------------------
+    - OpenFlow:
+      - Allow general bitwise masking for IPv4 source and destination
+        addresses in IPv4 and ARP packets.  (Previously, only CIDR masks
+        were allowed.)
 
 
 v1.7.0 - xx xxx xxxx
diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h
index d2a3535..6e994ce 100644
--- a/include/openflow/nicira-ext.h
+++ b/include/openflow/nicira-ext.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1461,7 +1461,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; OFP_ASSERT(sizeof(struct nx_action_output_reg) == 24);
  *
  * Format: 32-bit integer in network byte order.
  *
- * Masking: Only CIDR masks are allowed, that is, masks that consist of N
+ * Masking: Fully maskable, in Open vSwitch 1.8 and later.  In earlier
+ *   versions, only CIDR masks are allowed, that is, masks that consist of N
  *   high-order bits set to 1 and the other 32-N bits set to 0. */
 #define NXM_OF_IP_SRC     NXM_HEADER  (0x0000,  7, 4)
 #define NXM_OF_IP_SRC_W   NXM_HEADER_W(0x0000,  7, 4)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1530,7 +1531,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; OFP_ASSERT(sizeof(struct nx_action_output_reg) == 24);
  *
  * Format: 32-bit integer in network byte order.
  *
- * Masking: Only CIDR masks are allowed, that is, masks that consist of N
+ * Masking: Fully maskable, in Open vSwitch 1.8 and later.  In earlier
+ *   versions, only CIDR masks are allowed, that is, masks that consist of N
  *   high-order bits set to 1 and the other 32-N bits set to 0. */
 #define NXM_OF_ARP_SPA    NXM_HEADER  (0x0000, 16, 4)
 #define NXM_OF_ARP_SPA_W  NXM_HEADER_W(0x0000, 16, 4)
diff --git a/lib/meta-flow.c b/lib/meta-flow.c
index 8b60b35..c7949cb 100644
--- a/lib/meta-flow.c
+++ b/lib/meta-flow.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -175,7 +175,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const struct mf_field mf_fields[MFF_N_IDS] = {
     {
         MFF_IPV4_SRC, "ip_src", "nw_src",
         MF_FIELD_SIZES(be32),
-        MFM_CIDR, 0,
+        MFM_FULLY, 0,
         MFS_IPV4,
         MFP_IPV4,
         true,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -184,7 +184,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const struct mf_field mf_fields[MFF_N_IDS] = {
     }, {
         MFF_IPV4_DST, "ip_dst", "nw_dst",
         MF_FIELD_SIZES(be32),
-        MFM_CIDR, 0,
+        MFM_FULLY, 0,
         MFS_IPV4,
         MFP_IPV4,
         true,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -281,7 +281,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const struct mf_field mf_fields[MFF_N_IDS] = {
     }, {
         MFF_ARP_SPA, "arp_spa", NULL,
         MF_FIELD_SIZES(be32),
-        MFM_CIDR, 0,
+        MFM_FULLY, 0,
         MFS_IPV4,
         MFP_ARP,
         false,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -290,7 +290,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const struct mf_field mf_fields[MFF_N_IDS] = {
     }, {
         MFF_ARP_TPA, "arp_tpa", NULL,
         MF_FIELD_SIZES(be32),
-        MFM_CIDR, 0,
+        MFM_FULLY, 0,
         MFS_IPV4,
         MFP_ARP,
         false,
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index edc9d41..7ecf810 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -64,8 +64,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofputil_wcbits_to_netmask(int wcbits)
 }
 
 /* Given the IP netmask 'netmask', returns the number of bits of the IP address
- * that it wildcards, that is, the number of 0-bits in 'netmask'.  'netmask'
- * must be a CIDR netmask (see ip_is_cidr()). */
+ * that it wildcards, that is, the number of 0-bits in 'netmask', a number
+ * between 0 and 32 inclusive.
+ *
+ * If 'netmask' is not a CIDR netmask (see ip_is_cidr()), the return value will
+ * still be in the valid range but isn't otherwise meaningful. */
 int
 ofputil_netmask_to_wcbits(ovs_be32 netmask)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -347,11 +350,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofputil_cls_rule_from_ofp11_match(const struct ofp11_match *match,
         if (!(wc &amp;amp; OFPFW11_NW_PROTO)) {
             cls_rule_set_nw_proto(rule, match-&amp;gt;nw_proto);
         }
-
-        if (!ip_is_cidr(~match-&amp;gt;nw_src_mask) ||
-            !ip_is_cidr(~match-&amp;gt;nw_dst_mask)) {
-            return OFPERR_OFPBMC_BAD_NW_ADDR_MASK;
-        }
         cls_rule_set_nw_src_masked(rule, match-&amp;gt;nw_src, ~match-&amp;gt;nw_src_mask);
         cls_rule_set_nw_dst_masked(rule, match-&amp;gt;nw_dst, ~match-&amp;gt;nw_dst_mask);
     }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1493,6 +1491,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; ofputil_usable_protocols(const struct cls_rule *rule)
         return OFPUTIL_P_NXM_ANY;
     }
 
+    /* Only NXM supports non-CIDR IPv4 address masks. */
+    if (!ip_is_cidr(wc-&amp;gt;nw_src_mask) || !ip_is_cidr(wc-&amp;gt;nw_dst_mask)) {
+        return OFPUTIL_P_NXM_ANY;
+    }
+
     /* Only NXM supports bitwise matching on transport port. */
     if ((wc-&amp;gt;tp_src_mask &amp;amp;&amp;amp; wc-&amp;gt;tp_src_mask != htons(UINT16_MAX)) ||
         (wc-&amp;gt;tp_dst_mask &amp;amp;&amp;amp; wc-&amp;gt;tp_dst_mask != htons(UINT16_MAX))) {
diff --git a/lib/packets.c b/lib/packets.c
index 84ca590..b923476 100644
--- a/lib/packets.c
+++ b/lib/packets.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -149,12 +149,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; eth_from_hex(const char *hex, struct ofpbuf **packetp)
 }
 
 /* Given the IP netmask 'netmask', returns the number of bits of the IP address
- * that it specifies, that is, the number of 1-bits in 'netmask'.  'netmask'
- * must be a CIDR netmask (see ip_is_cidr()). */
+ * that it specifies, that is, the number of 1-bits in 'netmask'.
+ *
+ * If 'netmask' is not a CIDR netmask (see ip_is_cidr()), the return value will
+ * still be in the valid range but isn't otherwise meaningful. */
 int
 ip_count_cidr_bits(ovs_be32 netmask)
 {
-    assert(ip_is_cidr(netmask));
     return 32 - ctz(ntohl(netmask));
 }
 
diff --git a/tests/ovs-ofctl.at b/tests/ovs-ofctl.at
index 0bb219d..536c682 100644
--- a/tests/ovs-ofctl.at
+++ b/tests/ovs-ofctl.at
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -271,12 +271,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; NXM_NX_IP_TTL(80)
 # IP source
 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC(ac100014)
 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/FFFF0000)
+NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/5a5a5a5a)
 NXM_OF_ETH_TYPE(0806) NXM_OF_IP_SRC(ac100014)
 NXM_OF_IP_SRC_W(C0D80000/FFFF0000)
 
 # IP destination
 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST(ac100014)
 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a88012/FFFF0000)
+NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a80000/5a5a5a5a)
 NXM_OF_IP_DST(ac100014)
 NXM_OF_ETH_TYPE(0806) NXM_OF_IP_DST_W(C0D80000/FFFF0000)
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -320,12 +322,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(0001) NXM_OF_ARP_OP(0001)
 # ARP source protocol address
 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA(ac100014)
 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
+NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/aaaaaa00)
 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_SPA(ac100014)
 NXM_OF_ARP_SPA_W(C0D8fedc/FFFF0000)
 
 # ARP destination protocol address
 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA(ac100014)
 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
+NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a81234/77777777)
 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_TPA(ac100014)
 NXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -468,12 +472,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; nx_pull_match() returned error OFPBMC_BAD_PREREQ
 # IP source
 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(ac100014)
 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC_W(c0a80000/ffff0000)
+NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC_W(40080000/5a5a5a5a)
 nx_pull_match() returned error OFPBMC_BAD_PREREQ
 nx_pull_match() returned error OFPBMC_BAD_PREREQ
 
 # IP destination
 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST(ac100014)
 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST_W(c0a80000/ffff0000)
+NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST_W(40080000/5a5a5a5a)
 nx_pull_match() returned error OFPBMC_BAD_PREREQ
 nx_pull_match() returned error OFPBMC_BAD_PREREQ
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -517,12 +523,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; nx_pull_match() returned error OFPBMC_DUP_FIELD
 # ARP source protocol address
 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA(ac100014)
 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA_W(c0a81200/ffffff00)
+NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA_W(80a80200/aaaaaa00)
 nx_pull_match() returned error OFPBMC_BAD_PREREQ
 nx_pull_match() returned error OFPBMC_BAD_PREREQ
 
 # ARP destination protocol address
 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA(ac100014)
 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA_W(c0a81200/ffffff00)
+NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA_W(40201234/77777777)
 nx_pull_match() returned error OFPBMC_BAD_PREREQ
 nx_pull_match() returned error OFPBMC_BAD_PREREQ
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -761,8 +769,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; dnl Try invalid TOS:
 0000 00 00 0800 00 00 c0a88000000000ff 00000000ffffffff 0000 0000 dnl
 00000000 00 000000 0000000000000000ffffffffffffffff
 
-dnl Try non-CIDR nw_src_mask:
-# bad ofp11_match: OFPBMC_BAD_NW_ADDR_MASK
+# ip,nw_src=128.160.128.0/165.165.165.165
+# 44: c0 -&amp;gt; 80
+# 45: a8 -&amp;gt; a0
 0000 0058 00000000 000003f7 dnl
 000000000000ffffffffffff 000000000000ffffffffffff dnl
 0000 00 00 0800 00 00 c0a880005a5a5a5a 00000000ffffffff 0000 0000 dnl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -774,8 +783,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; dnl Try non-CIDR nw_src_mask:
 0000 00 00 0800 00 00 00000000ffffffff c0a88000000000ff 0000 0000 dnl
 00000000 00 000000 0000000000000000ffffffffffffffff
 
-dnl Try non-CIDR nw_dst_mask:
-# bad ofp11_match: OFPBMC_BAD_NW_ADDR_MASK
+# ip,nw_dst=128.160.128.0/165.165.165.165
+# 52: c0 -&amp;gt; 80
+# 53: a8 -&amp;gt; a0
 0000 0058 00000000 000003f7 dnl
 000000000000ffffffffffff 000000000000ffffffffffff dnl
 0000 00 00 0800 00 00 00000000ffffffff c0a880005a5a5a5a 0000 0000 dnl
diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in
index 4f54208..f2d3a3a 100644
--- a/utilities/ovs-ofctl.8.in
+++ b/utilities/ovs-ofctl.8.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -398,7 +398,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; which may be specified as an IP address or host name
 \fInetmask\fR allows restricting a match to an IPv4 address prefix.
 The netmask may be specified as a dotted quad
 (e.g. \fB192.168.1.0/255.255.255.0\fR) or as a CIDR block
-(e.g. \fB192.168.1.0/24\fR).
+(e.g. \fB192.168.1.0/24\fR).  Open vSwitch 1.8 and later support
+arbitrary dotted quad masks; earlier versions support only CIDR masks,
+that is, the dotted quads that are equivalent to some CIDR block.
 .IP
 When \fBdl_type=0x0806\fR or \fBarp\fR is specified, matches the
 \fBar_spa\fR or \fBar_tpa\fR field, respectively, in ARP packets for
&lt;/pre&gt;</description>
    <dc:creator>Ben Pfaff</dc:creator>
    <dc:date>2012-05-23T05:06:34</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10702">
    <title>[worker 00/12] Implement "worker process" to avoidblocking flow setup</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10702</link>
    <description>&lt;pre&gt;ovs-vswitchd occasionally needs to do some activities that may block
in the kernel unavoidably.  This patch series changes ovs-vswitchd to
do these activities in a separate "worker process".

Ben Pfaff (12):
  socket-util: Remove 'passcred' parameter from make_unix_socket().
  socket-util: New function xset_nonblocking().
  socket-util: Add functions for sending fds over Unix domain sockets.
  util: Introduce "subprogram_name" to identify subprocesses and
    threads.
  daemon: Factor out code into new function
    fork_and_wait_for_startup().
  daemon: Factor out code into new function daemonize_post_detach().
  vlog: Add VLOG_ABORT() to log and call abort().
  worker: New library for breaking a daemon into multiple processes.
  vlog: Use system calls instead of stdio to write log files.
  vlog: Use worker process to write to log file.
  shash: New functions smap_from_json(), smap_to_json().
  system-stats: Run as part of worker process.

 NEWS                        |    4 +-
 include/sparse/sys/socket.h |   31 +++
 lib/automake.mk             |    4 +-
 lib/daemon.c                |   69 +++++--
 lib/daemon.h                |    3 +
 lib/fatal-signal.c          |    4 +-
 lib/process.c               |    6 +-
 lib/shash.c                 |   39 ++++-
 lib/shash.h                 |    6 +-
 lib/signals.c               |    6 +-
 lib/socket-util.c           |  278 +++++++++++++++++++++++++--
 lib/socket-util.h           |   30 +++-
 lib/stream-unix.c           |    4 +-
 lib/util.c                  |   23 ++-
 lib/util.h                  |    3 +
 lib/vlog.c                  |  128 +++++++++++--
 lib/vlog.h                  |   16 +-
 lib/worker.c                |  447 +++++++++++++++++++++++++++++++++++++++++++
 lib/worker.h                |   68 +++++++
 tests/test-unix-socket.c    |    6 +-
 utilities/ovs-appctl.8.in   |   10 +
 vswitchd/bridge.c           |   59 ++++--
 vswitchd/ovs-vswitchd.c     |    5 +
 vswitchd/system-stats.c     |  165 +++++++++++++++-
 vswitchd/system-stats.h     |    8 +-
 25 files changed, 1326 insertions(+), 96 deletions(-)
 create mode 100644 lib/worker.c
 create mode 100644 lib/worker.h

&lt;/pre&gt;</description>
    <dc:creator>Ben Pfaff</dc:creator>
    <dc:date>2012-05-23T00:19:03</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10695">
    <title>[PATCH] ofproto-dpif-governor: Fix bug in log message.</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10695</link>
    <description>&lt;pre&gt;Signed-off-by: Ben Pfaff &amp;lt;blp-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
---
 ofproto/ofproto-dpif-governor.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/ofproto/ofproto-dpif-governor.c b/ofproto/ofproto-dpif-governor.c
index 7e3ecfa..817186a 100644
--- a/ofproto/ofproto-dpif-governor.c
+++ b/ofproto/ofproto-dpif-governor.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -162,7 +162,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; governor_new_generation(struct governor *g, unsigned int size)
     if (g-&amp;gt;size != size) {
         if (!g-&amp;gt;size) {
             VLOG_INFO("%s: engaging governor with %u kB hash table",
-                      g-&amp;gt;name, g-&amp;gt;size / 1024);
+                      g-&amp;gt;name, size / 1024);
         } else {
             VLOG_INFO("%s: processed %u packets in %.2f s, "
                       "%s hash table to %u kB",
&lt;/pre&gt;</description>
    <dc:creator>Ben Pfaff</dc:creator>
    <dc:date>2012-05-22T18:39:33</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.openvswitch.devel/10690">
    <title>MPLS and VLAN QinQ patch</title>
    <link>http://comments.gmane.org/gmane.network.openvswitch.devel/10690</link>
    <description>&lt;pre&gt;Hi,

Attached MPLS and VLAN QinQ patch after rebasing to following commit

commit 046f1f89e6d7716581de207dd0c54421926bc25b
Author: Ethan Jackson &amp;lt;ethan-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;lt;mailto:ethan-l0M0P4e3n4LQT0dZR+AlfA&amp;lt; at &amp;gt;public.gmane.org&amp;gt;&amp;gt;
Date:   Mon May 21 13:20:18 2012 -0700

Patch(s) have undergone additional integration testing and incorporates initial code review comments from Ben.

Thanks,
Ravi
&lt;/pre&gt;</description>
    <dc:creator>Ravi.Kerur-+tb+GG71Y8BBDgjK7y7TUQ&lt; at &gt;public.gmane.org</dc:creator>
    <dc:date>2012-05-22T17:36:32</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.network.openvswitch.devel">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.network.openvswitch.devel</link>
  </textinput>
</rdf:RDF>

