[ovs-dev] [PATCH] ofproto: Limit OVS-assigned port numbers to 32767 and below.
Gurucharan Shetty
shettyg at nicira.com
Thu Nov 7 16:28:53 UTC 2013
On Wed, Nov 6, 2013 at 4:12 PM, Ben Pfaff <blp at nicira.com> wrote:
> A couple of controller vendors have mentioned to me that they would like to
> have some part of the OpenFlow port number space reserved for the
> controller to use. This commit reserves 32768 and up (roughly the upper
> half of the OF1.0 port range) to the controller.
>
> Bug #18753.
> Signed-off-by: Ben Pfaff <blp at nicira.com>
Looks correct to me.
> ---
> NEWS | 3 ++
> ofproto/ofproto.c | 8 ++++--
> vswitchd/vswitch.xml | 75 ++++++++++++++++++++++++++++++++------------------
> 3 files changed, 57 insertions(+), 29 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index 43a2079..1830e3e 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -6,6 +6,9 @@ Post-v2.0.0
> defaults.
> - OpenFlow:
> * The OpenFlow 1.1+ "Write-Actions" instruction is now supported.
> + * OVS limits the OpenFlow port numbers it assigns to port 32767 and
> + below, leaving port numbers above that range free for assignment
> + by the controller.
> - ovs-vswitchd.conf.db.5 man page will contain graphviz/dot
> diagram only if graphviz package was installed at the build time.
> - Support for Linux kernels up to 3.11
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index 0c66a59..d565b19 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -2004,9 +2004,13 @@ alloc_ofp_port(struct ofproto *ofproto, const char *netdev_name)
>
> /* Search for a free OpenFlow port number. We try not to
> * immediately reuse them to prevent problems due to old
> - * flows. */
> + * flows.
> + *
> + * We limit the automatically assigned port numbers to the lower half
> + * of the port range, to reserve the upper half for assignment by
> + * controllers. */
> for (;;) {
> - if (++ofproto->alloc_port_no >= ofproto->max_ports) {
> + if (++ofproto->alloc_port_no >= MIN(ofproto->max_ports, 32768)) {
> ofproto->alloc_port_no = 1;
> }
> last_used_at = ofport_get_usage(ofproto,
> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
> index 52924ee..d2fba34 100644
> --- a/vswitchd/vswitch.xml
> +++ b/vswitchd/vswitch.xml
> @@ -1254,33 +1254,54 @@
> address.</p>
> </column>
>
> - <column name="ofport">
> - <p>OpenFlow port number for this interface. Unlike most columns, this
> - column's value should be set only by Open vSwitch itself. Other
> - clients should set this column to an empty set (the default) when
> - creating an <ref table="Interface"/>.</p>
> - <p>Open vSwitch populates this column when the port number becomes
> - known. If the interface is successfully added,
> - <ref column="ofport"/> will be set to a number between 1 and 65535
> - (generally either in the range 1 to 65279, inclusive, or 65534, the
> - port number for the OpenFlow ``local port''). If the interface
> - cannot be added then Open vSwitch sets this column
> - to -1.</p>
> - <p>When <ref column="ofport_request"/> is not set, Open vSwitch picks
> - an appropriate value for this column and then tries to keep the value
> - constant across restarts.</p>
> - </column>
> -
> - <column name="ofport_request">
> - <p>Requested OpenFlow port number for this interface. The port
> - number must be between 1 and 65279, inclusive. Some datapaths
> - cannot satisfy all requests for particular port numbers. When
> - this column is empty or the request cannot be fulfilled, the
> - system will choose a free port. The <ref column="ofport"/>
> - column reports the assigned OpenFlow port number.</p>
> - <p>The port number must be requested in the same transaction
> - that creates the port.</p>
> - </column>
> + <group title="OpenFlow Port Number">
> + <p>
> + When a client adds a new interface, Open vSwitch chooses an OpenFlow
> + port number for the new port. If the client that adds the port fills
> + in <ref column="ofport_request"/>, then Open vSwitch tries to use its
> + value as the OpenFlow port number. Otherwise, or if the requested
> + port number is already in use or cannot be used for another reason,
> + Open vSwitch automatically assigns a free port number. Regardless of
> + how the port number was obtained, Open vSwitch then reports in <ref
> + column="ofport"/> the port number actually assigned.
> + </p>
> +
> + <p>
> + Open vSwitch limits the port numbers that it automatically assigns to
> + the range 1 through 32,767, inclusive. Controllers therefore have
> + free use of ports 32,768 and up.
> + </p>
> +
> + <column name="ofport">
> + <p>
> + OpenFlow port number for this interface. Open vSwitch sets this
> + column's value, so other clients should treat it as read-only.
> + </p>
> + <p>
> + The OpenFlow ``local'' port (<code>OFPP_LOCAL</code>) is 65,534.
> + The other valid port numbers are in the range 1 to 65,279,
> + inclusive. Value -1 indicates an error adding the interface.
> + </p>
> + </column>
> +
> + <column name="ofport_request"
> + type='{"type": "integer", "minInteger": 1, "maxInteger": 65279}'>
> + <p>
> + Requested OpenFlow port number for this interface.
> + </p>
> +
> + <p>
> + Open vSwitch currently assigns the OpenFlow port number for an
> + interface once, when the client first adds the interface. It does
> + not change the port number later if the client sets or changes or
> + clears <ref column="ofport_request"/>. Therefore, to ensure that
> + <ref column="ofport_request"/> takes effect, the client should set
> + it in the same database transaction that creates the interface.
> + (Future versions of Open vSwitch might honor changes to <ref
> + column="ofport_request"/>.)
> + </p>
> + </column>
> + </group>
> </group>
>
> <group title="System-Specific Details">
> --
> 1.7.10.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list