)]}'
{"neutron/services/trunk/drivers/openvswitch/agent/trunk_manager.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0064c5cf42057c283c3ae9d84650b57c5e5fdaab","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        trunk \u003d TrunkParentPort(trunk_id, port_id, port_mac)"},{"line_number":208,"context_line":"        if not trunk.bridge.exists():"},{"line_number":209,"context_line":"            raise exc.TrunkBridgeNotFound(bridge\u003dtrunk.bridge.br_name)"},{"line_number":210,"context_line":"        # Once the bridges are connected with the following patch ports,"},{"line_number":211,"context_line":"        # the ovs agent will recognize the ports for processing and it will"},{"line_number":212,"context_line":"        # take over the wiring process and everything that entails."},{"line_number":213,"context_line":"        # REVISIT(rossella_s): revisit this integration part, should tighter"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_b3ae5fe5","side":"PARENT","line":210,"updated":"2016-08-24 21:54:02.000000000","message":"I didn\u0027t mean to get rid of this.","commit_id":"35ffbed6f748cc7f8f4dcba86dd90e193dd38dcc"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0064c5cf42057c283c3ae9d84650b57c5e5fdaab","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"\"\"An OVS trunk parent port."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    A trunk parent port is represented in OVS with two patch ports that"},{"line_number":68,"context_line":"    connects a trunk bridge and the integration bridge respectively."},{"line_number":69,"context_line":"    These patch ports follow strict naming conventions: tpi-\u003chash\u003e for"},{"line_number":70,"context_line":"    the patch port that goes into the integration bridge, and tpt-\u003chash\u003e"},{"line_number":71,"context_line":"    for the patch port that goes into the trunk bridge."}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_9336c3e5","line":68,"updated":"2016-08-24 21:54:02.000000000","message":"connect","commit_id":"9113b9e2be876ad8a40a985894fb0c054969cd36"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0064c5cf42057c283c3ae9d84650b57c5e5fdaab","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    \"\"\"An OVS trunk subport."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    A subport is represented in OVS with two patch ports that"},{"line_number":147,"context_line":"    connects a trunk bridge and the integration bridge respectively."},{"line_number":148,"context_line":"    These patch ports follow strict naming conventions: spi-\u003chash\u003e for"},{"line_number":149,"context_line":"    the patch port that goes into the integration bridge, and spt-\u003chash\u003e"},{"line_number":150,"context_line":"    for the patch port that goes into the trunk bridge."}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_334c2f76","line":147,"updated":"2016-08-24 21:54:02.000000000","message":"connect","commit_id":"9113b9e2be876ad8a40a985894fb0c054969cd36"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"9260ccdcafc44e33a91c732599be130e65f0ac38","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        # use br_trunk or br_int"},{"line_number":176,"context_line":"        ovsdb \u003d br_trunk.ovsdb"},{"line_number":177,"context_line":"        with ovsdb_transaction as txn:"},{"line_number":178,"context_line":"            super(SubPort, self).plug(ovsdb_transaction, br_trunk, br_int)"},{"line_number":179,"context_line":"            txn.add(ovsdb.db_set("},{"line_number":180,"context_line":"                \"Port\", self.patch_port_trunk_name,"},{"line_number":181,"context_line":"                (\"tag\", self.segmentation_id)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_a93ef026","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":74},"updated":"2016-08-24 22:39:45.000000000","message":"doesn\u0027t this still cause the context manager to \"commit\" twice? This is essentially the same as:\n\n \nwith ovsdb_transaction as outer:\n    with outer as inner:\n        inner.add(\u0027foo\u0027)\n        inner.add(\u0027bar\u0027)\n    outer.add(\u0027baz\u0027)\n\nWhen the inner block exits, it will commit \"foo bar\", then there will be another commit when the outer block exits with \"foo bar baz\".","commit_id":"9113b9e2be876ad8a40a985894fb0c054969cd36"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"1445489f58b731532403e845a602b74283768cf9","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        # use br_trunk or br_int"},{"line_number":176,"context_line":"        ovsdb \u003d br_trunk.ovsdb"},{"line_number":177,"context_line":"        with ovsdb_transaction as txn:"},{"line_number":178,"context_line":"            super(SubPort, self).plug(ovsdb_transaction, br_trunk, br_int)"},{"line_number":179,"context_line":"            txn.add(ovsdb.db_set("},{"line_number":180,"context_line":"                \"Port\", self.patch_port_trunk_name,"},{"line_number":181,"context_line":"                (\"tag\", self.segmentation_id)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_b523aca6","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":74},"in_reply_to":"1ac06dbe_442be333","updated":"2016-08-25 15:26:53.000000000","message":"We could still try just using a private module helper function that\u0027s used by both TrunkParentPort and SubPort:\n\n \nwith trunk_bridge.ovsdb.transaction() as txn:\n    txn.add(ovsdb.add_port(br_int.br_name,\n                              self.patch_port_int_name))\n    txn.add(ovsdb.db_set(\u0027Interface\u0027, self.patch_port_int_name,\n                              *patch_int_attrs))\n    txn.add(ovsdb.add_port(br_trunk.br_name,\n                              self.patch_port_trunk_name))\n    txn.add(ovsdb.db_set(\u0027Interface\u0027, self.patch_port_trunk_name,\n                              *patch_trunk_attrs))\n    if segmentation_id:\n        txn.add(ovsdb.db_set(\n            \"Port\", self.patch_port_trunk_name,\n            (\"tag\", self.segmentation_id)))\n\n...something like that, except with the instance variables being passed as parameters to the function. We could have a similar function for unplug() because removing the patch ports is common.\n\nI could try this out and see if you guys like it? Is it worth it?","commit_id":"9113b9e2be876ad8a40a985894fb0c054969cd36"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"678db0c9b03c7a868a0181ee54538ecad95847c5","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        # use br_trunk or br_int"},{"line_number":176,"context_line":"        ovsdb \u003d br_trunk.ovsdb"},{"line_number":177,"context_line":"        with ovsdb_transaction as txn:"},{"line_number":178,"context_line":"            super(SubPort, self).plug(ovsdb_transaction, br_trunk, br_int)"},{"line_number":179,"context_line":"            txn.add(ovsdb.db_set("},{"line_number":180,"context_line":"                \"Port\", self.patch_port_trunk_name,"},{"line_number":181,"context_line":"                (\"tag\", self.segmentation_id)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_442be333","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":74},"in_reply_to":"1ac06dbe_a93ef026","updated":"2016-08-24 23:04:34.000000000","message":"you\u0027re right, I screwed up royally here.\n\nI think I wanted to do something different, but then I changed my mind half way and forgot to come back here. I\u0027ll spin another attempt, but the difference showed here leads me to believe this perhaps ain\u0027t worth it.","commit_id":"9113b9e2be876ad8a40a985894fb0c054969cd36"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"db83dfdf18b9531f8ab3a3df9ef9def41ffb1121","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        # use br_trunk or br_int"},{"line_number":176,"context_line":"        ovsdb \u003d br_trunk.ovsdb"},{"line_number":177,"context_line":"        with ovsdb_transaction as txn:"},{"line_number":178,"context_line":"            super(SubPort, self).plug(ovsdb_transaction, br_trunk, br_int)"},{"line_number":179,"context_line":"            txn.add(ovsdb.db_set("},{"line_number":180,"context_line":"                \"Port\", self.patch_port_trunk_name,"},{"line_number":181,"context_line":"                (\"tag\", self.segmentation_id)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_2596d894","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":74},"in_reply_to":"1ac06dbe_b523aca6","updated":"2016-08-25 20:07:41.000000000","message":"Well, I figured I\u0027d throw it in the mix, so I tried it out anyways [1]. Thoughts?\n\n[1] https://review.openstack.org/#/c/360760/","commit_id":"9113b9e2be876ad8a40a985894fb0c054969cd36"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"48e746c29902b7b2c4cad6d85b7ebb5bfe625b53","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        # use br_trunk or br_int"},{"line_number":176,"context_line":"        ovsdb \u003d br_trunk.ovsdb"},{"line_number":177,"context_line":"        with ovsdb_transaction as txn:"},{"line_number":178,"context_line":"            super(SubPort, self).plug(ovsdb_transaction, br_trunk, br_int)"},{"line_number":179,"context_line":"            txn.add(ovsdb.db_set("},{"line_number":180,"context_line":"                \"Port\", self.patch_port_trunk_name,"},{"line_number":181,"context_line":"                (\"tag\", self.segmentation_id)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_25f8987c","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":74},"in_reply_to":"fa7ab95a_2596d894","updated":"2016-08-25 20:16:38.000000000","message":"Thanks for putting this together. Overall both approaches look less attractive to what we merged here IMO.\n\nI suspect that providing support for nested transaction is something useful in the long run anyway","commit_id":"9113b9e2be876ad8a40a985894fb0c054969cd36"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"6bbb20890fdf76c62e52844f02a7f06c0a234ebb","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        # use br_trunk or br_int"},{"line_number":176,"context_line":"        ovsdb \u003d br_trunk.ovsdb"},{"line_number":177,"context_line":"        with ovsdb_transaction as txn:"},{"line_number":178,"context_line":"            super(SubPort, self).plug(ovsdb_transaction, br_trunk, br_int)"},{"line_number":179,"context_line":"            txn.add(ovsdb.db_set("},{"line_number":180,"context_line":"                \"Port\", self.patch_port_trunk_name,"},{"line_number":181,"context_line":"                (\"tag\", self.segmentation_id)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_a8363fb2","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":74},"in_reply_to":"fa7ab95a_25f8987c","updated":"2016-08-25 20:30:46.000000000","message":"\u003e  Overall both approaches look less attractive to what we merged here IMO.\n\nI agree, the readability does take a hit in both of these alternate approaches. I\u0027d say it justifies the need for the new context manager.","commit_id":"9113b9e2be876ad8a40a985894fb0c054969cd36"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c25bbff96a197523c1f91dcb4de7bb07289d5cf0","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.trunk_id \u003d trunk_id"},{"line_number":70,"context_line":"        self.port_id \u003d port_id"},{"line_number":71,"context_line":"        self.port_mac \u003d port_mac"},{"line_number":72,"context_line":"        self.bridge \u003d TrunkBridge(self.trunk_id)"},{"line_number":73,"context_line":"        # The name has form of tpi-\u003chash\u003e"},{"line_number":74,"context_line":"        self.patch_port_int_name \u003d get_br_int_port_name("},{"line_number":75,"context_line":"            self.DEV_PREFIX, port_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_ead55a1b","side":"PARENT","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":48},"updated":"2016-08-25 10:06:59.000000000","message":"What\u0027s the reason of moving separating bridge out from trunk port and subports? It made logical sense to me that Trunk is tied to its bridge based on trunk_id. Now the API of plug() seems that you can plug trunk ports to different trunk bridges.","commit_id":"35ffbed6f748cc7f8f4dcba86dd90e193dd38dcc"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"22ff6387ee0954064549a2eeecf7620ceac9e168","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.trunk_id \u003d trunk_id"},{"line_number":70,"context_line":"        self.port_id \u003d port_id"},{"line_number":71,"context_line":"        self.port_mac \u003d port_mac"},{"line_number":72,"context_line":"        self.bridge \u003d TrunkBridge(self.trunk_id)"},{"line_number":73,"context_line":"        # The name has form of tpi-\u003chash\u003e"},{"line_number":74,"context_line":"        self.patch_port_int_name \u003d get_br_int_port_name("},{"line_number":75,"context_line":"            self.DEV_PREFIX, port_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_c58c4c38","side":"PARENT","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":48},"in_reply_to":"1ac06dbe_ead55a1b","updated":"2016-08-25 22:41:22.000000000","message":"agreed, I was trying things around.","commit_id":"35ffbed6f748cc7f8f4dcba86dd90e193dd38dcc"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c25bbff96a197523c1f91dcb4de7bb07289d5cf0","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"\"\"An OVS trunk parent port."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    A trunk parent port is represented in OVS with two patch ports that"},{"line_number":68,"context_line":"    connects a trunk bridge and the integration bridge respectively."},{"line_number":69,"context_line":"    These patch ports follow strict naming conventions: tpi-\u003chash\u003e for"},{"line_number":70,"context_line":"    the patch port that goes into the integration bridge, and tpt-\u003chash\u003e"},{"line_number":71,"context_line":"    for the patch port that goes into the trunk bridge."}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_ead27a5a","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":12},"updated":"2016-08-25 10:06:59.000000000","message":"connect ?","commit_id":"b00dede83aa019dd9ece2a9bee537c4907c5fea7"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c25bbff96a197523c1f91dcb4de7bb07289d5cf0","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        attached to the trunk bridge.  Everything is done in a single"},{"line_number":90,"context_line":"        ovsdb transaction so either all operations succeed or fail."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        :param ovsdb_transaction: the OVS transaction context."},{"line_number":93,"context_line":"        :param br_trunk: a trunk bridge where the patch port must be plugged."},{"line_number":94,"context_line":"        :param br_int: an integration bridge where peer endpoint of patch port"},{"line_number":95,"context_line":"                       will be created."}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_2ab772f6","line":92,"range":{"start_line":92,"start_character":38,"end_line":92,"end_character":41},"updated":"2016-08-25 10:06:59.000000000","message":"OVSDB ?","commit_id":"b00dede83aa019dd9ece2a9bee537c4907c5fea7"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c25bbff96a197523c1f91dcb4de7bb07289d5cf0","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    \"\"\"An OVS trunk subport."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    A subport is represented in OVS with two patch ports that"},{"line_number":146,"context_line":"    connects a trunk bridge and the integration bridge respectively."},{"line_number":147,"context_line":"    These patch ports follow strict naming conventions: spi-\u003chash\u003e for"},{"line_number":148,"context_line":"    the patch port that goes into the integration bridge, and spt-\u003chash\u003e"},{"line_number":149,"context_line":"    for the patch port that goes into the trunk bridge."}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_aaa88278","line":146,"range":{"start_line":146,"start_character":13,"end_line":146,"end_character":14},"updated":"2016-08-25 10:06:59.000000000","message":"I\u0027ve always been bad at this, but should it be \"the trunk bridge\" ? Subport is plugged into specific bridge based on its trunk id.","commit_id":"b00dede83aa019dd9ece2a9bee537c4907c5fea7"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c25bbff96a197523c1f91dcb4de7bb07289d5cf0","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    \"\"\"An OVS trunk subport."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    A subport is represented in OVS with two patch ports that"},{"line_number":146,"context_line":"    connects a trunk bridge and the integration bridge respectively."},{"line_number":147,"context_line":"    These patch ports follow strict naming conventions: spi-\u003chash\u003e for"},{"line_number":148,"context_line":"    the patch port that goes into the integration bridge, and spt-\u003chash\u003e"},{"line_number":149,"context_line":"    for the patch port that goes into the trunk bridge."}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_ea8a7a19","line":146,"range":{"start_line":146,"start_character":4,"end_line":146,"end_character":12},"updated":"2016-08-25 10:06:59.000000000","message":"connect ?","commit_id":"b00dede83aa019dd9ece2a9bee537c4907c5fea7"}],"releasenotes/notes/vlan-aware-vms-aka-trunk-3341cc75ba1bf5b4.yaml":[{"author":{"_account_id":11420,"name":"Nir Yechiel","email":"nyechiel@redhat.com","username":"nyechiel"},"change_message_id":"d390fc7fc6166606cfab3d08cbc0288500aa139e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    or above. For more details, please check the networking guide."},{"line_number":19,"context_line":"security:"},{"line_number":20,"context_line":"  - |"},{"line_number":21,"context_line":"    When working with the ML2/openvswitch driver, the \"vlan-aware-vms\" feature"},{"line_number":22,"context_line":"    feature has the following limitations:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    * security groups do not work in conjunction with the iptables-based"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"fa7ab95a_ecd58db9","line":21,"range":{"start_line":21,"start_character":71,"end_line":21,"end_character":78},"updated":"2016-08-31 15:06:13.000000000","message":"The word \u0027feature\u0027 seems to be redundant","commit_id":"51e521b992204772dab2dbec2bf6cd203c52f988"},{"author":{"_account_id":11420,"name":"Nir Yechiel","email":"nyechiel@redhat.com","username":"nyechiel"},"change_message_id":"d390fc7fc6166606cfab3d08cbc0288500aa139e","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    * security groups do not work in conjunction with the iptables-based"},{"line_number":25,"context_line":"      firewall driver."},{"line_number":26,"context_line":"    * if security groups are desired, the use the stateful OVS firewall is"},{"line_number":27,"context_line":"      required, however that prevents the use of DPDK."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"fa7ab95a_8c9401e9","line":26,"range":{"start_line":26,"start_character":38,"end_line":26,"end_character":49},"updated":"2016-08-31 15:06:13.000000000","message":"should be \"the use of the..\"","commit_id":"51e521b992204772dab2dbec2bf6cd203c52f988"},{"author":{"_account_id":11420,"name":"Nir Yechiel","email":"nyechiel@redhat.com","username":"nyechiel"},"change_message_id":"d390fc7fc6166606cfab3d08cbc0288500aa139e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    * security groups do not work in conjunction with the iptables-based"},{"line_number":25,"context_line":"      firewall driver."},{"line_number":26,"context_line":"    * if security groups are desired, the use the stateful OVS firewall is"},{"line_number":27,"context_line":"      required, however that prevents the use of DPDK."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"fa7ab95a_4c93d9fa","line":27,"range":{"start_line":27,"start_character":49,"end_line":27,"end_character":53},"updated":"2016-08-31 15:06:13.000000000","message":"OVS with the DPDK datapath","commit_id":"51e521b992204772dab2dbec2bf6cd203c52f988"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"e167f51766d86f1c3bb8a4f16d76a0275949bbbb","unresolved":false,"context_lines":[{"line_number":25,"context_line":"      firewall driver."},{"line_number":26,"context_line":"    * if security groups are desired, the use of the stateful OVS firewall is"},{"line_number":27,"context_line":"      required, however that prevents the use of the DPDK datapath for OVS"},{"line_number":28,"context_line":"      versions 2.5 or lower."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9a89bdaa_61651644","line":28,"updated":"2016-09-05 07:37:09.000000000","message":"OVS (without DPDK) must be \u003e\u003d2.5 in order to use ovs firewall.","commit_id":"8b1772cc31b4f7b6ebcf34d634cc7a0273ebdebe"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"931bedf618d1732ca137f66f5451af515da7aa9e","unresolved":false,"context_lines":[{"line_number":25,"context_line":"      firewall driver."},{"line_number":26,"context_line":"    * if security groups are desired, the use of the stateful OVS firewall is"},{"line_number":27,"context_line":"      required, however that prevents the use of the DPDK datapath for OVS"},{"line_number":28,"context_line":"      versions 2.5 or lower."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9a89bdaa_c0ba3723","line":28,"in_reply_to":"9a89bdaa_20a04d9f","updated":"2016-09-06 01:14:24.000000000","message":"I thought it\u0027s a bit strange to mention on OVS+DPDK without mentioning plain OVS. (I\u0027m assuming OVS+DPDK has a rather small user-base.)","commit_id":"8b1772cc31b4f7b6ebcf34d634cc7a0273ebdebe"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"693e3140a13a6e6b85d91029eb2b29eb42e0898c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"      firewall driver."},{"line_number":26,"context_line":"    * if security groups are desired, the use of the stateful OVS firewall is"},{"line_number":27,"context_line":"      required, however that prevents the use of the DPDK datapath for OVS"},{"line_number":28,"context_line":"      versions 2.5 or lower."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9a89bdaa_20a04d9f","line":28,"in_reply_to":"9a89bdaa_61651644","updated":"2016-09-05 15:41:22.000000000","message":"I think you misread this: this is telling that if you want to use stateful firewall with DPDK you can use OVS \u003c\u003d2.5.\n\nThe requirements for stateful firewall without DPDK should not be listed here.","commit_id":"8b1772cc31b4f7b6ebcf34d634cc7a0273ebdebe"}]}
